0

記述式クイズのフォームを作成しました。各質問には、回答用の複数のテキストボックスがあります (質問の指示に対応します。つまり、2 つのコンポーネント、3 つの利点などをリストします)。一連の回答に対して回答を個別に評価できるように、フォームをそのように設計しました。各質問には、多くの回答候補を含めることができます。「回答」テーブルの構造は次のとおりです。

CREATE TABLE IF NOT EXISTS `answer` (
`a_id` int(10) NOT NULL AUTO_INCREMENT,
`q_id` int(10) NOT NULL,
`a_text` text NOT NULL,
`a_keyword` text NOT NULL,
PRIMARY KEY (`a_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

これはフォームのコードです:

<?php
session_start();
if(isset($_SESSION['tf1_sid'])){
?>

<head>
<title>Dahlia | Formative Assessment</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<form id="form1" name="form1" method="post" action="s_ass_result_new.php">
<h2>Short-answer Questions</h2>
<table width="590" border="0" cellpadding="2" align="center">
<?php
// db connect
include("dbconn.php");

// db query for questions
$sql_q  = "SELECT q_id, q_no, q_text, q_field FROM question";
$query_q = mysql_query($sql_q) or die("MySQL Error: " . mysql_error());
// start loop for questions
//$rad = 1;
while($data_q = mysql_fetch_array($query_q, MYSQL_ASSOC)){     

$qfield = $data_q['q_field'];
$qno = $data_q['q_no'];

echo "<tr><td width='20' align='center' valign='top'><label><br /><input name='q_no' size='1' type='hidden' value=". $data_q['q_no'] .">". $data_q['q_no'] ."</label></td>";
echo "<td><br />". $data_q['q_text'] ." (<a href='s_help.php?s_id=". $_SESSION['tf1_sid'] ."&q_id=". $data_q['q_id'] ."' target='_blank'>Help</a>)</td>";

for($rad=1;$rad<=$qfield;$rad++){
echo "<tr><td></td><td><textarea name='answer_".$rad."' cols='55' rows='2' id='textarea1'></textarea></td></tr>";
echo "<script>document.getElementById('textarea1').focus()</script>";
//$rad++;
}
}
echo "<tr></tr><tr><td></td><td><input name='Submit' type='submit' value='Submit' onClick='return confirm(\"Are you sure?\")'></td></tr>";      
mysql_free_result($query_q);
include("dbconn.php");
?>
</table>
</form>
</body>
</html>
<?php
}
else
{
header("Location:s_login.php");
}
?>

フォームは正常に表示されていますが、テキスト領域から送信された値を取得できません。以下は、これらの値を取得するコードです。

<?php
// include db connection file
include("dbconn.php");
session_start();

if(isset($_POST['Submit']))
{   
$id = $_SESSION['tf1_sid'];
$qno = $_POST['q_no'];
$ansspc = $_POST['q_field'];
?>

<head>
<title>Dahlia | Formative Assessment</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h2>Answer Review</h2>
<table width="590" border="0" cellpadding="2" align="center">
<?php

//db query to obtain i_id - to insert to RESULT table
$sql_i = "SELECT i_id FROM ins_stud WHERE s_id = '$id'";
$query_i = mysql_query($sql_i) or die("MySQL Error: " . mysql_error());
$data_i = mysql_fetch_assoc($query_i);
$ins_id = $data_i['i_id'];

//$j = 1;
$arr_ind = 1;
$atext = array(1);
$ans = array(1);

//FOR LOOP TO RETRIEVE VALUES FROM TEXT AREA
for($i=1;$i<=$q_no;$i++){
for($k=1;$k<=$ansspc;$k++){
$repStr = str_replace("1", $k, "answer_1");
echo "Question ". $i .": Answer: ". $repStr;
$ans[] = $_POST[$repStr];
echo $ans;
}

$sql_check = "SELECT a_text FROM answer WHERE q_id='$i'";
$query_ch = mysql_query($sql_check) or die("MySQL Error: " . mysql_error());
$data_ch = mysql_fetch_assoc($query_ch);
$atext[] = $data_ch['q_ans'];       
//$j++;
}
...

以前は、それぞれ 1 つのテキスト領域で質問を設定していたときに機能していました。私がやろうとしているのは、各回答を各回答提案と比較することです。

例:

2つのメリットを教えて...

  1. 2 つのテキストエリア: ans1、ans2

  2. 4 つの回答候補: soln1、soln2、soln3、soln4

したがって、ans1 を soln1、soln2、soln3、soln4 と比較すると、ans2 についても同じことが言えます。

編集:

//start loop for questions & answers
while($data_q = mysql_fetch_array($query_q, MYSQL_ASSOC)){     

//process returned data
foreach ($_POST['answer'] as $questionNumber => $answerList){
echo "question " . $questionNumber . ": \n";
foreach ($answerList as $key => $answer){
$ans[] = $answer;
echo "answer " . $key . ": " . $answer . "\n";
}//end foreach_in
}//end foreach_out

$jawapan = explode(" ", $ans[$arr_ind]);
$jwpn = trim($jwpn);

foreach($jwpn as $eval){
if (stripos($atext[$arr_ind], $eval) !== false){ //$atext: query for answer suggestions
//answer match with first suggestion
echo "<p align='justify'><img src='image/mark.png' border='0' width='20' height='20'> ". $ans[$arr_ind]. "</p>";
}//if
{else
//answer doesn't match with first suggestion; check next suggestion
for($m=1;$m<=$box;$m++){...}// $box = no. of text area in form
}//else

echo "<p align='justify'><label><b>SUGGESTED ANSWER:</b> <br><input name='answer_".$rad."' type='hidden' value=''>". $atext[$arr_ind] . "</label></p>";

$arr_ind++;
}//foreach
4

1 に答える 1

1

テキストエリアの命名に配列を使用するのが最善です

textarea の出力 (明確にするためにすべてのマークアップ エクストラを省略しました) while ($data_q = mysql_fetch_array($query_q, MYSQL_ASSOC)) {

    $qfield = $data_q['q_field'];
    $qno = $data_q['q_no'];

    for ($rad = 1; $rad <= $qfield; $rad++) {
        echo "<textarea name='answer[" . $qno . "][" . $rad . "]' id='textarea_" . $qno . "_" . $rad . "'>";
    }
}

返されたデータの処理

foreach ($_POST['answer'] as $questionNumber => $answerList) {
    echo "question " . $questionNumber . ": \n";
    foreach ($answerList as $key => $answer) {
        echo "answer " . $key . ": " . $answer . "\n";
    }
}
于 2013-05-01T11:18:13.957 に答える