PHP表单复选框和未定义的索引

时间:2009-04-14 05:00:32

标签: php mysql

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

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

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

3 个答案:

答案 0 :(得分:7)

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

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";

答案 1 :(得分:6)

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

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

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

您可以使用filter functions FILTER_VALIDATE_BOOLEAN验证输入。

如果您为此编写一个函数(例如formCheckbox($ name)),它更容易使用值的选项(值'on'表示默认选中复选框),属性等。

答案 2 :(得分:0)

尝试以下

<?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.";
?>