将选中的单选按钮提交到数据库

时间:2012-03-14 19:09:43

标签: php mysql sql

我正在创建一种单选按钮,例如:

   <dl>  
        <dt><label for="a1">Meatballs?</label></dt>
        <dd>
        <input type="radio" value="yes"  name="A_1">
        </dd>
        <dd>
        <input type="radio" value="no"  name="A_1">
        </dd>
        <dd>
        <input type="radio" value="maybe"  name="A_1">
        </dd>                               
    </dl>

  ... 

<dl>  
    <dt><label for="b3">Coffee?</label></dt>
    <dd>
    <input type="radio" value="yes"  name="B_3">
    </dd>
    <dd>
    <input type="radio" value="no"  name="B_3">
    </dd>
    <dd>
    <input type="radio" value="maybe"  name="B_3">
    </dd>                               
</dl>
<dl>  
    <dt><label for="b4">Tea?</label></dt>
    <dd>
    <input type="radio" value="yes"  name="B_4">
    </dd>
    <dd>
    <input type="radio" value="no"  name="B_4">
    </dd>
    <dd>
    <input type="radio" value="maybe"  name="B_4">
    </dd>                               
</dl>   

我想将此插入到具有以下结构的数据库中:

INSERT INTO `notes` ( `group`, `data` ) VALUES ...

我在处理php中设置了一些这样的值,如:

$b = "Choices";

// these would be the groups
$bg3 = "Coffee";
$bg4 = "Tea";


// these are the data values
$bp3 = $_POST['B_3'];
$bp4 = $_POST['B_4'];

$b3 = array( $b, $bg3, $bp3 );
$b4 = array ($b, $bg4, $bp4 );

所以在我的想法中,如果我需要插入组值,因为选择了第3个选项,我会$group = $b3[1]; $data = $b3[2]

在我的例子中,将有大约25个选项,最后一个提交。我需要帮助了解什么是最有效的方法来循环检查所有选中的单选按钮和INSERT他们需要去的值?

除非他们做出选择,否则我需要取消选中所有这些并且不进行处理。我是否需要为单个语句编写插入语句?

更新

由于下面的答案,我现在有一种更有效的方法将所有值都放入一个数组,所以使用dqhendricks示例我可以为每个集合生成一个这样的数组(a,b等等):

print_r($b);

Array ( [0] => Array ( [0] => Choices [1] => [2] => ) [1] => Array ( [0] => Choices [1] => Milk [2] => ) [2] => Array ( [0] => Choices [1] => Water [2] => yes ) [3] => Array ( [0] => Choices [1] => Coffee [2] => ) [4] => Array ( [0] => Choices [1] => Tea [2] => ) [5] => Array ( [0] => Choices [1] => Beer [2] => ) [6] => Array ( [0] => Choices [1] => Wine [2] => ) ) 

仅在选中第二个单选按钮时生成此数组。

2 个答案:

答案 0 :(得分:1)

首先,您可能希望将变量命名为更具描述性的内容。当然你知道他们现在的意思,但从现在起一年后可能需要花一点时间来计算代码。

以下是您可以考虑循环的方法。

$groups = array(
   '3' => 'Coffee',
   '4' => 'Tea'
);

$b = array();

for ($i = 0; $i < $number_of_post_vars; $i++) {
   $b[$i] = array(
      'Choices',
      $groups[$i],
      $_POST['B_' . $i]
   );
}

答案 1 :(得分:1)

更新:将我的原始解决方案与bqhendrick的解决方案合并,并重构原始形式以澄清var名称并使其更简单。

首先,您应该为单选按钮指定默认值(CHECKED属性)以避免出现NULL,并且应该正确命名无线电输入。而不是A_1,B_1等,将它们命名为它们所指的“组”。例如:

<dl>  
        <dt><label for="a1">Meatballs?</label></dt>
        <dd>
        <input type="radio" value="yes"  name="Meatballs">
        </dd>
        <dd>
        <input type="radio" value="no"  name="Meatballs">
        </dd>
        <dd>
        <input type="radio" value="maybe"  name="Meatballs" CHECKED>
        </dd>                               
    </dl>

  ... 

<dl>  
    <dt><label for="b3">Coffee?</label></dt>
    <dd>
    <input type="radio" value="yes"  name="Coffee">
    </dd>
    <dd>
    <input type="radio" value="no"  name="Coffee">
    </dd>
    <dd>
    <input type="radio" value="maybe"  name="Coffee" CHECKED>
    </dd>                               
</dl>
<dl>  
    <dt><label for="b4">Tea?</label></dt>
    <dd>
    <input type="radio" value="yes"  name="Tea">
    </dd>
    <dd>
    <input type="radio" value="no"  name="Tea">
    </dd>
    <dd>
    <input type="radio" value="maybe"  name="Tea" CHECKED>
    </dd>                               
</dl>

在完成之后,现在用以下方法制作插入语句是微不足道的:

$count=count($_POST);
$counter=0;
$query="INSERT INTO `notes` ( `group`, `data` ) VALUES ";
$resource=mysql_connect('host', 'mysql_user', 'mysql_password');
foreach ($_POST AS $key => $value) {
    $key=mysql_real_escape_string($key);
    $value=mysql_real_escape_string($value);
    $query.="('$key', '$value')";
    $query.=($counter<$count-1) ? ", " : ";";
    $counter++; //To know whether to put , or ; in SQL sentence
}
//echo $query; //To test it prior to insert for debugging purposes
mysql_query($query);
mysql_close($resource);

它应该这样做。

编辑清理一些$ _POST数据,以避免错误的SQL注入。