我无法获取表单来更新从复选框传递的信息。我得到了这段代码。
$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");
}
}
答案 0 :(得分:5)
解决方案是从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);
答案 1 :(得分:1)
您可能正在运行HTML复选框行为:复选框只有在打开时才会发送到服务器;如果它们关闭,则不会发送任何名称/值对。您将无法使用上述代码关闭值。
因此,您需要浏览已知的值列表并在$ _POST参数中检查它们。
答案 2 :(得分:1)
您应该使用数组名称,它将是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 =“选中”是否应该默认开启。
您现在可以使用POST或GET
循环复选框foreach ($_POST['checkboxes'] as $key => $value) {
//something
}
答案 3 :(得分:0)
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 ? 'on' : 'off') . "',";
}
}
$sql = substr($sql, 0, -1);
$sql .= " WHERE ".$applicant_id." = $applicant_id";
$result = mysql_query($sql,$db) or die(mysql_error(). "<br />SQL: $sql");
}
}
以上假设您的所有输入都是复选框。如果不是,你需要制定一个约定来区分它们。
顺便提一下,您当前正在运行的UPDATE
代码容易受SQL injection攻击,因为您没有使用mysql_real_escape_string()
清理输入。欢呼声。
答案 4 :(得分:0)
删除以上所有内容:-) 将所有复选框命名为 在foreach工作$ _POST ['out'] 但!不要忘记黄金法则:不要相信用户。在写入数据库之前,请重新检查每个key =&gt;值。