繁体   English   中英

验证通过php从mysql数据库输入的电子邮件和密码

[英]Verifying email and password input from a mysql database via php

在Larry Ullman的PHP和MySQL书籍第4版(第4版) login_ajax.php的第15章中,我一直在竭尽全力 ,其内容如下:

修改login_ajax.php,使其使用数据库确认成功登录。

到目前为止,这是我一直在尝试的方法,无论执行什么操作,我得到的响应似乎总是“不正确”,然后ajax脚本永远都不会登录我。

到目前为止,我的代码:

<?php

if (isset($_GET['email'], $_GET['password'])){

$email = $_GET['email'];
$password = $_GET['password'];

// Need a valid email address:
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {

    // must match specific values:
    // This values will be gotten from a database

    require('../mysqli_connect.php');

    // retrieve from database

    $q = "SELECT email, pass FROM users WHERE email = '$email'LIMIT 1";

    // run the query
    $r = @mysqli_query($dbc, $q);


    //$check_email = "";
    //$check_pass = "";

    /*while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {

        $check_email = $row['email'];
        $check_pass = $row['pass'];

    }*/   // if the email and password match those in database

    //if (($email == $check_email && $password == $check_pass)) {
    if (mysqli_num_rows($r) > 0) {

        echo 'CORRECT';


    } else {

        echo 'INCORRECT';
    }



    mysqli_close($dbc);


    /*    if(($_GET['email'] == 'email@example.com') && ($_GET['password'] == 'testpass')){

            //Set a cookie, if you want, or start a session.
            // indicate  success:
            echo 'CORRECT';

        }else{// mismatch

            echo'INCORRECT';
        }*/
}else{ // invalid email

    echo 'INVALID_EMAIL';
}

}else{ // missing one of the two variables

echo 'INCOMPLETE';

}

它包含了我的不同尝试。

首先,出于安全原因,我永远不会使用GET提交密码。 要检查密码是否正确,我建议使用php函数password_hash()password_verify()来存储非纯文本形式的密码。

但是要回答您的起源问题:要查看查询的错误,只需删除查询前面的“ @”符号。 我还将在“ LIMIT”语句之前添加一个空格。

如果仍然无法正常工作,请尝试获取mysqli错误并将其发布。

祝好运 :)

您只检查email但同时也检查password字段

如果email正确,则user将使用wrong password

试试这个查询

$q = "SELECT email, pass FROM users WHERE email = '$email' and password = '$password' LIMIT 1";

以及$emailLIMIT之间的space

要么

删除@mysqli_query所以它给予error的更好understaning

您没有显示HTML,但是我会尝试用您给我的内容回答。

  1. '$email'LIMIT之间添加一个空格

  2. 确保数据库中有数据。

  3. 仔细检查在表单中设置name属性的HTML,并确保它与$_GET[]名称匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM