我的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";}
无论是否选中了复选框,它总是返回“嘿”。我不明白。即使我做这样的事情:
$checkbox = $_POST['kopia'];
if ($checkbox){
echo $checkbox;
} else {echo "bye";}
它永远不会返回“再见”,无论盒子是否被检查,但如果选中则返回true
,如果未选中则返回false
。这件事已经偷了几个小时,而且这个时间太长了几个小时。任何想法,提示?
你通过返回true
在false
传递$_POST['kopia']
或document.getElementById("kopia").checked
,但是$_POST
值是PHP中的字符串。因此,字符串"true"
和字符串"false"
将在当前if条件中评估为boolean true
。你可以检查字符串值:
$checkbox = $_POST['kopia'];
if ($checkbox == "true"){
echo $checkbox;
} else {
echo "bye";
}
或者您可以将它们转换为布尔值,请参阅PHP: Validate Filters(感谢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等于true,如果没有设置则等于false。
希望这会有所帮助。