【发布时间】: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']) 仅在复选框值为真时执行?
【问题讨论】: