Login Bereich erstellen

ja aber jetzt hab ich das nächste problem,

obwohl die benutzer in myscql drinn sind und auch eingetragen werden,
beim login wird mir immer gesagt:

Username nicht vorhanden...
irgendwas stimmt immer noch nicht seit dem escapen?


PHP:
$submit = $_POST['submit'];
$fullname = strip_tags($_POST['fullname']);
$username = strip_tags(mysql_real_escape_string($_POST['username']));
$password = strip_tags(mysql_real_escape_string($_POST['password']));
$repeatpassword = strip_tags(mysql_real_escape_string($_POST['repeatpassword']));
$date = date("Y-m-d");

das habe ich im register formular gemacht... dann einen neuen angelegt, aber trotzdem funktionierts nicht :(

es kommt immer, benutzername exestiert nicht :(

hmm gilt das hier auch als escapen:
PHP:
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

weil hiermit findet er den benutzername nicht (was müsste ich denn ändern?)
PHP:
$sql = ("SELECT * FROM users WHERE username='"  .  mysql_real_escape_string($username)  .  "' AND pw='"  .  mysql_real_escape_string($password)."'");

weil es geht nur so:
PHP:
$sql = ("SELECT * FROM users WHERE username='$username'"); 

$result = mysql_query($sql); 

if(mysql_num_rows($result) != 0)
 
Zuletzt bearbeitet:
Du musst [phpf]strip_tags[/phpf] gar nicht mehr auf den Benutzernamen anwenden, [phpf]mysql_real_escape_string[/phpf] reicht.
Außerdem brauchst du das Passwort gar nichts machen, nur [phpf]md5[/phpf], weil diese Funktion sowieso alles nur in Buchstaben und Zahlen wandelt.

Könntest du mal das SQL-Query ausgeben und hier posten?:
PHP:
echo $sql;
 
Zuletzt bearbeitet:
hmm dann müsst ich jetzt alles wieder umbauen...

passt das nicht so?

PHP:
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

und unten dann

PHP:
$sql = ("SELECT * FROM users WHERE username='$username'"); 

$result = mysql_query($sql); 

if(mysql_num_rows($result) != 0)


weil so funktionierts und wenn das somit auch escaped ist solls mir soweit recht sein :)


noch eine kleinigkeit:

bei mir im script kommt

PHP:
 die ("")

vor.

danach wird ja alles abgebrochen... wie bekomme ich es hin, das der html code, also das regstrier formular trotzdem angezeigt wird? gibts da nicht etwas wie "stop_php_code" oder sowas?
 
Es reicht auch so. Wäre ja nur doppelt gemoppelt.

Ich bin mir nicht sicher aber es könnte an den Anführungszeichen liegen. Vieleicht klappts ja wenn du die Escapesd also so:
SQL:
$sql = ("SELECT * FROM users WHERE username='\"  .  mysql_real_escape_string($username)  .  \"' AND pw='\"  .  mysql_real_escape_string($password).\"'");
 
@Joe:
Nein, dein Code ist falsch, denn bei deinem Code wird [phpf]mysql_real_escape_string[/phpf] nicht als PHP-Anweisung interpretiert, sondern nur als String.​

@leon_20v:

Poste bitte das SQL-Query.
 
ComFreek ich muss halt den ganzen code wieder umbauen wenn ich das SQL-Query ausgeben soll.

Ich habe das jetzt so escaped:

PHP:


der ganze code sieht so aus:
PHP:
<?php

session_start();

$connect = mysql_connect ("localhost","xxx","xxx") or die ("kann nicht connecten to db");
	
mysql_select_db("db1002505-phplogin") or die ("kann db nicht finden");

$username = strtolower(mysql_real_escape_string($_POST['username']));
$password = mysql_real_escape_string($_POST['password']);

if($username&&$password)
{ 	
	$sql = ("SELECT * FROM users WHERE username='$username'"); 

$result = mysql_query($sql); 

if(mysql_num_rows($result) != 0)   
{
	while ($row = mysql_fetch_assoc($result))
	{
		$dbusername = $row['username'];
		$dbpassword = $row['password'];
	}
	
		if ($dbusername==$username&&$dbpassword==md5($password))
		{
		
		echo "<p>Du bist eingeloggt! <a class='speziell' href='member.php'>Klicke hier um zum Memberbereich zu kommen</a></p>";
		$_SESSION['username']=$username;
			
		}
		else
			echo "<p>Falsches Password!</p>";
}
else
	die("<p>Dieser Username existiert nicht!</p>");
	
}
else
	die("<p>Bitte gib einen Username und ein Password ein!</p>");

?>

ist das save so? wenn nicht dann bau ich das ganze wieder um :)
 
