2012-04-03 4 views
1

Ich habe einen PHP-Code, wo es eine switch-Anweisung verwendet, um einen der Werte aus dem Textfeld zu finden und die richtige 'optionId', die die $ selected_option, die den Wert aus dem Textfeld entspricht entspricht.Es ist nur Anzeige der Option korrekt in der Datenbank

Das Problem, das ich habe, ist, dass wir sagen, es gibt 4 Fragen, 3 Fragen mit verschiedenen Optionen und 1, die die gleiche Option wie eine andere Frage hat. Als ich sie in der Datenbank einfügen wird es annehmen, wie unten aussehen:

Question    OptionId 

    What is my gender  O17 //case '19' 
    What is my name  O3 //case '5' 
    What is my address  O17 //case '19' 
    What is my age   O7 //case '9' 

sondern es ist nur die neueste OptionID für beiden Fragen zeigt, wie unter der falsch ist.

Also was ich wissen möchte ist, warum zeigt es nur die neueste OptionId für alle Fragen? Muss ich die switch-Anweisung wiederholen oder ist etwas nicht in Ordnung mit der Art und Weise, wie ich $ insertQuestion [] als Schleife durch die einzelnen Fragen durchführe?

$insertquestion = array(); 


     $options = $_POST['gridValues']; 

     switch ($options){ 

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

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

      case "5": 
      $selected_option = "A-E"; 
      break; 

      default: 
      $selected_option = ""; 
      break; 

     }  


    $optionquery = "SELECT OptionId FROM Option_Table WHERE (OptionType = '". mysql_real_escape_string($selected_option)."')"; 

$optionrs = mysql_query($optionquery); 
    while($optionrecord = mysql_fetch_array($optionrs)){ 
     $optionid[] = $optionrecord['OptionId']; 
    } 



foreach($_POST['questionText'] as $question) 
{ 
    $insertquestion[] = "'". mysql_real_escape_string($_SESSION['id']) . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '') ."' ,'". mysql_real_escape_string($_POST['num_questions']) ."','". mysql_real_escape_string($question) ."','". mysql_real_escape_string($optionid[]) ."'"; 
} 

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



echo($questionsql) 

UPDATE:

