所以我在我的网站上制作了一个登录脚本,之前我和他们搞混了。这次我决定通过更好的教程来改进它,但无论如何我得到了这个我以前从未得过的错误。我已经对此进行了广泛的搜索,所有人都在运行循环,而这些循环并没有发生在我正在尝试做的事情上。我是PHP的新手,仍处于学习的过程中,但对语言有很好的理解。
$hashedPass = passHash($pass);
$sql = "SELECT id, email, pass FROM details WHERE email = '$email'";
$query = mysqli_query($conn, $sql);
$row = mysqli_fetch_row($query);
$id = $row[1];
$dbEmail = $row[2];
$dbPass = $row[4];
// Check if the username and the password they entered was correct
if ($email == $dbEmail && $hashedPass == $dbPass) {
// Set session
$_SESSION['email'] = $email;
$_SESSION['id'] = $id;
错误发生在$ dbPass = $ row ['4'];
我用来哈希密码的函数。
function passHash($pass, $salt = null)
{
if ($salt === null) {
$salt = substr(md5(uniqid(rand(), true)), 0, 5);
}else{
$salt = substr($salt, 0, 5);
}
return $salt . sha1($pass . $salt);
}
答案 0 :(得分:0)
在您的查询中,您只想选择3个字段:id,email,pass:
$sql = "SELECT id, email, pass FROM details WHERE email = '$email'";
所以,你将拥有:
$row = mysqli_fetch_row($query);
$id = $row[0];
$dbEmail = $row[1];
$dbPass = $row[2];
而不是
$id = $row[1]; //this index refers to "email" field on your row
$dbEmail = $row[2]; //this index refers to "pass" field on your row
$dbPass = $row[4]; // --> undefined! only 3 fields in your query
事实上,通知“Undefined offset:4”意味着$ row中的索引4不存在!