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

问题描述 投票:2回答:2

我的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。这件事已经偷了几个小时,而且这个时间太长了几个小时。任何想法,提示?

php post checkbox
2个回答
3
投票

你通过返回truefalse传递$_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']设置为01,则会在当前if条件下正确评估这些字符串。

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

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

0
投票

你可以这样做一个简单的检查:

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

空检查都是isset,如果0等于false,如果1等于true,如果没有设置则等于false。

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.