2012-02-15 30 views
0

读取$ _POST阵列确定这是我的脚本: -如何在PHP

<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方法数组的方式。

是语法正确的,我怎么能解决这个问题...请帮助:|

+0

无关的问题,但...你包括* *回答您的问题在HTML?如果是这样,用户将能够通过查看页面的源代码来查看所有答案! – bfavaretto 2012-02-15 14:25:06

+1

将name =“submittest”添加到

标记? – CBusBus 2012-02-15 14:29:21

回答

1

您的单选按钮后,所有的考试答案正在返回“无线”作为自己的价值。让他们返回答案,你应该确定 更改电台的定义来:

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

0Change测试选项,以这样的:

  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