【问题标题】:ELSE statement doesn't return if while loop returns empty如果 while 循环返回空,则 ELSE 语句不返回
【发布时间】:2018-12-03 00:31:18
【问题描述】:

我正在编写一个脚本来检查数据库barn_users 中是否存在电子邮件,以便重置密码。如果电子邮件不存在,则不会生成令牌/代码并将其存储在数据库中。一切正常,直到我输入不在系统中的电子邮件。带有错误“无法在系统中找到电子邮件。”的 else 语句不会触发。我做错了什么没有得到那个?

    $sql_1 = "SELECT * FROM password_reset WHERE email='$email'";
    $sql_2 = "SELECT * FROM barn_users WHERE email='$email'";

    $generate = mysqli_query($conn, $sql_1);
    $searchEmail = mysqli_query($conn, $sql_2);
    while($row = mysqli_fetch_array($searchEmail)) {
            if(mysqli_num_rows($searchEmail) > 0) {
                if (mysqli_num_rows($generate) > 1) {
            } else if (mysqli_num_rows($generate) < 1) {
                $sql = "INSERT INTO password_reset (code,email) VALUES ('$code','$email')";
            } else {
                $sql = "UPDATE password_reset SET code='$code' WHERE email='$email'";
            }   
            if ($conn->query($sql) == TRUE) {
                echo "Reset password has been emailed to you"; 
            } else {

            }
        } else {
            echo "Could not find email in the system.";
        } 
    }

【问题讨论】:

  • 你的 else 在你的 while 循环中。只有在返回一行时才会验证 else。
  • 我明白了。我能逃脱循环以返回消息吗?
  • @Bleach 所说的。在你之前,将一个变量 - $found - 设置为 false。并在第一个 if 将其设置为 true 之前。去掉 else “找不到”,在 while 结束后检查 $found。
  • @ivanivan 成功了!谢谢你的逻辑。我的大脑谢谢你。
  • 只是为了清楚。根据您的问题的标题。 Else 不是“while”的子功能。它是您的第一个“如果”的子功能。 @ivanivan 的评论将解决您的问题。

标签: php mysql mysqli php-7


【解决方案1】:

感谢@Bleach 和@ivanivan 的 cmets。你的两个答案都有帮助。这是工作结果。在循环之外将变量设为 false,这给了我正在寻找的答案。

    $sql_1 = "SELECT * FROM password_reset WHERE email='$email'";
    $sql_2 = "SELECT * FROM barn_users WHERE email='$email'";

    $generate = mysqli_query($conn, $sql_1);
    $searchEmail = mysqli_query($conn, $sql_2);

    $found = false;

    while($row = mysqli_fetch_array($searchEmail)) {
        $found = true;
        if(mysqli_num_rows($searchEmail) > 0) {
            if (mysqli_num_rows($generate) > 1) {

            } else if (mysqli_num_rows($generate) < 1) {
                $sql = "INSERT INTO password_reset (code,email) VALUES ('$code','$email')";
            } else {
                $sql = "UPDATE password_reset SET code='$code' WHERE email='$email'";
            }   
            if ($conn->query($sql) == TRUE) {
                echo "Reset password has been emailed to you"; 
            } else {

            }
        } else {

        }
    }

    if ($found == false) {
        echo "Sorry, that email was not found in the system. Please try again.";
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2020-04-13
    相关资源
    最近更新 更多