我的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
传递true
或false
$_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']
设置为0
或1
,这些字符串将在您当前的 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。
希望这有帮助。