2012-04-08 32 views
0

我有一個jsfiddle here。會發生的是,如果您選擇單選按鈕並單擊「添加問題」,它將添加一個表格行,顯示您選擇的單選按鈕。您可以更改行內的選擇。如何插入選定的單選按鈕?

現在我想要做的是,我想通過使用INSERT VALUES方法在數據庫中的每個插入選定的單選按鈕。

所以我想知道的是我怎樣才能正確地做到這一點,使它$ _POST爲每行選定的單選按鈕,然後能夠插入它們使用INSERT VALUES?

下面是我現在使用的php代碼:('questionText'是'Question'列,它實際上挑出每一行,即使我沒有在jsfiddle中包含'questionText'而'gridValues'不是在的jsfiddle但這是在「選項」列中的每一行中的每個文本框的值,那麼試想一下,有其是「問題」和「選項」欄)

$i = 0; 
$c = count($_POST['gridValues']); 

$insertquestion = array(); 

for($i = 0; $i < $c; $i++){ 

    switch ($_POST['gridValues'][$i]){ 

    case "3": 
    $selected_option = "A-C"; 
    break; 

    case "4": 
    $selected_option = "A-D"; 
    break; 

    default: 
    $selected_option = ""; 
    break; 

    }  

    foreach($_POST['reply'] as $reply) { 

    switch ($_POST['reply']){ 

    case "Single": 
    $selected_reply = "Single"; 
    break; 

    case "Multiple": 
    $selected_reply = "Multiple"; 
    break; 

    default: 
    $selected_reply = ""; 
    break;  
} 
} 

    $optionquery = "SELECT OptionId FROM Option_Table WHERE (OptionType = '". mysql_real_escape_string($selected_option)."')"; 
    $optionrs = mysql_query($optionquery); 
    $optionrecord = mysql_fetch_array($optionrs); 
    $optionid = $optionrecord['OptionId']; 

    $replyquery = "SELECT ReplyId FROM Reply WHERE (ReplyType = '". mysql_real_escape_string($selected_reply)."')"; 
    $replyrs = mysql_query($replyquery); 
    $replyrecord = mysql_fetch_array($replyrs); 
    $replyid = $replyrecord['ReplyId']; 

    $insertquestion[] = "'". 
        mysql_real_escape_string($_POST['questionText'][$i]) ."','". 
        mysql_real_escape_string($optionid) ."','". 
        mysql_real_escape_string($replyid) ."'"; 

} 

$questionsql = "INSERT INTO Question (QuestionContent OptionId, ReplyId) 
    VALUES (" . implode('), (', $insertquestion) . ")"; 

echo($questionsql); 

回答

2

我桌上的其他兩列在你的jsfiddle中注意到每個新創建的無線電盒子都被創建爲reply1和reply2。

但是在你的php代碼中,它看起來就像循環一樣,就好像它是一個數組。

如果你做你的帖子值的print_r的,你喜歡的東西

Array ([reply1] => Single [reply2] => Multiple)  

因此,他們並不在一個陣列格式。當然,如果您在POST請求中的唯一值是單選按鈕,那麼您可以遍歷POST數組值。

無論如何,這裏是一個可能的解決方案,讓你循環你的發佈請求。我只是將它從jsfiddle中的例子中解放出來。你可能不得不適應你的實際代碼。但他們的關鍵是要注意單選按鈕的名稱被命名爲reply[0]reply[1]。 PHP知道如何將數值命名爲數組。

<?php 

//This is what your values will look like. Notice that they are in array format now 
print_r($_POST); 

foreach($_POST['reply'] as $reply) { 
    //Now you can loop through your replies correctly. 
} 

?> 

<!-- Quick Example of how to name the radio buttons --> 
<html> 
<head></head> 
<body> 
<form method="post"> 
Row 1<br /> 
<input type="radio" value="Single" name="reply[0]" /> Single 
<input type="radio" value="Multiple" name="reply[0]" /> Multiple 

<br />Row 2<br /> 
<input type="radio" value="Single" name="reply[1]" /> Single 
<input type="radio" value="Multiple" name="reply[1]" /> Multiple 
<br /> 
<input type="submit" value="Submit" /> 
</form> 
</body> 


這裏是你上面的代碼重寫,只回復。因爲我不確定數據是如何格式化的或者數據是真實的,所以我將其他東西留下了。我想知道爲什麼你不只是使用id作爲單選框的值而不是文本。這樣你就不必查詢數據庫。你可以查詢所有的回覆類型,然後像這樣匹配id。

<?php 

$insertquestion = array(); 

foreach($_POST['reply'] as $reply) { 

    switch ($reply){ 

    case "Single": 
    $selected_reply = "Single"; 
    break; 

    case "Multiple": 
    $selected_reply = "Multiple"; 
    break; 

    default: 
    $selected_reply = ""; 
    break; 

    $replyquery = "SELECT ReplyId FROM Reply WHERE (ReplyType = '". mysql_real_escape_string($selected_reply)."')"; 
    $replyrs = mysql_query($replyquery); 
    $replyrecord = mysql_fetch_array($replyrs); 
    $insertquestion[] = $replyrecord['ReplyId'];  
} 

$questionsql = "INSERT INTO Question (ReplyId) 
    VALUES (" . implode('), (', $insertquestion) . ")"; 

echo($questionsql); 

這裏基本上除了使用for循環同樣的事情。我猜你對foreach循環不熟悉。但是在這種情況下,for循環也可以更好地爲您服務。

<?php 

$insertquestion = array(); 

for($i = 0; $i < count($_POST['reply']), $i++) { 

    switch ($_POST['reply'][$i]){ 

    case "Single": 
    $selected_reply = "Single"; 
    break; 

    case "Multiple": 
    $selected_reply = "Multiple"; 
    break; 

    default: 
    $selected_reply = ""; 
    break; 

    $replyquery = "SELECT ReplyId FROM Reply WHERE (ReplyType = '". mysql_real_escape_string($selected_reply)."')"; 
    $replyrs = mysql_query($replyquery); 
    $replyrecord = mysql_fetch_array($replyrs); 
    $insertquestion[] = $replyrecord['ReplyId'];  
} 

$questionsql = "INSERT INTO Question (ReplyId) 
    VALUES (" . implode('), (', $insertquestion) . ")"; 

echo($questionsql); 
+0

我能問你一個問題,我在哪裏追加行到一個表,我在形式更改名稱屬性爲單選按鈕有作爲或只?換句話說,它說'name ='reply「+ count」'?並在宿舍本身,我把名稱屬性「答覆」的末尾[0] – user1304328 2012-04-09 01:50:07

+0

是的單選按鈕的名稱必須是回覆[0],回覆[1]等在PHP中使用值作爲數組所以是的,而不是'name ='reply「+ count」'do''reply [「+ count +」]''。還有一些方法可以在reply1,reply2格式中完成它,但是它在php方面需要更多的邏輯。 – Gohn67 2012-04-09 02:06:39

+0

如果我更改'name ='reply「+ count」do'reply [「+ count +」]'',那麼如果我在頂部選擇一個單選按鈕,然後將它追加到表格行中,它將取消選擇所選的單選按鈕。我更新了小提琴,所以你可以看到這個 – user1304328 2012-04-09 02:20:02

相關問題