2016-05-13 5 views
0

Ich habe die folgende PHP-Datei:Egal was ich eintippe für Benutzername ist erfolgreich?

<!DOCTYPE html> 
<html> 
<body> 

<?php 

$name = $_POST["username"]; 
$password = $_POST["password"]; 

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

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

mysql_select_db("login", $con); 

$result = mysql_query("UPDATE data SET password ='$password' WHERE username='$name'"); 

if (!$result) { 
    echo "FAIL"; 
} else { 
    echo "Update sucessfully"; 
} 
?> 

</body> 
</html> 

Dies ist die HTML-Datei:

<body> 
<form method="post" action="Edit.php"> 
    <label>Name:</label> 
    <input type="text" name="username"> 
    <br><br> 
    <label>PasswordL</label> 
    <input type="password:" name="password"> 
    <br> 
    <input type="submit" value="edit"> 
</form> 

Egal, was ich für den Benutzernamen eingeben, druckt es, dass das Update erfolgreich war.

Wie bekomme ich es zu überprüfen, ob der Benutzername nicht in der Datenbank existiert? Stimmt etwas nicht mit meinem PHP-Code?

+0

Die Abfrage wird nicht scheitern, wird es einfach keine Aufzeichnungen finden zu aktualisieren, die –

+0

nun noch ein gültiges Ergebnis in SQL ist bitte mit mysql_ stoppen *: Wechseln Sie zu mysqli oder pdo, mit vorbereiteten Anweisungen/Bind-Variablen, und vermeiden Sie, dass Sie Ihren Code für SQL Injection öffnen. –

+0

ok. Danke für die Beratung – Ron

Antwort

0

Der Grund dafür, dass Sie keinen Fehler erhalten, ist, dass es kein Fehler ist, die Datenbank zu bitten, Datensätze unter bestimmten Bedingungen zu aktualisieren, sodass keine Datensätze aktualisiert werden. Es wäre nur ein Fehler, wenn ein Syntaxfehler aufgetreten wäre.

Mit Ihrem aktuellen Code können Sie mysql_affected_rows() verwenden, um zu überprüfen, ob eine Zeile aktualisiert wurde.

Beachten Sie, dass die Mysql-Bibliothek, die Sie verwenden, veraltet und unsicher ist. Sie sollten stattdessen vorbereitete Anweisungen mit PDO- oder mysqli-Treibern verwenden.

+0

danke. Es löst mein Problem – Ron

+0

Mein Vergnügen. Können Sie jetzt meine Antwort akzeptieren, um Ihre Frage zu schließen? –

0

Sie könnten nach dem Update eine weitere SELECT-Anweisung verwenden, um zu überprüfen, ob der Datensatz mit dem Benutzernamen und dem Kennwort existiert. Und wie die anderen schon gesagt haben, benutze PDO und hasse dein Passwort (wenn du das nicht schon machst). Sie sind offen für SQL-Injektion Hacks.

SELECT 1 FROM db.table WHERE Username = ? AND Password = ? Limit 1 

Referenz: Check if record exists delete it using mysql

1

Gibt es etwas falsch mit meinem PHP-Code?

  1. Ja, Ihre mysql_query wird immer Rückkehr trueauch wenn keine Datensätze gefunden zu aktualisieren. Um zu überprüfen, ob Zeilen betroffen sind, verwenden Sie PDOrowCount().
  2. mysql_* ist jetzt veraltet als wegen der Sicherheit Probleme. Es wird empfohlen, dass Sie zu mysqli_* oder PDO Erweiterungen wechseln. Hier ist ein PDO Beispiel:

<?php 

if(isset($_POST["username"]) and isset($_POST["password"])){ 

$servername = "localhost"; 
$username = "user"; 
$password = "pass"; 
$dbname = "db"; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    //construct the sql query. I'm not sure if password is a reserved mysql keyword, be careful with that. 
    //http://dev.mysql.com/doc/refman/5.7/en/keywords.html 
    $sql = "UPDATE data SET password = :password WHERE username = :name "; 

    // Prepare statement 
    $stmt = $conn->prepare($sql); 

    //bind the post parameters to $sql 
    $stmt->bindParam(':password', $_POST["password"], PDO::PARAM_STR);  
    $stmt->bindParam(':name', $_POST["username"], PDO::PARAM_STR); 

    // execute the query 
    $stmt->execute(); 

    // check if rowCount() returns 1 or more affected rows. 
    if($stmt->rowCount()){ 
     echo "UPDATED SUCCESSFULLY"; 
    }else{ 
     echo "NOT UPDATED"; 
    } 
    } 
catch(PDOException $e) 
    { 
    echo $sql . "<br>" . $e->getMessage(); 
    } 

$conn = null; 

}else{ 
    echo "Form is incomplete!"; 
} 
Verwandte Themen