注意:未定义的偏移量:第25行的C:\ wamp \ www \ hybridlegacy \ index.php中的4

时间:2013-10-12 05:21:31

标签: php mysql web mysqli

所以我在我的网站上制作了一个登录脚本,之前我和他们搞混了。这次我决定通过更好的教程来改进它,但无论如何我得到了这个我以前从未得过的错误。我已经对此进行了广泛的搜索,所有人都在运行循环,而这些循环并没有发生在我正在尝试做的事情上。我是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);
    }

1 个答案:

答案 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不存在!