【问题标题】:php statement is executed even if checkbox value equals false即使复选框值等于 false 也会执行 php 语句
【发布时间】:2018-04-03 19:55:32
【问题描述】:

我有一个 php 函数,它仅在选中复选框时才更新电子邮件。但是,即使复选框的值为 false,它也会始终执行 if 语句。

我已将if ($_POST['emailCheckbox']) 设置为仅在选中复选框时才执行查询,但由于某种原因,即使值为 false,它也会每次都执行。

这是未勾选复选框时 $_POST 数组的值。否则打印为 true。

数组([emailContact] => example@email.com [passwordContact] => 密码 [firstNameContact] => John [emailCheckbox] => false)

$error = "";

        if (!$_POST['passwordContact']) {

            $error = "<p>You need to provide your password to make changes.</p>";
        }

        if ($error != "") {
            echo $error;
            exit();

        } 

        $query = "SELECT * FROM users WHERE id=".$_SESSION['id']." LIMIT 1";
        $result = mysqli_query($link, $query);

        if (mysqli_num_rows($result) > 0) {

            $row = mysqli_fetch_assoc($result);

            if (!password_verify($_POST['passwordContact'], $row['password'])) {

                $error = "<p>Your password is incorrect. Please try again.</p>";

            } else if ($_POST['emailContact'] == "") {

                $error = "<p>Enter new email address.</p>";

            } else if (filter_var($_POST['emailContact'], FILTER_VALIDATE_EMAIL) == false) {

                $error = "<p>Please enter a valid email address.</p>";

            } else {

                if ($_POST['emailCheckbox']) {

                    $queryEmailCheck = "SELECT * FROM users WHERE email = '".mysqli_real_escape_string($link, $_POST['emailContact'])."' LIMIT 1";
                    $resultEmailCheck = mysqli_query($link, $queryEmailCheck);

                    if (mysqli_num_rows($resultEmailCheck) > 0) {
                        $error = "That email address has already been taken.";
                    }

                }

            }

            if ($error != "") {
                echo $error;
                exit();

            } else {

                if ($_POST['emailCheckbox']) {

                    $queryUpdate = "UPDATE users SET email='".mysqli_real_escape_string($link, $_POST['emailContact'])."', firstName='".mysqli_real_escape_string($link, $_POST['firstNameContact'])."' LIMIT 1";

                } else {

                    $queryUpdate = "UPDATE users SET firstName='".mysqli_real_escape_string($link, $_POST['firstNameContact'])."' WHERE id='".$_SESSION['id']."' LIMIT 1";

                }


                print_r($_POST); //For testing purposes.
                //mysqli_query($link, $queryUpdate);

                echo 1;
            }

        }

在我的 AJAX 调用中,我有以下代码:

$.ajax({
                    type: "POST",
                    url: "actions.php?action=editMyContactDetails",
                    data: "emailContact=" + $("#emailContact").val() + "&passwordContact=" + $("#passwordContact").val() + "&firstNameContact=" + $("#firstNameContact").val() + "&emailCheckbox=" + $("#editEmailCheckbox").is(":checked"),
                    success: function(result) {
                        if (result == "1") {
                            console.log(result);
                        } else {

                            $("#editContactAlert").html(result).show();
                        }
                    }
                })

如何确保if ($_POST['emailCheckbox']) 仅在复选框值为真时执行?

【问题讨论】:

    标签: php jquery ajax


    【解决方案1】:

    $_POST 变量是字符串,除空字符串"" 和字符串"0" 外,所有字符串的计算结果均为true。所以和一个字符串比较:

    if ($_POST['emailCheckbox'] == 'true') {
    

    或将某些字符串验证为布尔值(请参阅Validate Filters)。这里字符串"true" 计算为布尔值true,字符串"false" 计算为布尔值false

    if (filter_var($_POST['emailCheckbox'], FILTER_VALIDATE_BOOLEAN)) {
    

    或者,如果未选中,则不能传递任何内容,如果选中则传递某些内容(true、1 等),然后检查它是否已设置,因为未选中的复选框将不会在 $_POST 数组中传递:

    if (isset($_POST['emailCheckbox'])) {
    

    【讨论】:

      【解决方案2】:

      您正在检查参数是否被传递(总是如此)因此它没有测试value"true" 还是"false"

      例如您需要检查传递的值

      if($_POST['emailCheckbox'] == "true"){...}
      

      【讨论】:

        猜你喜欢
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 2018-06-25
        • 2021-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多