Zuletzt bearbeitet:
Dein Code ist von der Logik her irgendwie falsch.
Zum Beispiel die While-Schleife überschreibt immer die selbe Variable...
Ich baue es mal für dich um.

Edit: Ok, habe es mal umgebaut:
PHP:
<?php
session_start();

$connect = mysql_connect ("localhost","xxx","xxx") or die ("kann nicht connecten to db");    
mysql_select_db("db1002505-phplogin") or die ("kann db nicht finden");

$username = mysql_real_escape_string(strtolower($_POST['username']));
$password = md5($_POST['password']);

if($username!="" && $password!="")
{
  $sql = ("SELECT * FROM users WHERE username='$username' AND pw='".$password."' LIMIT 1"); 
  $result = mysql_query($sql); 
  if (!$result)
  {
    die("mysql_query fehlgeschlagen,<br />SQL-Query war: $sql");
  }
  if(mysql_num_rows($result) > 0)   
  {
    echo "<p>Du bist eingeloggt! <a class='speziell' href='member.php'>Klicke hier um zum Memberbereich zu kommen</a></p>";
    $_SESSION['username']=$username;        
  }
  else
  {
    echo "<p>Falscher Benutzername oder Passwort!</p>";
  }
}
else
{
  die("<p>Bitte gib einen Username und ein Password ein!</p>");
}

?>
?>
Allerdings führt dieser Code keine Unterscheidung zwischen "Falsches Passwort" und "Falscher Benutzername" durch. Das machen die meisten so.
Wenn du das doch willst, dann sag es einfach ;)
 
Zuletzt bearbeitet:
hmm....

vielen dak für deine hilfe!

aber da stimmt wirgendwas nicht...

ich bekomm immer falscher benutzername oder password obwohl die richtig sind...



