我在提交带有未选中复选框的表单时收到“未定义索引”错误。除了对每个发布的值进行“isset”或“empty”检查之外,还有其他方法吗?
我看过这个Question并且很难相信这是唯一的解决方案。
下面是一些示例代码: 编辑:请不要这些不是表格列的实际名称;它们的名称是唯一的(如“postAddress,displayPhone,student等)
答案 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.";
?>