2016-05-11 4 views
-1

Das ist meine login.php SeiteLogin funktioniert nur für erste Daten in der Datenbank?

<!DOCTYPE html> 
<html> 
<body> 

<?php 

$f_usr= $_POST["username"]; 
$f_pswd= $_POST["password"]; 

$con=mysql_connect("localhost","root",""); 

if(! $con) 
{ 
     die('Connection Failed'.mysql_error()); 
} 

mysql_select_db("login",$con); 

$result=mysql_query("SELECT * FROM data"); 

while($row=mysql_fetch_array($result)) 
{ 
    if($row["username"]==$f_usr && $row["password"]==$f_pswd) 
    { 
     echo "<script language=\"JavaScript\">\n"; 
     echo "alert('Successfully Log In');\n"; 
     echo "window.location='MainPage.html'"; 
     echo "</script>"; 
    } 
    else 
    { 
     echo "<script language=\"JavaScript\">\n"; 
     echo "alert('Username or Password was incorrect!');\n"; 
     echo "window.location='login.html'"; 
     echo "</script>"; 
    } 
} 

?> 

</body> 
</html> 

Dies ist meine register.php Seite

<?php 
$connect=mysqli_connect('localhost','root','','login'); 

if(mysqli_connect_errno($connect)) 
{ 
     echo 'Failed to connect'; 
} 

?> 

<?php 

// create a variable 
$username=$_POST['username']; 
$password=$_POST['password']; 

//Execute the query 

mysqli_query($connect,"INSERT INTO data(username, password) 
       VALUES('$username','$password')"); 

      if(mysqli_affected_rows($connect) > 0) 
      { 
       echo "<script language=\"JavaScript\">\n"; 
       echo "alert('Successfully Register');\n"; 
       echo "window.location='MainPage.html'"; 
       echo "</script>"; 
      } 
      else 
      { 
       echo "<script language=\"JavaScript\">\n"; 
       echo "alert('Failed to Register');\n"; 
       echo "window.location='Register.html'"; 
       echo "</script>"; 
      } 

?> 

mein Problem hier. Ich benutze xammp und ich habe 3 Daten aktuell in meiner Datenbank. Wenn ich versuche, mich mit meinen ersten Daten in der Datenbank einzuloggen, funktioniert es, aber wenn ich versuche, mich mit den zweiten Daten in der Datenbank anzumelden, wird ein falscher Benutzername und ein falsches Passwort angezeigt? Warum?

+0

Sie haben in Ihrer Abfrage keine where-Klausel. –

+0

Bitte beachten Sie, dass 'mysql_ *' aus Sicherheitsgründen nicht mehr als 'PHP7' gilt. Es wird empfohlen, zu 'mysqli_ *' oder 'PDO' Erweiterungen zu wechseln. –

+0

'" SELECT * FROM Daten Wobei username = 'ddd' UND password = 'dddd' "' und PDO verwenden, um sql-Injektionen zu vermeiden – Abbasi

Antwort

1

Das Problem ist, weil die folgenden Zeilen,

$result=mysql_query("SELECT * FROM data"); 
while($row=mysql_fetch_array($result)){ ... 

Sie das gesamte Ergebnis mit mysql_query() gesetzt, und du bist nur die erste Zeile aus der Ergebnismenge zu holen. Wenn Sie also versuchen, sich mit den ersten Daten einzuloggen, funktioniert das zwar, aber wenn Sie versuchen, sich mit zweiten oder dritten Daten einzuloggen, funktioniert das nicht.

So ist die Lösung ist,

dieses Treffen Sie Ihre Abfrage wie:

$result=mysql_query("SELECT * FROM data WHERE username = '$f_usr' LIMIT 1"); 

Es wird eine Ergebnismenge zurück, bestehend aus einer einzelnen Zeile wenn es existiert. Und dann holen die Zeile ohne while Schleife, wie folgt aus:

if(mysql_num_rows($result)){ 
    $row=mysql_fetch_array($result); 

    // your code 
}else{ 
    // Incorrect username 
} 

Marginalien:

+0

@JayBlanchard Danke für die Info. aktualisiert. –

+0

@JayBlanchard Also muss die Spalte 'password' nicht in Backticks gehüllt werden? Würde es funktionieren? –

+1

Das ist richtig - Spalten, die nach Schlüsselwörtern benannt sind, brauchen nicht das Backticken zu haben. –

Verwandte Themen