无论我输入什么用户名是成功的?

时间:2016-05-13 18:18:49

标签: php html

我有以下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 successfully";
}
?>

</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代码有问题吗?

3 个答案:

答案 0 :(得分:1)

  

我的PHP代码有问题吗?

  1. ,如果找不到任何记录,您的mysql_query始终返回true 甚至更新。要使用PDO rowCount()来检查是否有任何行受到影响。
  2. 由于安全性,
  3. mysql_*现已从PHP7开始弃用 的问题。建议您切换到mysqli_*PDO 扩展。这是PDO示例:
  4. <?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!";
    }
    

答案 1 :(得分:0)

您没有收到错误的原因是,要求数据库在某些条件下更新记录并导致没有更新记录不是错误。如果存在语法错误,则只会出错。

使用当前代码,您可以使用lastApplied检查是否有任何行已更新。

请注意,您使用的Mysql库已弃用且不安全。相反,您应该使用PDO或mysqli驱动程序来使用预准备语句。

答案 2 :(得分:0)

更新后您可以使用另一个select语句来检查记录是否存在用户名和密码。正如其他人所说,开始使用PDO并哈希密码(如果你还没有这样做)。你对sql注入黑客很开放。

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

参考:Check if record exists delete it using mysql