Php 登录脚本中的连续查询失败

Php 登录脚本中的连续查询失败,php,login,Php,Login,我正在制作一个登录脚本,但它一直失败,并打印出“连接失败”。为什么查询失败?我如何才能使其更好 session_start(); if(isset($_POST['submit'])){ $email = $_POST['email']; $pass = $_POST['pass']; $connection=mysqli_connect("localhost","root","","dbname") or die('Connection failed.'); mysqli_select_db

我正在制作一个登录脚本,但它一直失败,并打印出“连接失败”。为什么查询失败?我如何才能使其更好

session_start();
if(isset($_POST['submit'])){
$email = $_POST['email'];
$pass = $_POST['pass'];

$connection=mysqli_connect("localhost","root","","dbname") or die('Connection failed.');
mysqli_select_db($connection, 'dbname') or die ("Connection failed.");

$query = mysqli_query($connection, "SELECT * FROM users WHERE user_email=`$email` AND user_pass=`$pass`") or die ('Connection failed.');

$check_user = mysqli_num_rows($query);

if($check_user == 1){
$row = mysqli_fetch_row($check_user);
$_SESSION[‘user_email’]=$email;
header('Location: yay.php');
}else{
echo"<script>alert('Email or password is incorrect.')</script>";
}
}

首先,您的查询失败

为什么??因为,您对变量使用了错误的引号类型,即记号

$sel_user = "select * from users where user_email = `$email` AND user_pass=`$pass`";
这些应该是单引号

$sel_user = "select * from users where user_email = '$email' AND user_pass='$pass'";
使用检查错误会告诉您语法错误

这对你没有帮助:

$query = mysqli_query($connection, "SELECT * FROM users 
                                    WHERE user_email=`$email` 
                                    AND user_pass=`$pass`") 
                                    or die ('Connection failed.');
                                            ^^^^^^^^^^^^^^^^^^^^
这是:

$query = mysqli_query($connection, "SELECT * FROM users 
                                    WHERE user_email=`$email` 
                                    AND user_pass=`$pass`")
                                    or die(mysqli_error($connection));
另外,您正在为
['user\u email']
使用卷曲引号,这也会导致更改引号后代码失败。(请参阅我关于错误报告的脚注)

增加
exit在标题之后。您的代码可能希望继续执行

对于密码存储,请使用或PHP5.5的函数。对于小于5.5的PHP,请使用

您当前的代码对用户开放。使用,或者,它们更安全


关于你的另一个问题,现在删除:

  • (OP和10K+会员均可查看)
你有:

$connection=mysqli_connect("localhost","root","","db-name");
if (mysqli_connect_error()){
echo"Connection failed.";
}
那你为什么现在用这个

$connection=mysqli_connect("localhost","root","","dbname") or die('Connection failed.');
mysqli_select_db($connection, 'dbname') or die ("Connection failed.");
  • mysqli\u select\u db($connection,'dbname')
    您已经选择了数据库
您所述的错误(在其他问题中):

但是我在标题中得到了上面的错误(mysqli_num_rows()期望参数1是mysqli_result,给定布尔值)

加上这一行:

$row = mysqli_fetch_row($check_user);
您对它使用了错误的变量
$check\u user
,应该是
$query

  • 阅读手册
作为手册中的示例:

$query = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 50,5";

    if ($result = mysqli_query($link, $query)) {

        /* fetch associative array */
        while ($row = mysqli_fetch_row($result)) {
            printf ("%s (%s)\n", $row[0], $row[1]);
        }

脚注:

添加到文件的顶部,这将有助于查找错误

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

mysqli选择db($connection,'dbname')或die(“连接失败”)这行没用。不用担心。很抱歉打扰你,但这看起来很奇怪。我们不妨删除不相关的评论。:)@无名氏不用担心,不过我还是很感激你的评论。那么,我们将删除其他评论,干杯
$query = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 50,5";

    if ($result = mysqli_query($link, $query)) {

        /* fetch associative array */
        while ($row = mysqli_fetch_row($result)) {
            printf ("%s (%s)\n", $row[0], $row[1]);
        }
<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code