2016-06-09 2 views
-1

Мне было поручено создать веб-приложение, которое запрашивает у пользователя ответ (вариант) на конкретный вопрос - выполнение различных действий в зависимости от выбранной опции. Каждый вопрос хранится в базе данных вместе с 7 вариантами каждого вопроса. Например, «какая была ваша любимая еда, когда вы были моложе?» могли бы иметь варианты: Cookies, торты, торты и т. д.PHP - определяющие массивы с значениями базы данных

Мне действительно удалось написать сценарий, чтобы определить каждое значение, используя массивы с 1D и 2D индексированными массивами, используя mysqli_fetch_array. Однако, когда я пытаюсь просмотреть данные, хранящиеся в каждом массиве вопросов и ответов, используя для циклов, я получаю странную проблему ... Все вопросы отображаются, но отображаются только ответы на первый вопрос.

Вот мой код:

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

Если больше информации необходимо, пожалуйста, спрашивайте. Я понятия не имею, почему отображается только один набор ответов, поэтому любая помощь будет оценена.

+0

Посмотрите на это заявление, 'печать "
" $ анс [2] [$ с];', он должен быть 'печать "
" $ анс [$ я] [$ с];. ' –

ответ

0

Предположим, что в каждом вопросе есть 5 ответов. Во время первой итерации запроса Question$i = 0 и $c от 0 до 4. Во время второй итерации $i = 1 и $c от 5 до 9, поэтому вы заполнили $ans[1][5]. Но ваш цикл, который печатает ответы, ожидает, что второй индекс всегда будет работать от 0 до sizeof($ans[$i])-1.

Необходимо выполнить сброс $c до 0 перед внутренним контуром, а не перед внешним контуром.

Но также нет причин использовать несколько запросов и вложенных циклов, вы должны объединить их в один запрос. .

$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

Большое вам спасибо, я знал, что есть что-то очевидное, что я пропустил !! – FGibbons

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