我希望我能正确地格式化代码。我很难把这句话说出来。我已经搜索过了,从这个声明看起来应该是有效的。但是,当我运行它时,不管密码是什么,如果用户名以kacey开头,那么它就会转到echo "Logged in as: " . kacey;
同样,如果我将输入放到kaceyfeewaf,它仍然会转到echo "Logged in as: " . $myuser;无论我输入了什么密码,都会发生这种情况。该行应该对kacey有效。

$sql = "SELECT * FROM $dbTable WHERE username = $myuser AND password = $mypass";
$result = mysql_query($sql);

if($result['username'] = $myuser && $result['password'] = $mypass;)
{
    echo "Logged in as: " . $myuser;
} else {
    echo "Fail ";
  }

最佳答案

这里有一些问题。
首先,查询中的变量是字符串,因此需要引用它们:

WHERE username = '$myuser' AND password = '$mypass'

or die(mysql_error())设置为mysql_query()会发出语法错误的信号。
然后你分配而不是比较
if($result['username'] = $myuser && $result['password'] = $mypass;)

使用两个等于==
但是,这不是检查这些行是否存在的方式。
在使用函数获取/迭代找到的结果时,需要使用mysql_num_rows()或使用while循环。
以下是mysqli使用mysqli_num_rows()的示例:
$conn=mysqli_connect("hostname","username","password","db");

$check_select = mysqli_query($conn, "SELECT * FROM `users`
                                     WHERE email = '$email' AND pw='$pass'");

$numrows=mysqli_num_rows($check_select);

if($numrows > 0){
// do something
}

现在,我们不知道这些变量被分配到了哪里,也不知道从表单中是否使用了具有匹配名称属性的post方法。
即。:
<form action="" method="post">
<input type="text" name="username">
...
</form>

$username = $_POST['username'];

另一件我们不知道的事情是你用来连接的mysql api。确保您确实使用了与用于查询的同一个,即mysql_。不同的api不混合,例如mysqli_或pdo。从连接到查询使用同一个。
error reporting添加到文件顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

附带说明:显示错误只应在登台时进行,而不应在生产时进行。
我注意到你可能用纯文本存储密码。如果真是这样的话,我们会非常失望。
我建议您使用CRYPT_BLOWFISH或php 5.5的password_hash()函数。对于phppassword_hash() compatibility pack
以下是从ircmaxell的一个答案中得出的pdo解决方案:
https://stackoverflow.com/a/29778421/
就用图书馆吧。说真的。它们的存在是有原因的。
php 5.5+:使用password_hash()
php 5.3.7+:使用password-compat(上面的兼容包)
所有其他:使用phpass
别自己动手。如果你自己创造盐,那你就错了。你应该使用一个为你处理的库。
$dbh = new PDO(...);

$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);

$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);

登录时:
$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
    if (password_verify($_POST['password'], $users[0]->password) {
        // valid login
    } else {
        // invalid password
    }
} else {
    // invalid username
}

关于php - PHP,SQL,用户数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31905078/

10-10 16:24