はPHP

2012-02-15 4 views
0

に$ _POSTの配列を読み取るためにどのようにOK、これは私のスクリプトです: -は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

+1

タグにname = "submittest"を追加しますか? – CBusBus

答えて

1

すべてのラジオボタンが値として「ラジオ」を返しています。彼らは答えを返してください、あなたはOKであるべきにあなたのラジオの定義を変更し :隠しフィールドとしてページに答えを入れていない価値があるかもしれません

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