我想创建一个测验,其中一些问题有两三个正确的答案。
我使用checkbox
和foreach
,但我的代码无法实现我的目标。
例如,我回答5个问题中的2个问题,给定的计数器必须为2,但它给我零。
以下是我的HTML部分:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="res.php" method="get">
<p>question</p>
<input type="checkbox" name="q1[]" value="1">first<br>
<input type="checkbox" name="q1[]" value="2">second<br>
<input type="checkbox" name="q1[]" value="3">third<br>
<input type="checkbox" name="q1[]" value="4">fourth<br>
<p>question</p>
<input type="checkbox" name="q2[]" value="1">first<br>
<input type="checkbox" name="q2[]" value="2">second<br>
<input type="checkbox" name="q2[]" value="3">third<br>
<input type="checkbox" name="q2[]" value="4">fourth<br>
<p>question</p>
<input type="checkbox" name="q3[]" value="1">first<br>
<input type="checkbox" name="q3[]" value="2">second<br>
<input type="checkbox" name="q3[]" value="3">third<br>
<input type="checkbox" name="q3[]" value="4">fourth<br>
<p>question</p>
<input type="checkbox" name="q4[]" value="1">first<br>
<input type="checkbox" name="q4[]" value="2">second<br>
<input type="checkbox" name="q4[]" value="3">third<br>
<input type="checkbox" name="q4[]" value="4">fourth<br>
<p>question</p>
<input type="checkbox" name="q5[]" value="1">first<br>
<input type="checkbox" name="q5[]" value="2">second<br>
<input type="checkbox" name="q5[]" value="3">third<br>
<input type="checkbox" name="q5[]" value="4">fourth<br>
<br>
<input type="submit" name="submit" value="send">
</body>
</html>
这是我的PHP部分:
<?php
$q[0] = $_GET['q1'];
$q[1] = $_GET['q2'];
$q[2] = $_GET['q3'];
$q[3] = $_GET['q4'];
$q[4] = $_GET['q5'];
if (isset($_GET['submit']))
{
$counter = 0;
foreach($q[0] as $item)
{
if (in_array(1, $item) && in_array(2, $item))
{
$counter++;
}
}
foreach($q[1] as $item)
{
if (in_array(1, $item) && in_array(4, $item))
{
$counter++;
}
}
foreach($q[2] as $item)
{
if (in_array(2, $item) && in_array(3, $item))
{
$counter++;
}
}
foreach($q[3] as $item)
{
if (in_array(4, $item))
{
$counter++;
}
}
foreach($q[4] as $item)
{
if (in_array(1, $item) && in_array(2, $item) && in_array(4, $item))
{
$counter++;
}
}
}
echo $counter;
?>
答案 0 :(得分:0)
我所做的第一个更改是在HTML文档中。在这里,我为每个复选框保留了不同的值,但在每个组中使用了相同的值集,因为在不同的问题中对选项号使用相同的值集不会造成损害,并且在验证它们时可以轻松完成工作。以下是HTML
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="res.php" method="get">
<p>question</p>
<input type="checkbox" name="q1[]" value="1">first<br>
<input type="checkbox" name="q1[]" value="2">second<br>
<input type="checkbox" name="q1[]" value="3">third<br>
<input type="checkbox" name="q1[]" value="4">fourth<br>
<p>question</p>
<input type="checkbox" name="q2[]" value="1">first<br>
<input type="checkbox" name="q2[]" value="2">second<br>
<input type="checkbox" name="q2[]" value="3">third<br>
<input type="checkbox" name="q2[]" value="4">fourth<br>
<p>question</p>
<input type="checkbox" name="q3[]" value="1">first<br>
<input type="checkbox" name="q3[]" value="2">second<br>
<input type="checkbox" name="q3[]" value="3">third<br>
<input type="checkbox" name="q3[]" value="4">fourth<br>
<p>question</p>
<input type="checkbox" name="q4[]" value="1">first<br>
<input type="checkbox" name="q4[]" value="2">second<br>
<input type="checkbox" name="q4[]" value="3">third<br>
<input type="checkbox" name="q4[]" value="4">fourth<br>
<p>question</p>
<input type="checkbox" name="q5[]" value="1">first<br>
<input type="checkbox" name="q5[]" value="2">second<br>
<input type="checkbox" name="q5[]" value="3">third<br>
<input type="checkbox" name="q5[]" value="4">fourth<br>
<br>
<input type="submit" name="submit" value="send">
</body>
</html>
添加了一个功能,用于检查用户选择了什么w.r.t您指定的内容。
<?php
if (isset($_GET['q1']))
$q[] = $_GET['q1'];
if (isset($_GET['q2']))
$q[] = $_GET['q2'];
if (isset($_GET['q3']))
$q[] = $_GET['q3'];
if (isset($_GET['q4']))
$q[] = $_GET['q4'];
if (isset($_GET['q5']))
$q[] = $_GET['q5'];
// each questions correct answers list
$ans[] = array(1,2); // for q1
$ans[] = array(1,4); // for q2 and so on...
$ans[] = array(2,3);
$ans[] = array(4);
$ans[] = array(1,2,4);
if (isset($_GET['submit']))
{
$counter = 0;
for($i = 0; $i < count($q); $i++)
{
if (check_answer($ans[$i], $q[$i]))
{
$counter++;
}
}
}
function check_answer($answer, $selected)
{
$valid = true;
foreach($answer as $a)
{
if (!in_array($a, $selected))
{
$valid = false;
break;
}
}
return $valid;
}
echo "Count: $counter";
?>
注意:您也应该进行错误检查以处理不良情况。
答案 1 :(得分:0)
您也可以使用字符串:
$answers[0] = $_POST['q1'];
$answers[1] = $_POST['q2'];
$answers[2] = $_POST['q3'];
$answers[3] = $_POST['q4'];
$answers[4] = $_POST['q5'];
$counter = 0;
$good_answers = ['12', '14', '23', '4', '124'];
for($i = 0; $i < count($answers); $i++){
if(implode('', $answers[$i]) == $good_answers[$i]) $counter++;
}
echo $counter;
希望可以提供帮助。