嘿,伙计们,为了这个登录脚本,我已经绞尽脑汁好几个小时了。这是我一直使用的版本,我知道它可以在我的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();
?>发布于 2010-08-20 05:03:32
我看到的关于代码的不太正确的地方:
stripslashes(),因为magic quotes已经不需要转义散列密码了。md5()调用的结果绝对可以信任为32个十六进制字符。当您不需要所有字段时,SELECT * ...。trim()输入($_POST['user']和$_POST['pass']),以消除可能意外插入的额外空格。现在..。您是否尝试过回显查询并亲自运行它,以查看实际发生了什么?例如:
在调用mysql_query()之前,删除重定向并放置一个echo $sql
发布于 2010-08-20 04:57:06
在数据库中可能有两个这样的用户...另外,检查您在查询中使用的值是否正确。您是否在用户名/密码中使用任何非拉丁/特殊字符?
发布于 2010-08-20 06:00:07
这里我可能是错的,但是通过快速查看您的代码,您将加密密码,但不会在查询中使用该密码。试试..。
//instead of ...
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and passwd='$mypassword'";
//try...
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and passwd='$encrypted_password'";https://stackoverflow.com/questions/3526155
复制相似问题