[英]Submitting checked radio buttons to database
我正在創建一種單選按鈕,例如:
<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>
我想將thise插入到具有以下結構的數據庫中:
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]
$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] => ) )
只需檢查第二個單選按鈕即可生成此數組。
首先,您可能希望將變量命名為更具描述性的內容。 當然你知道他們現在的意思,但是從現在起一年后,可能需要花一點時間來計算代碼。
以下是您可以考慮循環的方法。
$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]
);
}
更新:將我的原始解決方案與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注入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.