测验在PHP中有三个或两个答案

时间:2015-07-26 11:56:25

标签: php arrays foreach

我想创建一个测验,其中一些问题有两三个正确的答案。

我使用checkboxforeach,但我的代码无法实现我的目标。

例如,我回答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;
?>

2 个答案:

答案 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;

希望可以提供帮助。