所以我一直在为一个数据库做一个非常简单的设计,该数据库具有允许管理员登录和编辑某些产品的功能。这是从登录表单中获取用户名和密码的当前布局:
$manager = $_POST["username"];
$password = $_POST["password"];
$manager = stripslashes($manager);
$password = stripslashes($password);
$manager = mysql_real_escape_string($manager);
$password = mysql_real_escape_string($password);
我以前创建过登录脚本,但由于某种原因,我在实际工作中遇到了问题。因此,当我到达以下行时,我检查了传递的一些变量,以查看问题发生在哪里:
echo "manager = " . $manager . "<br />";
echo "password = " . $password . "<br />";
$sql = "SELECT * FROM admin WHERE username='$manager' AND password='$password'";
echo $sql;
输出为:
manager = scott
password = password123
SELECT * FROM admin WHERE username='scott' AND password=''
其中$password变量已从$sql字符串的输出中删除。关于它为什么省略$password变量,有什么建议吗?
这是HTML表单代码:
<form id="form1" name="form1" method="post" action="admin_login.php">
Username:<br />
<input name="username" type="text" id="username" size="40" />
<br /><br />
Password:<br />
<input name="password" type="password" id="password" size="40" />
<br /><br /><br />
<input type="submit" name="button" id="button" value="Log In" />
</form>
要结束此问题:
SQL使用password()
作为函数,并且在使用该词时出于安全原因不会显示密码。这里有一些文档:
- https://dev.mysql.com/doc/refman/5.0/en/set-password.html
- https://dev.mysql.com/doc/refman/5.1/en/password-hashing.html
因此,请为密码变量使用另一个名称。
密码
我还注意到您将密码存储为纯文本。不建议这样做。
使用以下选项之一:
- CRYPT_BLOWFISH
crypt()
bcrypt()
scrypt()
- 在OPENWALL上
- PBKDF2
- PHP.net上的PBKDF2
- PHP 5.5的
password_hash()
函数
其他链接:
- PBKDF2用于PHP
脚注:
mysql_*
功能弃用通知:
http://www.php.net/manual/en/intro.mysql.php
从PHP 5.5.0开始,该扩展已被弃用,不建议用于编写新代码,因为它将来会被删除。相反,应该使用mysqli或PDO_MySQL扩展。另请参阅MySQL API概述以获取选择MySQL API时的进一步帮助。
这些函数允许您访问MySQL数据库服务器。有关MySQL的更多信息,请访问»http://www.mysql.com/.
MySQL文档可在»http://dev.mysql.com/doc/.
$sql = "SELECT * FROM admin WHERE username='" .$manager. "' And password='" .$password. "';
试试这个