嘿伙计们,为了这个登录脚本,我已经思考了几个小时了。这是我一直使用的那个,我知道它适用于我的 MySQL 版本。它只是不会将我发送到正确的授权页面,它总是会重定向到“login_failed.php”文件。
非常感谢任何帮助。
<?php
ob_start();
$host="localhost";
$username="*****";
$password="*****";
$db_name="*****";
$tbl_name="*****";
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$myusername=$_POST['user'];
$mypassword=$_POST['pass'];
$encrypted_password=md5($mypassword);
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and passwd='$mypassword'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1){
session_register("myusername");
session_register("mypassword");
header("location:main.php");
}
else {
header("location:login_failed.php");
}
ob_end_flush();
?>
最佳答案
我看到的代码不太正确:
很可能您不需要
stripslashes()
,因为 magic quotes已被弃用。您不需要对散列密码进行转义。
md5()
的结果call绝对可以相信是32个十六进制字符。当您不需要所有字段时,请勿使用
SELECT * ...
。你可能应该
trim()
输入($_POST['user']
和$_POST['pass']
)以去除可能意外插入的额外空格。正如 ircmaxell 所指出的,您没有在查询中使用散列密码。我希望这只是构造查询时的一个错误。
你应该加盐你的密码。阅读这篇文章:Just hashing is far from enough.
现在...您是否尝试过回应查询并自己运行它以查看实际发生了什么?例如:
在调用 mysql_query()
之前删除重定向并放置一个 echo $sql
关于php - 完美的 PHP/MySQL 登录脚本无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3526155/