我正在创建一个登录表单,但我没有成功登录时遇到问题.我的表单看起来像这样
我已经检查过,我正在连接数据库,我的uname和pass都是正确的.我经过多次双重检查.问题在我的查询中.这是loginProcess.php文件
在Fred-ii的帮助下,我能够找出错误并真正快速解决登录问题!我想提供我用来登录的代码,以防其他人遇到这个问题.
这是我用来登录的代码.我觉得我可以使用execute和$ userSql/$ pwSql减少冗余.任何建议清理这一点将不胜感激!
prepare($userSql); $getUser->execute(array( ':uname' => $uname )); if($getUser->rowCount()){ $pwSql = "SELECT pass FROM staff WHERE uname =:uname"; $getPw = $conn->prepare($pwSql); $getPw->execute(array( ':uname' => $uname )); $pw = implode($getPw->fetch(PDO::FETCH_ASSOC)); if(password_verify($pass,$pw)){ header("Location: ../../staffHome.php"); }else{ echo "Oops! You have entered in an incorrect password!"; } }else{ echo "Oops! That user doesn't exist!"; } ?>
Funk Forty N.. 5
这是独家新闻.
您的条件语句if(isset($_POST['login'])){...}
永远不会发生,因为表单不包含name属性(除非您使用JS/jQuery).您需要为提交命名. 因为PHP不依赖于"id",所以它依赖于"name"属性(或者,如果你使用的是JS/jQuery,那么也是如此,但这不是这里的情况).然后从中删除 .
name="login"
然后你没有将连接传递给你的转义函数.
然后你混合的mysql_
功能是不与其他任何东西混合,mysql_
.
我们也不知道您使用哪个MySQL API进行连接.
因此,使用相同的连接到查询,使用mysqli_
或PDO,最好使用预准备语句.
编辑:来自OP的评论:"我正在使用PDO进行连接."
您必须使用相同的连接到查询.你不能混合mysql_
或mysqli_
与PDO 混合.
请教:
我可以在PHP中混合MySQL API吗?
http://php.net/manual/en/mysqli.real-escape-string.php
http://php.net/manual/en/mysqli-result.num-rows.php
http://php.net/manual/en/mysqli.error.php
http://php.net/manual/en/function.mysqli-connect.php
PDO错误处理http://php.net/manual/en/pdo.error-handling.php
将错误报告添加到文件的顶部,这将有助于查找错误.
旁注:显示错误只能在分段中完成,而不能在生产中完成.
密码
我还注意到您可能以纯文本格式存储密码.不建议这样做.
使用以下之一:
crypt_blowfish的
crypt()
bcrypt()
scrypt()
在OPENWALL
PBKDF2
PHP.net上的PBKDF2
PHP 5.5的
password_hash()
功能.兼容包(如果PHP <5.5)https://github.com/ircmaxell/password_compat/
其他链接:
PBKDF2对于PHP
您现在的代码对SQL注入是开放的.使用
mysqli_*
预处理语句,或PDO与预处理语句.
1> Funk Forty N..:这是独家新闻.
您的条件语句
if(isset($_POST['login'])){...}
永远不会发生,因为表单不包含name属性(除非您使用JS/jQuery).您需要为提交命名.因为PHP不依赖于"id",所以它依赖于"name"属性(或者,如果你使用的是JS/jQuery,那么也是如此,但这不是这里的情况).然后从中删除 .
name="login"
然后你没有将连接传递给你的转义函数.
然后你混合的
mysql_
功能是不与其他任何东西混合,mysql_
.我们也不知道您使用哪个MySQL API进行连接.
因此,使用相同的连接到查询,使用
mysqli_
或PDO,最好使用预准备语句.编辑:来自OP的评论:"我正在使用PDO进行连接."
您必须使用相同的连接到查询.你不能混合
mysql_
或mysqli_
与PDO 混合.
请教:
我可以在PHP中混合MySQL API吗?
http://php.net/manual/en/mysqli.real-escape-string.php
http://php.net/manual/en/mysqli-result.num-rows.php
http://php.net/manual/en/mysqli.error.php
http://php.net/manual/en/function.mysqli-connect.php
PDO错误处理http://php.net/manual/en/pdo.error-handling.php
将错误报告添加到文件的顶部,这将有助于查找错误.
旁注:显示错误只能在分段中完成,而不能在生产中完成.
密码
我还注意到您可能以纯文本格式存储密码.不建议这样做.
使用以下之一:
crypt_blowfish的
crypt()
bcrypt()
scrypt()
在OPENWALL
PBKDF2
PHP.net上的PBKDF2
PHP 5.5的
password_hash()
功能.兼容包(如果PHP <5.5)https://github.com/ircmaxell/password_compat/
其他链接:
PBKDF2对于PHP
您现在的代码对SQL注入是开放的.使用
mysqli_*
预处理语句,或PDO与预处理语句.