PHP复选框验证,如果是其他问题

时间:2017-03-03 20:53:35

标签: php post checkbox

我的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。这件事已经偷了几个小时了,而且花了几个小时太多了。有什么想法,提示?

2 个答案:

答案 0 :(得分:3)

您通过返回truefalse中传递$_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']设置为01,则会在您当前的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。

希望这会有所帮助。