使用PHP检索已选中的复选框并发布

时间:2017-07-23 03:13:38

标签: php

重要的事情首先......我的英语不是最好的,所以我请你帮助我,忽略我的英语失败......谢谢。

我知道此问题之前曾多次被问到,但所有这些答案对我没有帮助。所以我问自己。

我的表格带有6个复选框,如下所示:

<form id="product_form" method="post">    
    <input type="checkbox" name="edges" value="yes">
    <input type="checkbox" name="light" value="yes">
    <input type="checkbox" name="color_change" value="yes">
    <input type="checkbox" name="white" value="yes">
    <input type="checkbox" name="printed" value="yes">
    <input type="checkbox" name="legs" value="yes">

    <input type="submit" name="submit" value="Submit">
</form>

如果您现在单击“提交”,表单将提交到我的PHP脚本,如下所示:

if(isset($_POST['submit'])){
    if($_POST['edges'] == "yes"){
        $edges == "yes";
    } else {
        $edges == "no";
    }
} 

我知道我的复选框的这个代码,因为我知道,复选框只有在选中后才会被提交但是在我的脚本中,如果我转储$ edge,如果我检查它,那么复选框总是处于活动状态。无所谓。

我已经尝试检查isset($ _ POST [&#39; edge&#39;]),但这也不起作用。 当我寻找一个解决方案时,我倒下了#34; Checkbox Arrays&#34;但我认为这种方式在我的情况下工作得更好,因为我想将它们全部写入数据库,所以我会从我的Checkbox中创建一个数组,只能将它们转换回单个变量。

我不知道我在这里做错了什么......我只是假设你可以在这种情况下帮助我,我确定它只是一个小错误,但我不能自己找到这个错误...所以请指导我通往工作表格的方式! ^^

1 个答案:

答案 0 :(得分:1)

我在查看代码时看到的第一个问题是在设置变量时使用等于运算符(==)而不是赋值运算符(=)。

此:

$edges == 'yes';

应该是:

$edges = 'yes';

很难从你的问题中判断出你的问题是否归结为此。

您声明您正在为每个复选框使用该代码。您的所有复选框条件都可以在单个提交isset()块内。

E.g。

if ( isset( $_POST['submit'] ) ) {  
    // test for edges...
    // test for light...
}

鉴于您的标记,您应该使用isset()作为复选框。如果您发布表单并且未选中这些复选框,则不会在$_POST中设置它们。

完整示例:

if ( isset( $_POST['submit'] ) ) {
    $edges = ( isset( $_POST['edges'] ) ) ? 'yes' : 'no';
    $light = ( isset( $_POST['light'] ) ) ? 'yes' : 'no';
    // . . .
}

虽然使用单个变量的上述方法可行,但使用数组编写此方法的方法更为清晰。

数组示例HTML:

<input type="checkbox" name="myCheckbox[]" value="edges">
<input type="checkbox" name="myCheckbox[]" value="light">
. . . 

数组示例PHP:

if ( isset( $_POST['submit'] ) ) {

    // Each checkbox option should default to no.
    $checkboxes = array(
        'edges' => 'no',
        'light' => 'no',
        // . . . don't forget to add all your options here.
    );

    // Let's make sure we have some checkboxes posted.
    if (  ! empty( $_POST['myCheckbox'] ) ) {

        // Loop through each checked option.
        foreach ( (array) $_POST['myCheckbox'] as $checked ) {

            // If the checked option exists in our checkbox array, update value to yes.
            if ( array_key_exists( $checked, $checkboxes ) ) {
                $checkboxes[ $checked ] = 'yes';
            }
        }
    }

    // Do stuff with your checkbox values here...
}