2012-04-08 46 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