我的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";}
无论复选框是否被选中,它总是返回&#34;嘿嘿&#34;我不明白。即使我做了这样的事情:
$checkbox = $_POST['kopia'];
if ($checkbox){
echo $checkbox;
} else {echo "bye";}
它永远不会返回&#34; bye&#34;,无论是否选中该框,但如果选中则返回true
,如果未选中则返回false
。这件事已经偷了几个小时了,而且花了几个小时太多了。有什么想法,提示?
答案 0 :(得分:3)
您通过返回true
在false
中传递$_POST['kopia']
或document.getElementById("kopia").checked
,但$_POST
值是PHP中的字符串。因此,字符串"true"
和字符串"false"
将在当前if条件中计算为布尔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";
}
答案 1 :(得分:0)
你可以这样做一个简单的检查:
$isChecked = !empty($_POST['kopia']) ? true : false;
if($isChecked){
echo 'Checked';
}
else{
echo 'Not checked';
}
空检查两个isset,如果0则等于false,如果1等于true,如果不设置则等于false。
希望这会有所帮助。