bei meinem script stimmt auch irgendwas nicht... ich bleib nämlich nicht eingeloggt :(

hmm
 
Ändere so den Code ab:
(Damit wird das SQL-Query immer ausgegeben!):
PHP:
<?php
session_start();

$connect = mysql_connect ("localhost","xxx","xxx") or die ("kann nicht connecten to db");    
mysql_select_db("db1002505-phplogin") or die ("kann db nicht finden");

$username = mysql_real_escape_string(strtolower($_POST['username']));
$password = md5($_POST['password']);

if($username!="" && $password!="")
{
  $sql = ("SELECT * FROM users WHERE username='$username' AND pw='".$password."' LIMIT 1"); 
  echo "SQL-Query war: " . $sql . "<br />";
  $result = mysql_query($sql); 
  if (!$result)
  {
    die("mysql_query fehlgeschlagen!     SQL-Query siehe oben");
  }
  if(mysql_num_rows($result) > 0)   
  {
    echo "<p>Du bist eingeloggt! <a class='speziell' href='member.php'>Klicke hier um zum Memberbereich zu kommen</a></p>";
    $_SESSION['username']=$username;        
  }
  else
  {
    echo "<p>Falscher Benutzername oder Passwort!</p>";
  }
}
else
{
  die("<p>Bitte gib einen Username und ein Password ein!</p>");
}

?>
 
also das alte script wurde verworfen, weil es einfach zu unsicher ist und mir nicht die funktionen bietet die ich mir wünsche.

jetzt bin ich auf folgendes gestoßen:

PHP:
<?php

if ($_POST['email']) {
//Connect to the database through our include 
include_once "connect_to_mysql.php";
$email = stripslashes($_POST['email']);
$email = strip_tags($email);
$email = mysql_real_escape_string($email);
$password = ereg_replace("[^A-Za-z0-9]", "", $_POST['password']); // filter everything but numbers and letters
$password = md5($password);
// Make query and then register all database data that -
// cannot be changed by member into SESSION variables.
// Data that you want member to be able to change -
// should never be set into a SESSION variable.
$sql = mysql_query("SELECT * FROM members WHERE email='$email' AND password='$password' AND emailactivated='1'"); 
$login_check = mysql_num_rows($sql);
if($login_check > 0){ 
    while($row = mysql_fetch_array($sql)){ 
        // Get member ID into a session variable
        $id = $row["id"];   
        session_register('id'); 
        $_SESSION['id'] = $id;
        // Get member username into a session variable
	    $username = $row["username"];   
        session_register('username'); 
        $_SESSION['username'] = $username;
        // Update last_log_date field for this member now
        mysql_query("UPDATE members SET lastlogin=now() WHERE id='$id'"); 
        // Print success message here if all went well then exit the script
		header("location: member_profile.php?id=$id"); 
		exit();
    } // close while
} else {
// Print login failure message to the user and link them back to your login page
  print '<br /><br /><font color="#FF0000">No match in our records, try again </font><br />
<br /><a href="login.php">Click here</a> to go back to the login page.';
  exit();
}
}// close if post
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Login to your profile</title>
<script type="text/javascript">
<!-- Form Validation -->
function validate_form ( ) { 
valid = true; 
if ( document.logform.email.value == "" ) { 
alert ( "Please enter your User Name" ); 
valid = false;
}
if ( document.logform.pass.value == "" ) { 
alert ( "Please enter your password" ); 
valid = false;
}
return valid;
}
<!-- Form Validation -->
</script>
</head>
<body>
     <div align="center">
       <h3><br />
         <br />
       Log in to your account here<br />  
       <br />
       </h3>
     </div>
     <table align="center" cellpadding="5">
      <form action="login.php" method="post" enctype="multipart/form-data" name="logform" id="logform" onsubmit="return validate_form ( );">
        <tr>
          <td class="style7"><div align="right">Email Address:</div></td>
          <td><input name="email" type="text" id="email" size="30" maxlength="64" /></td>
        </tr>  
        <tr>
          <td class="style7"><div align="right">Password:</div></td>
          <td><input name="password" type="password" id="password" size="30" maxlength="24" /></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td><input name="Submit" type="submit" value="Login" /></td>
        </tr>
      </form>
    </table>
</body>
</html>


das funktioniert soweit auch.

aller möchte ich, dass sich mein benutzer mit seinem username einloggt. das habe ich soweit uach gemacht, doch irgendwie funktioniert das nicht so wie ich möchte.

ich habe überall wo email steht, dann username genommen. (so wie es halt auch in der mysql datenbank steht) aber es funktioniert nicht.

könnt ihr mir helfen was ich ändern muss?
#

also ich habe da so geändert:

PHP:
<?php

if ($_POST['username']) {
//Connect to the database through our include 
include_once "connect_to_mysql.php";
$username = ereg_replace("[^A-Za-z0-9]", "", $_POST['username']);
$password = ereg_replace("[^A-Za-z0-9]", "", $_POST['password']); // filter everything but numbers and letters
$password = md5($password);
// Make query and then register all database data that -
// cannot be changed by member into SESSION variables.
// Data that you want member to be able to change -
// should never be set into a SESSION variable.
$sql = mysql_query("SELECT * FROM members WHERE username='$username' AND password='$password' AND emailactivated='1'"); 
$login_check = mysql_num_rows($sql);
if($login_check > 0){ 
    while($row = mysql_fetch_array($sql)){ 
        // Get member ID into a session variable
        $id = $row["id"];   
        session_register('id'); 
        $_SESSION['id'] = $id;
        // Get member username into a session variable
	    $username = $row["username"];   
        session_register('username'); 
        $_SESSION['username'] = $username;
        // Update last_log_date field for this member now
        mysql_query("UPDATE members SET lastlogin=now() WHERE id='$id'"); 
        // Print success message here if all went well then exit the script
		header("location: index.php"); 
		exit();
    } // close while
} else {
// Print login failure message to the user and link them back to your login page
  print '<br /><br /><font color="#FF0000">No match in our records, try again </font><br />
<br /><a href="login.php">Click here</a> to go back to the login page.';
  exit();
}
}// close if post
?>

und wird damit gefüttert

PHP:
<html>


	<form action='login.php' method='POST'>
    
    <table width="450" border="0" cellspacing="0" cellpadding="0" style="margin-left: 510px; margin-right: 10px;">
  <tr>
    <td>Username:</td>
    <td><input type='text' name='username'></td>
    <td>PW:</td>
    <td><input type='password' name='password'></td>
    <td><input type='submit' value=' Log in '></td>
  </tr>
</table>
</form>

</html>

aber des geht nicht :(
 
Zuletzt bearbeitet:
Zurück