Unten ist die Form Code. Wie es funktioniert, ist der Benutzer Typen in einer Frage in der Textbereich ('name='questionText') und Typen in einer Option (name='gridValues') und dann fügen sie sie zwei in einer Tabellenzeile (Tabelle in der Form, die id='qandatbl'). Das ist die Frage 1. Dann haben sie das gleiche tun wieder für die zweite Frage, dann dritte und etc. Blick auf diese Bitte sorgfältig, ist es leicht zu folgen :)

<script> 

    function insertQuestion(form) { 

    var context = $('#optionAndAnswer'); 

    var $tbody = $('#qandatbl > tbody'); 
    var $tr = $("<tr class='optionAndAnswer' align='center'></tr>"); 
    var $question = $("<td class='question'></td>"); 
    var $options = $("<td class='option'></td>"); 
    var $questionType = ''; 

    $('#questionTextArea').each(function() { 

    var $this = $(this); 
    var $questionText = $("<textarea class='textAreaQuestion'></textarea>").attr('name',$this.attr('name')+"[]") 
        .attr('value',$this.val()) 

    $question.append($questionText); 

    }); 

    $('.gridTxt', context).each(function() { 

    var $this = $(this); 
    var $optionsText = $("<input type='text' class='gridTxtRow maxRow' />").attr('name',$this.attr('name')) 
        .attr('value',$this.val()) 

    $options.append($optionsText); 
    $questionType = $this.val(); 

    }); 

    $tr.append($question); 
    $tr.append($options);  
    $tbody.append($tr); 

    } 

</script> 


<form id="QandA" action="insertQuestion.php" method="post" > 

<table> 
<tr> 
    <td rowspan="3">Question:</td> 
    <td rowspan="3"> 
     <textarea id="questionTextArea" rows="5" cols="40" name="questionText"></textarea> 
    </td> 
</tr> 
</table> 

<table id="optionAndAnswer" class="optionAndAnswer"> 
<tr class="option"> 
<td>Option Type:</td> 
<td> 
<div> 
    <input type="text" name="gridValues" class="gridTxt maxRow" readonly="readonly" /> 
</div> 
</td> 
</tr> 
</table> 

<table id="qandatbl" align="center"> 
<thead> 
<tr> 
    <th class="question">Question</th> 
    <th class="option">Option Type</th> 
</tr> 
</thead> 
<tbody> 
</tbody> 
</table> 

</form> 
+0

ist es nicht, weil Sie nur eine Arbeit kann OptionID haben : '$ optionid = $ optionrecord ['OptionId'];'? – Elen

+0

Wie viele Ergebnisse erwarten Sie von '$ optionquery'? – Elen

+0

Sie müssen die richtige opion ID für jede Frage erhalten, so dass der gesamte Code so aussieht, als sollte er in der 'foreach()' Anweisung verschachtelt sein. –

Antwort

1

wie besprochen - Sie haben gefragt, um Ihnen zu zeigen, wie Schleife anzuwenden:

$optionquery = "SELECT OptionId FROM Option_Table WHERE (OptionType = '" 
     . mysql_real_escape_string($selected_option)."')"; 

    $optionrs = mysql_query($optionquery); 
    while($optionrecord = mysql_fetch_array($optionrs)){ 
     $optionid[] = $optionrecord['OptionId']; 
    } 

Ihre $ optionid wird dann zum Array aller übereinstimmenden Elemente.

, wenn Sie denken, dass ich Ihr Problem richtig verstanden habe, dann lassen Sie mich wissen, so wir auf UPDATE Abfrage


UPDATE

$options[] = $_POST['gridValues']; 
$i=0; 

foreach($_POST['questionText'] as $question){ 

     switch ($options[$i]){ 
      case "3": 
      $selected_option = "A-C"; 
      break; 
      case "4": 
      $selected_option = "A-D"; 
      break; 
      case "5": 
      $selected_option = "A-E"; 
      break; 
      default: 
      $selected_option = ""; 
      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']; 

    $insertquestion[] = "'". mysql_real_escape_string($_SESSION['id']) . 
     ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '') ."' ,'". 
     mysql_real_escape_string($_POST['num_questions']) ."','". 
     mysql_real_escape_string($question) ."','". 
     mysql_real_escape_string($optionid) ."'"; 

    $i++; 
} 

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

    echo($questionsql); 
+0

Ich habe Code aktualisiert, um While-Schleife enthalten, die Sie mir gegeben haben. Problem ist, dass wenn ich dies tue, es nicht INSERT VALUES-Anweisung Echo, wenn ich $ Qsql Echo. – user1309180

+0

Was ich meinte, ist dieses Beispiel anzuschauen: So sagt Frage 1 hat Option 3 so Case-Anweisung für Fall 3 nachschlagen, Fall 3 gleich A-C und mit $ optionQuery finden wir heraus, A-C in Datenbank gleich OptionId 'O1'. Für Frage 2 lässt sich sagen, dass es Option 7 hat, also Fall-Anweisung für Fall 7 nachschlagen, Fall 7 gleich A-G und mit $ optionQuery finden wir heraus, dass A-G in der Datenbank gleich OptionId 'O5' ist. Für jede Frage muss also nach allen möglichen Optionen gesucht und dann diejenige gefunden werden, die der case-Anweisung entspricht. – user1309180

+0

Ich habe meinen Code aktualisiert, um die Codierung aus Ihrer Antwort hinzuzufügen, aber dies hat nicht funktioniert, da dies nur 1 Frage nur einfügen und das ist die neueste Frage hinzugefügt. – user1309180

0

Es sieht aus, als ob es 07 jedes Einfügen Zeit als das ist der letzte Wert im Array. Möglicherweise müssen Sie das $ insertquestion-Array durchlaufen und jedes Mal eine Einfügung ausführen.

0

in Ihrem HTML, stellen Sie sicher, dass Sie in eckigen Klammern in Ihrem Eingangsnamen verwenden:

<textarea name="questionText[]" class="first_textarea"> 
<textarea name="questionText[]" class="second_textarea"> 
<textarea name="questionText[]" class="third_textarea"> 
Verwandte Themen