问:如何使用php和mysql从多项选择题中选择正确答案,
我不知道自己是否做对了,因为我在编程世界
1-还是 陌生的,我正在使用数组来存储问题
2-答案的另一个数组
3-将问题ID和答案ID传递到处理页面,然后将它们与数据库中的值进行比较以检查正确答案,
我的问题是当我将ID传递到我的处理页面时,我只有一个ID一个问题,即使我选择了不同的问题,它仍然在重复相同的问题ID
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> </title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div id="header">
<div class="container">
<div id="logoArea"></div>
<form action="process.php" method="post" >
<?php
require ("mysql_connect.php");
$test_id = $_GET['test_id'];
$qid = array();
$sql ="Select * from question where test_id='$test_id'";
$res = mysqli_query($connection, $sql);
$noq = mysqli_num_rows($res);
while ($row = mysqli_fetch_assoc($res) ) {
$question_id = $row['question_id'];
$qid [] = $question_id;
$questions = array ($row['question_text']) ;
foreach ($questions as $question) {
echo "<hr />";
echo"<label><p>$question</p></label>" ;
}
/*
* Get choices
*/
$sql1 = mysqli_query($connection,"SELECT * FROM `answers` WHERE answers.question_id = '". $question_id."' ") or die (mysqli_error($connection));
while ($row1 = mysqli_fetch_assoc($sql1)) {
$answer_id =$row1 ['answer_id'];
$answers =array ($row1['answer_text']);
foreach ($answers as $answer) {
?>
<label><p><input type='radio' name='answers' value= '<?php echo $row1 ['answer_id']; ?>' id='answers' /> <?php echo $answer ; ?> </p></label>
<?php
}
}
}
var_dump($qid );
?>
<input type="submit" name="submit" value=" "/>
<input type="hidden" name="question_id" value="<?php echo $question_id ; ?>" />
</form>
<div id="navmenu"></div>
</div>
</div>
</body>
</html>
<?php
include ("mysql_connect.php");
if(isset($_POST["submit"])){
$correct_answers = 0;
$wrong_answers = 0;
$total = 0 ;
$question_id = $_POST['question_id'];
$selected_choice = $_POST['answers'];
$sql = mysqli_query($connection, "SELECT * FROM `answers` WHERE answers.question_id = '".$question_id ."' AND answers.correct = 1 ")or die(mysqli_error($connection));
while ($result = mysqli_fetch_assoc($sql)){
$correct_choices = array($result['answer_id']);
}
foreach( $correct_choices as $correct_choice){
$total ++ ;
if($correct_choice == $selected_choice){
$correct_answers ++ ;
}else{
$wrong_answers ++;
}
$score = $correct_answers / $total ;
$score = number_format($score * 100);
echo "your score is $score <br />";
}
var_dump($correct_choice);
var_dump($_POST);
if ($correct_answers > 0){
echo "<h2><span>You have $correct_answers correct answers</span></h2>";
}
if ($wrong_answers > 0) {
echo "<h2><span>You have $wrong_answers wrong answers</span></h2>" ;
}
}
?>
我的数据库
CREATE TABLE `answers` (
`answer_id` int(11) UNSIGNED NOT NULL,
`answer_text` text NOT NULL,
`question_id` int(11) NOT NULL,
`correct` tinyint(1) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `question` (
`question_id` int(11) UNSIGNED NOT NULL,
`question_text` text NOT NULL,
`test_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
答:我已经检查了您的代码,获得相同问题ID的问题背后的原因是第70行中用于存储问题ID的隐藏字段(名称:question_id)。在您的代码中,隐藏字段仅存储最后一个问题ID,这是因为它不在while循环中(用于问题)。
需要更改的另一件事是单选按钮的名称,每个问题的所有选项都相同。因此,您可以仅用一个问题检查答案。要检查多个问题的答案,您必须为每个问题定义与单选按钮组不同的ID(例如:name ='answers1')。您可以将收音机名称与问题ID分组。
我已经编辑了上面的代码并进行了一些更改。您可以检查附件中的代码。