2016-05-24 2 views
3

Я создаю страницу с вопросами по опросу с вопросами из базы данных. HTML изменения входного типа в соответствии с типом вопроса:Форма публикации PHP с индексами массива

form.php

<?php 
$query = "select q_id,qtext from questions order by q_id "; 
$result = mysqli_query($conn, $query); // replaced with procedural mysqli 
if (mysqli_num_rows($result) == 0) 
    $flag = 1; 
else { 
    if (!$result) 
     $result_list = array(); 
    while ($row = mysqli_fetch_array($result)) { 
     $result_list[] = $row; 
    } 
    $i = 0; 
    foreach ($result_list as $row) { 
     $q_id[$i] = $row[0]; 
     $qtext[$i] = $row[1]; 
     $i++; 
    } 
} 
?> 
<form action="action.php" method="post" name="form"> 
    <?php 
    for ($j = 0; $j < $i; $j++) { 
     unset($res_list); 
     switch ($qtype[$j]) { 

      case text: 
       echo " <textarea name='qno[$j]'></textarea><br/>"; 
       break; 

      case checkbox: 

       for ($l = 0; $l < 3; $l++) 
        echo "<input type='checkbox' name='qno[$j]' > <label> $l </label>"; 
       break; 
     } 
    } 
    ?> 

</form> 

Эта страница работает отлично. Но я не могу получить эти данные через $ _POST. Вот

action.php

<?php 

for ($j = 0; $j <= $no_of_ques; $j++) { 
    $answer[$j] = $_POST['qno'][$j]; 
    echo $answer[$j]; 
} 
?> 

Какое имя я должен дать мои входы и как я должен получить их с помощью POST?

+0

, что делает '$ _POST' содержат, если вы' print_r ($ _ POST) '? – billynoah

+1

У вас есть ошибка в вашем вводе 'name = '=' qno [$ j] '' должно быть 'name =' qno [$ j] '' – Justinas

+0

Да, я только что редактировал. Я извиняюсь. –

ответ

1

На первый взгляд, нет ничего плохого в вашем коде (начиная с ваших последних изменений), поэтому вы должны попробовать print_r($_POST), чтобы отлаживать и видеть, что на самом деле содержит ваши данные.

Затем вы можете перебирать ответы более легко с foreach петли, как это в action.php

foreach ($_POST['qno'] as $i => $answer) { 
    echo "Answer Number $i: $answer"; 
} 
+0

Что-то не так, во втором случае атрибут «имя» неверен (одинарная кавычка не на месте и знак двойного равенства) –

+0

print_r ($ _ POST) дает результат как «array()». Кроме того, его предупреждение о том, что для foreach() предоставляется недопустимый аргумент. Нужно ли мне что-то делать с $ i до этого? –

+0

Если массив() является результатом, то ваша форма не отправляет никаких данных. И, конечно же, вы не можете перебирать '$ _POST ['qno']', если этого не существует, поэтому это предупреждение. – billynoah

0

Я думаю, что этот цикл имеет проблемы

for ($l = 0; $l < 3; $l++) 
        echo "<input type='checkbox' name='='qno[$j]' > <label> $l </label>"; 

Это даст всегда одинаковое имя для все три элемента

Если хотите, чтобы все значения попробовали уникальные имена, например qno[$j][$l]

1

три совета я должен решить проблему:

1) Как уже упоминалось, отладка вывода print_r ($ _ POST) для проверки того, что сценарий получает

2) Подтвердить фактическое генерирование сценария форма без ошибок, один из способов сделать это - посмотреть на генерируемый HTML-код и убедиться, что все значения есть.

3) Упростите код, если ваша ошибка сохраняется. Сохраните копию того, что у вас есть, и продолжайте удалять лишние вещи, пока он не начнет работать, как ожидалось. Я думаю об этом как об обратном проектировании или просто, просто сделав несколько шагов назад, чтобы узнать, где что-то пошло не так.

Еще одно замечание об упрощении, вложение цикла for, внутри оператора switch, внутри другого для цикла - не самая лучшая практика кодирования. Существует определенно более простой способ получить вопросы из базы данных, а затем сбрасываться в форму.

Одним из вариантов альтернативы было бы иметь вспомогательную функцию, которая задает вопросы, задавая тип вопроса и данные. например. formatQuestion ($ типа, $ данных)

+0

Это помогло. Благодаря! –

1

хорошо я не нахожу ваш вопрос с точными данными ниже мой пример кода, чтобы помочь вам -

form.php

<?php 
$result_list = array(0 => 'QuestionId', 1 => 'QuestionText'); 
$q_id = $result_list[0]; 
$qtext = $result_list[1]; 
?> 

<form action="action.php" method="post" name="form"> 
    <?php 
    $qtype = array(0 => 'text', 1 => 'checkbox'); 
    $i = 2; 
    for ($j = 0; $j < $i; $j++) { 
     unset($res_list); 
     switch ($qtype[$j]) { 
      case text: 
       echo " <textarea name='qno[$j]'></textarea><br/>"; 
       break; 

      case checkbox: 

       for ($l = 0; $l < 3; $l++) 
        echo "<input type='checkbox' name='qno[$j]' > <label> $l </label>"; 
       break; 
     } 
    } 
    ?> 
    <input type="submit" value="submit"> 
</form> 

действия ,PHP

<?php 
echo '<pre>'; 
print_r($_POST); 
?> 
2

Через ссылкой фрагмент кода в качестве решения, пожалуйста, проверьте вывод var_dump($_POST), в пределах его выход заметить, что ключ QNo существует с его соответствующими значениями.

Пожалуйста, попробуйте запустить следующий фрагмент кода, чтобы извлечь все данные QNo ключа

for($i =0 ; $i < count($_POST['qno']) ;$i++) { 
    echo $_POST['qno'][$i]; 
} 
Смежные вопросы