$ _POST as $ key => $ value使用复选框

时间:2009-08-30 22:59:02

标签: php http checkbox

我无法获取表单来更新从复选框传递的信息。我得到了这段代码。

$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");   
    } 
} 

5 个答案:

答案 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;值。