2017-08-03 82 views
1

我一直在努力在拉里乌尔曼的PHP和MySQL第4版login_ajax.php第15章的审查和追求部分,它说:验证电子邮件和密码输入从MySQL数据库通过PHP

修改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 protected]') && ($_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'; 

} 

它包含我不同的尝试。

+5

在限制''$ email'LIMIT 1'之前需要空格';更好地使用prepare语句。'mysqli_query'前删除'@' – Saty

+1

从'@ mysqli_query'中删除'@'符号,以便您可以查看您的查询何时出现错误 –

+0

另外,使用[密码API](http://php.net/password)并停止使用简单的测试密码。 –

回答

1

你只检查email但你也检查password

如果email是正确的那么userwrong password

登录尝试此查询

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

space$emailLIMIT

之间

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

+0

感谢您的密码检查headup,会补充说,脚本终于合作限制的建议和@ – gudchyld

0

你没有显示HTML,但我会尝试用你给我回答。

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

    之间

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

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

2

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

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

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

祝你好运:)

+0

刚刚听到有关第一,password_hash()和password_verify()的函数,肯定会查找它们,感谢您的建议@MarvinX​​ – gudchyld

+0

感谢一百万,它终于与您的建议,我对所有这些人来说都是新鲜事物,但要提供密码安全性并尝试@MarvinX​​ – gudchyld

+0

我很高兴听到它的工作!如果你没有任何脚本问题,如果你把它标记为xD,我会很高兴 – MarvinX