2016-05-13 14 views
0

我有以下PHP文件:無論我輸入用戶名是否成功?

<!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> 

這是HTML文件:

<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> 

不管是什麼我輸入用戶名輸入,它打印的更新成功。

我怎樣才能檢查數據庫中是否存在用戶名?我的PHP代碼有問題嗎?

+0

查詢將不會失敗,它根本不會找到任何記錄更新,這仍然是在SQL –

+0

有效的結果現在,請停止使用mysql_ *:切換到使用mysqli或pdo,準備好語句/綁定變量,並避免打開您的代碼到SQL注入 –

+0

好。感謝您提供建議 – Ron

回答

0

您沒有收到錯誤的原因是因爲要求數據庫在特定條件下更新記錄並導致沒有更新記錄,這不是錯誤。如果出現語法錯誤,這隻會是一個錯誤。

使用您當前的代碼,您可以使用mysql_affected_rows()來檢查是否更新了任何行。

請注意,您使用的Mysql庫已被棄用且不安全。您應該改用使用PDO或mysqli驅動程序的預準備語句。

+0

謝謝。它解決了我的問題 – Ron

+0

我的榮幸。你現在能接受我的答案來解決你的問題嗎? –

0

更新後可能會有另一個select語句,以檢查記錄是否存在用戶名和密碼。正如其他人所說,開始使用PDO並散列你的密碼(如果你還沒有這樣做)。你對sql注入攻擊很開放。

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

參考:Check if record exists delete it using mysql

1

是不是有什麼毛病我的PHP代碼?

  1. ,你mysql_query總是回報true甚至如果沒有找到任何記錄更新。使用PDO使用rowCount()來檢查是否有任何行受到影響。
  2. mysql_*由於安全 問題,現在已棄用截至PHP7的問題。建議您切換到mysqli_*PDO 擴展名。這裏有一個PDO例如:

<?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!"; 
}