我对PHP非常陌生,所以当涉及到PHP时,调试并不是我所熟悉的。
我使用php/javascript(ajax)为我的网站更改用户密码。所以基本上,当我登录并试图更改我的密码时。代码在第一个回波处中断。所以我在表单中输入的密码与数据库中的密码不匹配。但是,我使用的是相同的散列方法和所有东西。如果有人有任何想法,请告诉我。谢谢!
if(isset($_POST["u"])) {
$u = preg_replace('#[^a-z0-9]#i', '', $_GET['u']);
$oldpasshash = md5($_POST["cp"]);
$newpasshash = md5($_POST["cnp"]);
$sql = "SELECT id, username, password FROM users WHERE username='$u' LIMIT 1";
$query = mysqli_query($db_conx, $sql);
$row = mysqli_fetch_row($query);
$db_id = $row["id"];
$db_username = $row["username"];
$db_password = $row["password"];
if($db_password != $oldpasshash){
echo "no_exist";
exit();
} else {
$sql = "UPDATE users SET password='$newpasshash', WHERE username='$db_username' LIMIT 1";
$query = mysqli_query($db_conx, $sql);
}
$sql = "SELECT id, username, password FROM users WHERE username='$db_username' LIMIT 1";
$query = mysqli_query($db_conx, $sql);
$row = mysqli_fetch_row($query);
$db_newpass = $row[3];
if($db_newpass == $newpasshash) {
echo "success";
exit();
} else {
echo "pass_failed";
exit();
}
}发布于 2014-06-26 18:30:40
查看您的前两行代码:
if(isset($_POST["u"])) {
$u = preg_replace('#[^a-z0-9]#i', '', $_GET['u']);检查$_POST['u']是否是isset,然后使用$_GET['u']。
FYI,您是直接将$u注入mysql语句,不要这样做。
发布于 2014-06-26 18:30:01
您正在使用mysqli_fetch_row并通过字段名访问表字段。这是不对的。
划从结果集中获取一行数据,并将其作为枚举数组返回,其中每列都存储在从0(0)开始的数组偏移量中。
所以你必须用
$db_id = $row[0];
$db_username = $row[1];
$db_password = $row[2];https://stackoverflow.com/questions/24437460
复制相似问题