如何使用PHP验证复选框输入


How to validate a checkbox input using PHP?

我的表单中有两个复选框:

<div class="label-input-wrapper pickup">    
        <div class="form-label">I need Airport pick-up</div>
        <div class="form-input">
            <input type="checkbox" name="pick_up" value="Yes" />Yes 
            <input type="checkbox" name="pick_up" value="No" />No
            <div class="error-msg">
                <?php if(isset($errors['pick_up_no'])) { echo '<span style="color: red">'.$errors['pick_up_no'].'</span>'; } ?>
            </div>
        </div>
</div>  

保存上述复选框值的变量:$pickup = $_POST['pick_up'];

验证:

//Check the airport pickup and make sure that it isn't a blank/empty string.
        if ($pickup == ""){
            //Blank string, add error to $errors array.        
            $errors['pick_up_no'] = "Please let us know your airport pick up requirement!";
        }       
        if (($pick_up = Yes) && ($pick_up = No)) {
            //if both selected, add error to $errors array.        
            $errors['pick_up_no'] = "Can not select Yes and No together!";
        }

但如果两者都未选择,或者仅选择一个,甚至两者都选择,则上述验证仅打印Can not select Yes and No together!。它为所有选择提供相同的错误消息。为什么?

您现在使用单个=符号进行赋值,而不是将==与进行比较

if (($pick_up = Yes) && ($pick_up = No))

你需要把它改成

if (($pick_up == "Yes") && ($pick_up == "No")){...}

同时将CCD_ 5和CCD_。


编辑:

IMHO,你最好使用单选按钮。

不应使用同时为用户提供"是"answers"否"选项的复选框;这令人困惑。

它应该是YesNo,而不是

<input type="radio" name="pick_up" value="Yes" />Yes 
<input type="radio" name="pick_up" value="No" />No

这是最可行的解决方案。

我不知道为什么你需要一个复选框(这是单选按钮应该做的),但你可以这样做:

if(!isset($_POST['pick_up']) || count($_POST['pick_up']) > 1) {
    echo 'please select at least 1 choice';
} else {
    echo $_POST['pick_up'][0];
}

然后让你的复选框名称:

name="pick_up[]"

或者,如果您确实需要单独的错误消息。这样做:

$errors['pick_up_no'] = '';
if(!isset($_POST['pick_up'])) {
    $errors['pick_up_no'] = "Please let us know your airport pick up requirement!";
} elseif(count($_POST['pick_up']) > 1) {
    $errors['pick_up_no'] = "Can not select Yes and No together!"; // weird UX, should have prevented this with a radio button
}
if($errors['pick_up_no'] != '') {
    echo $errors['pick_up_no'];
} else {
    echo $_POST['pick_up'][0];
}

$_POST['pick_up']不可能同时为yes和no,因为名称是pick_up而不是pick_up=]<-指向多个变量。因此,无论哪种方式,它都将是yes或no,因为一个参数将覆盖另一个参数。在这种情况下,您必须使用javascript来验证在提交之前只检查了一个。

使用复选框字段元素数组;

<input type="checkbox" name="pick_up[]" />Yes 
<input type="checkbox" name="pick_up[]" />No

然后在您的PHP脚本中:

<?php
$pick_ups=$_POST['pick_up'];
$first=isset($pick_ups[0]); //true/false of first checkbox status
$second=isset($pick_ups[1]); //true/false of second checkbox status
?>

同样,正如你已经被告知的那样,你应该使用单选按钮来达到这个目的!如果未设置$_POST不发送复选框,请考虑该复选框(使用isset($_POST['name'])进行检查