2016-06-09 3 views
-1

Ich wurde damit beauftragt, eine Webanwendung zu erstellen, die den Benutzer nach einer Antwort (Option) auf eine bestimmte Frage fragt - je nachdem, welche Option gewählt wurde. Jede Frage wird zusammen mit den 7 Optionen jeder Frage in einer Datenbank gespeichert. Zum Beispiel: "Was war dein Lieblingsessen, als du jünger warst?" könnte die Optionen haben: Cookies, Kuchen, Torten, etc.PHP - Definieren von Arrays mit Datenbankwerten

Ich habe es tatsächlich geschafft, das Skript zu schreiben, um jeden Wert mit indizierten 1D und 2D-Arrays mit mysqli_fetch_array zu definieren. Wenn ich jedoch versuche, die Daten, die in jeder Frage gespeichert sind, mit for loops zu beantworten, bekomme ich ein seltsames Problem ... Alle Fragen werden angezeigt, aber nur die Antworten der ersten Frage werden angezeigt.

Hier ist mein Code:

<?php 
    session_start(); 
    $con = mysqli_connect("server","username","password","db"); 

    if (mysqli_connect_errno()){ 
     echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 


    $arr = array(); 
    $ans = array(); 
    $i = 0; 
    $c = 0; 
    $q_sql = "SELECT Question FROM Question"; 

    $question = mysqli_query($con,$q_sql); 

    while($q = mysqli_fetch_array($question)){ 
     $arr[$i] = $q['Question']; 

     $a_sql = "SELECT Answer FROM Answer WHERE QuestionID = ".($i+1); 
     $answer = mysqli_query($con,$a_sql); 

     while($a = mysqli_fetch_array($answer)){ 
      $ans[$i][$c] = $a['Answer']; // array(0 => $i, 1 => $a); 
      $c++; 
     } 
     $i++; 
    } 

    mysqli_close($con); 
?> 

HTML:

<!DOCTYPE html> 

<html> 
    <head> 
     <title></title> 
    </head> 
    <body> 
    <?php 

     for ($i=0; $i < sizeof($arr); $i++){ 
      print "<br/>".$arr[$i]; 
      for ($c=0; $c < sizeof($ans[$i]); $c++){ 
       print "<br/>".$ans[2][$c];   
      } 
     } 

    ?> 
    </body> 
</html> 

Wenn mehr Informationen benötigt wird, fragen Sie bitte. Ich habe keine Ahnung, warum nur ein Satz von Antworten angezeigt wird, also würde jede Hilfe geschätzt werden.

+0

Schauen Sie sich diese Aussage, 'print "
" $ am [2] [$ c];', soll es sein 'print "
" $ am [$ i] [$ c];.' –

Antwort

0

Angenommen, jede Frage hat 5 Antworten. Während der ersten Iteration der Question Abfrage läuft $i = 0 und $c von 0 bis 4. Während der zweiten Iteration läuft $i = 1 und $c von 5 bis 9, so dass Sie $ans[1][5] ausgefüllt haben. Aber Ihre Schleife, die die Antworten druckt, erwartet, dass der zweite Index immer von 0 bis sizeof($ans[$i])-1 läuft.

Sie müssen $c auf 0 vor der inneren Schleife, nicht vor der äußeren Schleife zurücksetzen.

Aber es gibt auch keinen Grund, mehrere Abfragen und verschachtelte Schleifen zu verwenden, Sie sollten sie zu einer einzigen Abfrage zusammenfügen. .

$sql = "SELECT q.ID, Question, Answer 
     FROM Question AS q 
     LEFT JOIN Answer AS a ON a.QuestionID = q.ID 
     ORDER BY q.ID"; 
$result = mysqli_query($con, $sql); 
$last_qid = null; 
$i = -1; 
while ($row = mysqli_fetch_assoc($result)) { 
    if ($row['ID'] != $last_qid) { 
     $i++; 
     $arr[$i] = $row['Question']; 
     $ans[$i] = array(); 
    } 
    if ($row['Answer'] !== null) { // skip null value if there were no answers 
     $ans[$i][] = $row['Answer']; 
    } 
} 
+0

Vielen Dank, ich wusste, da war etwas offensichtlich, das ich verpasst habe !! – FGibbons