2013-05-01 31 views
0

我已經構建了一個簡答題測驗的表單。每個問題都有多個用於回答的文本框(對應於問題中的指令,即列出兩個組件,三個優點等)。我設計了這樣的表格,以便可以根據一組答案獨立評估答案。每個問題都可以有很多答案建議。這裏是「答案」表的結構:從多環環氧樹脂檢索價值

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. 兩個文本區域:ANS1,ANS2

  2. 四參考答案: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 

回答

1

最好是在文字區域

輸出textarea的命名使用數組(我離開了所有標記演員只是爲了說清楚) 而($ 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"; 
    } 
} 
+0

它的工作,謝謝:)我編輯原始帖子,我添加了一行代碼'$ ans [] = $ answer;'比較文本區域中的值與數據庫中的數據行。在for循環中,該數組還必須在哪裏必須前進到下一行?我無法提出'else'子句的條件。 – 2013-05-02 17:13:59