2012-04-08 4 views
0

У меня есть jsfiddle here. Случается, что если вы выберете радиокнопку и нажмите «Добавить вопрос», она добавит строку таблицы, показывающую выбранную вами радиокнопку. Вы можете изменить выбор в строке.Как вставить выбранные переключатели?

Теперь, что я хочу сделать, так это то, что я хочу вставить выбранные переключатели в каждую из базы данных с помощью метода INSERT VALUES.

Так что я хочу знать, как я могу правильно это сделать, чтобы он $ _POST выбранных переключателей для каждой строки, а затем смог вставить их с помощью INSERT VALUES?

Ниже приведен код php, который у меня есть: («questionText» - это столбец «Вопрос», где он фактически выбирает каждую строку, даже если я не включил «questionText» в jsfiddle, а «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

I заметили в вашем 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> 


Вот ваш выше код переписан только для ответов. Я оставил другой материал, так как не был уверен, как данные были отформатированы или данные на самом деле были. Мне интересно, почему вы не просто используете идентификаторы для значений для радиоокна вместо текста. Таким образом, вам не нужно запрашивать базу данных. Вы можете просто запросить все типы ответов, а затем сопоставить их с таким идентификатором.

<?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); 

Вот в основном то же самое, за исключением использования для цикла. Я предполагаю, что вы не знакомы с петлями 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] в конец атрибута name «reply» – user1304328

+0

Да, имя переключателей должно быть ответом [0], reply [1] и т. д., чтобы использовать значения в виде массива в PHP Так что да, вместо 'name = 'reply" + count "' do '' reply [" + count + "] ''.Есть также способы сделать это в формате reply1, reply2, но для этого требуется еще немного логики на стороне php. – Gohn67

+0

Если я изменю 'name = 'reply' + count" do 'reply ["+ count +"]' ', то, если я выберу радиокнопку сверху, а затем добавлю ее в строку таблицы, она затем отменит выбор выбранного переключателя. Я обновил скрипку, чтобы вы могли видеть это. – user1304328

Смежные вопросы