Как читать массив в $ _POST в PHP - PullRequest
0 голосов
/ 15 февраля 2012

ОК, это мой сценарий: -

<form action="results.php" method="post">
          <?php mysql_select_db($database, $databasename) or die("Opps some things went wrong");
          $sqlQueryTestDisplay = mysql_query("SELECT * FROM questions WHERE test_id='$testtaken_id' ORDER BY question_id ASC");
          $i = 0;
          while($DisplayItems = mysql_fetch_array($sqlQueryTestDisplay))
          {
              $i = $i + 1;
              $question_id = $DisplayItems['question_id'];
              $question = $DisplayItems['question'];
              $opta = $DisplayItems['opta'];
              $optb = $DisplayItems['optb'];
              $optc = $DisplayItems['optc'];
              $optd = $DisplayItems['optd'];
              $answer[$i] = $DisplayItems['answer'];
              $thisAnswer = $answer[$i];
              echo '<li>'.$question.'</li>';
              echo '<p>';
              echo '<label><input type="radio" name="optans'.$i.'" value="radio" id="RadioGroup'.$i.'_0" />'.$opta.'</label>';
              echo '<label><input type="radio" name="optans'.$i.'" value="radio" id="RadioGroup'.$i.'_1" />'.$optb.'</label>';
              echo '<label><input type="radio" name="optans'.$i.'" value="radio" id="RadioGroup'.$i.'_2" />'.$optc.'</label>';
              echo '<label><input type="radio" name="optans'.$i.'" value="radio" id="RadioGroup'.$i.'_3" />'.$optd.'</label>';
              echo '<input name="ans'.$i.'" type="hidden" value="'.$thisAnswer.'" />';
              echo '</p>';
          }
          echo '<input name="total_questions" type="hidden" value="'.$i.'" />';
          echo '<input name="test_id" type="hidden" value="'.$TestID.'" />';
          ?>
          <input name="submittest" type="submit" />
          </form>

Как вы можете видеть, я использую массив для хранения значений в разных полях.Теперь на следующей странице, т.е. на моей странице result.php, я пишу следующее: -

<?php
if(isset($_POST['submittest'])) 
{
global $ans1;
$TotalQuestions = $_POST['total_questions'];
$TestID = $_POST['test_id'];
$TestResult = 0;
for ($i=1; $i<=$TotalQuestions; $i++)
{
    $ansValue = 'ans'.$i;
    $optansValue = 'optans'.$i;
    $ans = $_POST[$ansValue];
    $optans = $_POST[$optansValue];
    if ($ans == $optans)
    {
        $TestResult = $TestResult + 1;
    }
}
$st_id = $row_Recordset1['id'];
mysql_select_db($database, $databasename) or die("Opps some things went wrong");
$sqlQueryInsertResult = mysql_query("INSERT INTO results (student_id, test_id, test_result) VALUES ('$st_id', '$TestID', '$TestResult')");
header('location:results.php'); 
}
?>

Теперь мой сценарий не читает ans1, ans2 ..... и т. Д. И даже Quesans1, Quesans2..... и т. д.

Мне кажется, проблема в том, что я вызываю массив с помощью метода $ _POST.

Верен ли синтаксис, как я могу его исправить ..Пожалуйста, помогите: |

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

Все ваши радиокнопки возвращают «радио» в качестве значения.Сделайте так, чтобы они вернули ответ, и вы должны быть в порядке. Измените определения радио:

'<INPUT type="radio" name="optans'.$i.'" value="'.$opta.'" >'.$opta.'</INPUT>'
'<INPUT type="radio" name="optans'.$i.'" value="'.$optb.'" >'.$optb.'</INPUT>'
'<INPUT type="radio" name="optans'.$i.'" value="'.$optc.'" >'.$optc.'</INPUT>'
'<INPUT type="radio" name="optans'.$i.'" value="'.$optd.'" >'.$optd.'</INPUT>'

Может быть, стоит не помещать ответ на страницу в виде скрытого поля - тест довольно прост.Выполните другой SQL-запрос, чтобы проверить ответы, когда они вернутся

Используйте еще несколько циклов для отображения переключателей, и вы можете немного сократить свой код.

1 голос
/ 15 февраля 2012

0 Измените параметры теста на это:

         echo '<label><input type="radio" name="optans'.$i.'[]" value="1" id="RadioGroup'.$i.'_0" />'.$opta.'</label>';
          echo '<label><input type="radio" name="optans'.$i.'[]" value="2" id="RadioGroup'.$i.'_1" />'.$optb.'</label>';
          echo '<label><input type="radio" name="optans'.$i.'[]" value="3" id="RadioGroup'.$i.'_2" />'.$optc.'</label>';
          echo '<label><input type="radio" name="optans'.$i.'[]" value="4" id="RadioGroup'.$i.'_3" />'.$optd.'</label>';

и ваш процессор на это:

<?php
if(isset($_POST['submittest'])) 
{
global $ans1;
$TotalQuestions = $_POST['total_questions'];
$TestID = $_POST['test_id'];
$TestResult = 0;
for ($i=1; $i<=$TotalQuestions; $i++)
{
    $ans = $_POST['ans'.$i];
    $optans = $_POST['optans'.$i];

    for ($j=0;$j<count($optans);$j++) { 
         if ($optans[$j]==$ans) { 
             $TestResult = $TestResult + 1;               
         }
    }
}

Это очень небезопасный способ сравнения ответов на тесты.Кто-то может легко просмотреть источник и увидеть правильные ответы.Вы должны проверить ответы теста после $_POST

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...