Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 即使SQL应该返回false,也会返回true_Php_Sql - Fatal编程技术网

Php 即使SQL应该返回false,也会返回true

Php 即使SQL应该返回false,也会返回true,php,sql,Php,Sql,我有一个“设置密码”的网站,你可以设置你的密码,只有当你目前没有一个。因此,我有一个SQL查询,只有当电子邮件与数据库中的电子邮件匹配且密码为空时,才选择我们将使用的用户名和密码。如果返回false,则PHP脚本不应执行任何操作,而应回显“密码或用户名无效”。它还可以做其他事情,比如检查密码的长度以及密码是否被确认,但这是一个混乱的问题。有什么想法吗 这是到目前为止我的PHP代码: <?php session_start(); require 'connect.inc.php'; incl

我有一个“设置密码”的网站,你可以设置你的密码,只有当你目前没有一个。因此,我有一个SQL查询,只有当电子邮件与数据库中的电子邮件匹配且密码为空时,才选择我们将使用的用户名和密码。如果返回false,则PHP脚本不应执行任何操作,而应回显“密码或用户名无效”。它还可以做其他事情,比如检查密码的长度以及密码是否被确认,但这是一个混乱的问题。有什么想法吗

这是到目前为止我的PHP代码:

<?php
session_start();
require 'connect.inc.php';
include 'core.php';
ob_start();
?>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<?php
echo "
            <form action='update.php' method='post'>
            Ange din E-post.<br>
            E-post: <input type='text' name='mail' /><br>
            Ange ditt lösenord, minst sex tecken.<br>
            Lösenord: <input type='password' name='pass1' /><br>
            Bekräfta: <input type='password' name='pass2' /><br>
            <input type='submit' value='Godkänn'/><br>";

if(isset($_POST['pass1'])&&isset($_POST['pass2']))
            {

                $email = $_POST['mail'];
                $query = "SELECT login_id, pass FROM users WHERE (email = '$email') AND (pass IS NULL)";
                $query_run = sqlsrv_query( $link, $query);



                if(($_POST['pass1'] == $_POST['pass2']) && !empty($_POST['pass2']) && $query_run && (strlen($_POST['pass2'])>5))
                {
                    $row = sqlsrv_fetch_array($query_run, SQLSRV_FETCH_ASSOC);

                    $id = $row['login_id'];
                    $_SESSION['id'] = $id;

                    $pass = $_POST['pass1'];

                    $query2 = "UPDATE users SET pass = '$pass' WHERE login_id = '$id'";
                    sqlsrv_query( $link, $query2);

                    $next = "https://localhost/title_choice.php";
                    header('Location: '.$next);
                }else
                {
                    echo "Lösenorden matchar ej, eller E-post ogiltig! Var god ange dem igen!";
                }
            }

ob_end_flush();
?>


看起来您正在做的是检查查询是否已运行。此语句将检查查询是否运行:

if(($_POST['pass1'] == $_POST['pass2']) && !empty($_POST['pass2']) && $query_run && (strlen($_POST['pass2'])>5))
相反,您应该检查查询是否没有返回任何内容。您可以像这样使用
sqlsrv\u has\u行

$rows = sqlsrv_has_rows($query_run);
if(($_POST['pass1'] == $_POST['pass2']) && !empty($_POST['pass2']) && $rows && (strlen($_POST['pass2'])>5))
{
    //rest of your code here
}
else{
    //no rows returned
}

仅仅因为SQL查询不返回任何行,并不意味着它失败了,所以
$query\u run
仍然是真的。。。您需要检查返回的行数谢谢!通过使用sqlsrv\u has\u行修复了它!