PHP 复选框验证(如果存在其他问题)



我的HTML文件中有一个复选框:

<input type="checkbox" id="kopia" name="kopia" class="form-input" value="0">

我正在尝试将几个值传递给 PHP 文件(通过 AJAX),其中一个是由复选框(简化)创建的布尔值:

name: "kopia"
value: document.getElementById("kopia").checked

如果我通过控制台检查,如果选中,它会返回true,如果未选中,它会返回false

document.getElementById("kopia").checked

如果我通过 PHP 文件检查,它的行为相同:

echo $_POST['kopia']

但是当我写这样的东西时:

$checkbox = $_POST['kopia'];
if ($checkbox){
echo "hey";
} else {echo "bye";}

它总是返回"hey",无论复选框是否被选中。我不明白。即使我做了这样的东西:

$checkbox = $_POST['kopia'];
if ($checkbox){
echo $checkbox;
} else {echo "bye";}

无论是否选中该框,它都不会返回"bye",但如果选中,则返回true,如果未选中则返回false。这东西已经偷了几个小时,这几个小时太多了。知道吗,提示?

您通过返回document.getElementById("kopia").checked传递truefalse$_POST['kopia'],但是$_POST值在PHP中是字符串。 因此,字符串"true"和字符串"false"都将在当前 if 条件下计算为布尔true。 您可以检查字符串值:

$checkbox = $_POST['kopia'];
if ($checkbox == "true"){
echo $checkbox;
} else {
echo "bye";
}

或者你可以将它们转换为布尔值,请参阅 PHP:验证过滤器(感谢 Sysix):

$checkbox = filter_var($_POST['kopia'], FILTER_VALIDATE_BOOLEAN);

或者,如果您将$_POST['kopia']设置为01,这些字符串将在您当前的 if 条件下正确计算。

或者你可以放弃JS值切换,只检查$_POST['kopia']是否存在(仅在选中时):

if(isset($_POST['kopia'])) {
echo "hey";
} else {
echo "bye";
}

您可以像这样进行简单的检查:

$isChecked = !empty($_POST['kopia']) ? true : false;
if($isChecked){
echo 'Checked';
}
else{
echo 'Not checked';
}

空检查 isset,如果 0 等于 false,如果 1 等于真,如果未设置,则等于 false。

希望这有帮助。

最新更新