【发布时间】:2010-10-19 06:50:27
【问题描述】:
提交带有未选中复选框的表单时出现“未定义索引”错误。除了对每个发布的值运行“isset”或“空”检查之外,还有其他方法吗?
我看过这个Question 并且很难相信这是唯一的解决方案。
以下是一些示例代码: 编辑:请不要说这些不是表列的实际名称;它们被唯一命名(如“postAddress、displayPhone、student 等)
【问题讨论】:
提交带有未选中复选框的表单时出现“未定义索引”错误。除了对每个发布的值运行“isset”或“空”检查之外,还有其他方法吗?
我看过这个Question 并且很难相信这是唯一的解决方案。
以下是一些示例代码: 编辑:请不要说这些不是表列的实际名称;它们被唯一命名(如“postAddress、displayPhone、student 等)
【问题讨论】:
您可以编写一个检查复选框是否被选中的函数:
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";
【讨论】:
如果你想要一个开/关复选框,你可以在写复选框之前写一个隐藏值。
<input type="hidden" name="checkbox1" value="no" />
<input type="checkbox" name="checkbox1" value="yes" />
这将始终返回一个值,不是(除非默认选中复选框,否则默认)或是。
您可以使用filter functions 和FILTER_VALIDATE_BOOLEAN 验证输入。
如果你为此编写一个函数会更容易,比如 formCheckbox($name),带有值选项(值 'on' 表示默认选中复选框)、属性等。
【讨论】:
试试下面的
<?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.";
?>
【讨论】: