-1

我的这个登录表单不起作用——一切都应该没问题,只是它总是说登录不正确。我究竟做错了什么?这是一个与昨天的问题不同的项目,但我在这个问题上做得更好。谢谢你的帮助!顺便说一句,这是 login.php 的顶部,我有基于 Bootstrap 的 HTML 表单。

<?php session_start();

require_once('db_connect.php');

if(isset($_POST['formsubmit']))

{       
        $email = mysqli_real_escape_string($mysqli, $_POST['email']);
        $pass = md5($_POST['pass']);
        $exists = mysqli_query($mysqli, "SELECT COUNT(*) FROM clients WHERE email = '{$email}' AND pass = '{$pass}'"); 

        if(mysqli_fetch_array($exists, MYSQL_NUM) === 1)
        {
            if (isset($_POST['rememberme'])) {
                setcookie('email', $_POST['email'], time()+60*60*24*365);
                setcookie('pass', md5($_POST['pass']), time()+60*60*24*365);

            } else {
                setcookie('email', $_POST['email'], false);
                setcookie('pass', md5($_POST['pass']), false);
            }

            header('Location: index.php');
        } else {
            header('Location: login.php?error=1');
        }
}

?>
4

3 回答 3

1

您的查询返回 null,因此其显示的登录名不正确。您只将电子邮件条件放在哪里,并感染所有数据,如客户端密码、名称等。可能是您的 md5 加密在两种情况下都不同。

于 2013-09-17T02:48:20.920 回答
0
$pass = md5($_POST['pass']);
$exists = mysqli_query($mysqli, "SELECT COUNT(*) FROM clients WHERE email = '{$email}' AND pass = '{$pass}'");

这是因为 $pass 变量在 md5 上,它不会在数据库上返回密码匹配。

尝试这样的事情

$pass_without_md5 = $_POST['pass'];
$pass = md5($_POST['pass']);
$exists = mysqli_query($mysqli, "SELECT COUNT(*) FROM clients WHERE email = '{$email}' AND pass = '{$pass_without_md5}'");

编辑:

<?php session_start();

require_once('db_connect.php');
if(isset($_POST['formsubmit']))
{       
 $email = mysqli_real_escape_string($mysqli, $_POST['email']);
 $pass_without_md5 = $_POST['pass'];
 $pass = md5($_POST['pass']);
 $exists = mysqli_query($mysqli, "SELECT * FROM clients WHERE email = '{$email}' AND pass = '{$pass_without_md5}'"); 

 if(mysqli_num_rows($exists))
 {
  if (isset($_POST['rememberme'])) {
  setcookie('email', $_POST['email'], time()+60*60*24*365);
  setcookie('pass', $pass_without_md5 , time()+60*60*24*365);
  } 
  else {
  setcookie('email', $_POST['email'], false);
  setcookie('pass', $pass_without_md5, false);
  }

  header('Location: index.php');
 } 
 else {
    header('Location: login.php?error=1');
 }
}

?>
于 2013-09-17T02:55:49.930 回答
0

尝试:

if(mysqli_num_rows($exists)) {
    ...
}

不是:

if(mysqli_fetch_array($exists, MYSQL_NUM) === 1) {
    ...
}

mysqli_num_rows文档。

mysqli_fetch_array返回一个对应于获取行的数组。在这种情况下,不是您要查找的内容。

于 2013-09-17T02:45:05.277 回答