Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.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 if语句输出的回显错误_Php_Mysqli - Fatal编程技术网

Php if语句输出的回显错误

Php if语句输出的回显错误,php,mysqli,Php,Mysqli,可能重复: 我的if-else语句有问题。当我在文本框中输入正确的用户名和电子邮件时,它会继续执行else语句并回显“您输入了错误的电子邮件地址”,而不是执行if语句并回显“您的详细信息正确”。有人知道为什么即使我输入了正确的用户名和数据库中与该用户关联的正确电子邮件,它仍会重复错误的语句吗 if (isset($_POST['resetbtn'])) { //get form data $user = $_POST['user']; $email = $_POST[

可能重复:

我的if-else语句有问题。当我在文本框中输入正确的用户名和电子邮件时,它会继续执行else语句并回显“您输入了错误的电子邮件地址”,而不是执行if语句并回显“您的详细信息正确”。有人知道为什么即使我输入了正确的用户名和数据库中与该用户关联的正确电子邮件,它仍会重复错误的语句吗

if (isset($_POST['resetbtn'])) {
    //get form data
    $user  = $_POST['user'];
    $email = $_POST['email'];

    //make sure info is provided
    if ($user) {
        if ($email) {
            if ((strlen($email) >= 7) && (strstr($email, "@")) && (strstr($email, "."))) {

                $query   = "SELECT TeacherUsername, TeacherEmail FROM Teacher WHERE TeacherUsername = ?";
                // prepare query
                $stmt    = $mysqli->prepare($query);
                // You only need to call bind_param once
                $stmt->bind_param("s", $user);
                // execute query
                $stmt->execute();
                // get result and assign variables (prefix with db)
                $stmt->bind_result($dbTeacherUsername, $dbTeacherEmail);
                //get number of rows
                $stmt->store_result();
                $numrows = $stmt->num_rows();

                if ($numrows == 1) {

                    $row            = $stmt->fetch();
                    $dbTeacherEmail = $row['TeacherEmail'];

                    //make sure email is correct

                    if ($email == $dbTeacherEmail) {

                        echo "Your details are correct";
                    } else {
                        echo "You entered in the Wrong Email Address";
                    }
                } else {
                    echo "Please Enter in your Email";
                }
            } else {
                echo "Please Enter in your Username";
            }
        }
    }
}

在php中比较字符串时,不要使用==

使用


测试相等性。

我认为您使用的
$stmt->fetch()
不正确。您似乎将返回值视为数组,但返回值是布尔值,
$dbTeacherEmail
的值已通过
$stmt->bind\u result($dbTeacherUsername,$dbTeacherEmail)
绑定到结果

尝试删除以下内容的行:

$dbTeacherEmail = $row['TeacherEmail'];

看看你能不能得到你想要的。另请参阅

上的文档。您最好使用验证电子邮件,这样可以很好地解决您选择错误的if选项的问题。执行代码时,
$email
$dbTeacherEmail
的值是多少?我将以美元打赌甜甜圈是不同的。在比较之前,尝试回显这两个变量,以确保它们的值。因此,您可以将顶部的三个
if
语句折叠为一个。如果数据库返回匹配的行,则不必测试电子邮件地址是否相同。你已经通过了身份验证。不要向未经授权的用户提示他们输入了正确的用户名和错误的密码(反之亦然)。这只是告诉他们,他们偶然发现了一个正确的值,现在他们只有一个其他值可以“破解”。实际上,如果你只是想测试是否相等,
=
同样有效。嗯,看来你是正确的。这一点我不确定。
$dbTeacherEmail = $row['TeacherEmail'];