簡體   English   中英

將選中的單選按鈕提交到數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM