【问题标题】:PHP form checkbox and undefined indexPHP表单复选框和未定义的索引
【发布时间】:2010-10-19 06:50:27
【问题描述】:

提交带有未选中复选框的表单时出现“未定义索引”错误。除了对每个发布的值运行“isset”或“空”检查之外,还有其他方法吗?

我看过这个Question 并且很难相信这是唯一的解决方案。

以下是一些示例代码: 编辑:请不要说这些不是表列的实际名称;它们被唯一命名(如“postAddress、displayPhone、student 等)

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您可以编写一个检查复选框是否被选中的函数:

    function checkbox_value($name) {
        return (isset($_POST[$name]) ? 1 : 0);
    }
    

    现在在您的查询中调用该函数,如下所示:

    $sql =  'UPDATE table SET '.
            'checkbox1 = '. checkbox_value('checkbox1') .','.
            'checkbox2 = '. checkbox_value('checkbox2') .','.
            'checkbox3 = '. checkbox_value('checkbox3') .','.
            'checkbox4 = '. checkbox_value('checkbox4') .','.
            'checkbox5 = '. checkbox_value('checkbox5') .','. "LIMIT 1";
    

    【讨论】:

    • 是的!我喜欢你思考的方式。谢谢!
    【解决方案2】:

    如果你想要一个开/关复选框,你可以在写复选框之前写一个隐藏值。

    <input type="hidden" name="checkbox1" value="no" />
    <input type="checkbox" name="checkbox1" value="yes" />
    

    这将始终返回一个值,不是(除非默认选中复选框,否则默认)或是。

    您可以使用filter functionsFILTER_VALIDATE_BOOLEAN 验证输入。

    如果你为此编写一个函数会更容易,比如 formCheckbox($name),带有值选项(值 'on' 表示默认选中复选框)、属性等。

    【讨论】:

    • 这真的有效吗?这太疯狂了……以前从未听说过。不过,这取决于浏览器吗?我敢肯定不是所有的浏览器都支持这个,即使它在 w3c 规范中?
    • 这适用于我所知道的所有浏览器。浏览器按从头到尾的顺序返回带有值的名称。在 PHP 中,只有姓氏会进入 GET/POST 超级全局变量(没有 name[]),如果未选中复选框,则不会提交。
    【解决方案3】:

    试试下面的

    <?php
    //first part of the query
    $query = "UPDATE table SET ";
    
    $howManyCheckboxes = 5;
    //for every checkbox , see if it exist , if it is, add it to the query
    for($i=1;$i<=$howManyCheckboxes;$i++)
    {
       if(isset($_POST['checkbox'.$i]))
       {
          $query = $query . " checkbox".$i."='".escape($_POST['checkbox'.$i])."',";
       }
    }
    //lets remove the last coma
    $query = substr($query,0,-1);
    //add the rest of the query
    $query = $query . " LIMIT 1";
    
    $result = mysql_query( $query );
    if( ! $result ) echo "um, not everything went as expected.";
    ?>
    

    【讨论】:

    • 感谢您,但复选框名称并不总是“checkbox1”、“checkbox2”...
    猜你喜欢
    • 2021-02-04
    • 1970-01-01
    • 2021-10-06
    • 2014-03-20
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多