我在获取表单以更新从复选框传递的信息时遇到问题。我得到了这个代码。
$one = isset($_POST['one']) ? 'on' : 'off'; 只要我单独调用每个复选框,这就很有效。我的问题是我总共有大约200个复选框。
这是我用来UPDATE的代码。有没有人能帮我找出在我现在的代码中插入代码的位置?我尝试过各种各样的变种。
if($_POST['submit']){
if(!empty($applicant_id)){
$sql = "UPDATE play SET ";
foreach($_POST as $key => $value){
if(($key != 'submit') && ($key != 'applicant_id')){
$sql .= $key. " = '$value',";
}
}
$sql = substr($sql, 0, -1);
$sql .= " WHERE ".$applicant_id." = $applicant_id";
$result = mysql_query($sql,$db) or die(mysql_error(). "<br />SQL: $sql");
}
} 发布于 2009-08-30 23:16:35
解决方案是从array()或类似的可能复选框的已知列表开始。我可以假设您是用这样的列表生成表单的吗?如果不是,您可能应该这样做。然后,您可以在相同的数据上使用循环来检查每个复选框的存在。
其他一些提示:
不推荐使用isset($array[$key])。虽然它在大多数情况下都是可靠的,但如果$array[$key]为null,它将失败。正确的调用是array_key_exists($key, $array)。
在为SQL组装字符串片段时,就像您正在做的那样,执行以下操作会更优雅:
$sqlvalues = array();
foreach( $options as $field ) {
if( array_key_exists('checkbox_'.$field, $_POST) )
$sqlvalues[] = $field.' = \'on\'';
else
$sqlvalues[] = $field.' = \'off\'';
}
mysql_query('UPDATE '.$table.' SET '.implode(', ', $sqlvalues).' WHERE applicant_id = '.$applicant_id);发布于 2009-08-30 23:20:03
您可能正在运行HTML复选框行为:只有当复选框处于打开状态时,才会将其发送到服务器;如果它们处于关闭状态,则不会发送名称/值对。在上面的代码中,你会遇到关闭值的问题。
因此,您需要遍历已知值列表,并在$_POST参数中检查它们。
发布于 2009-08-31 07:29:40
您应该使用数组名称,它将是PHP中的数组。
正如ndp所说,如果未选中某个复选框,则不会传输其值。因此,您需要在复选框输入字段之前使用具有相同名称的隐藏输入字段,并使用"off“值。
<label for="one">One</label>
<input type="hidden" name="checkboxes[one]" value="off"/>
<input type="checkbox" name="checkboxes[one]" id="one" value="on"/>记住,如果checked=默认设置为on,请记住它是“checked”。
现在可以使用POST或GET循环复选框
foreach ($_POST['checkboxes'] as $key => $value) {
//something
}https://stackoverflow.com/questions/1355155
复制相似问题