PHP随机数学测验评估问题

时间:2018-04-26 20:54:23

标签: php

编辑:当我自己打印$ answer变量时,它总是返回当前问题的正确答案。

我目前正在编写一个PHP脚本,它可以生成一个简单但完全随机的数学测验。它是如何工作的是从0到9和从' - ','+','*'获得随机运算符的两个随机数。用户必须在文本框中输入所显示问题的答案。从这里开始,它非常简单易懂。

但是,我遇到的问题是,无论用户输入什么,唯一被验证为正确的问题是答案为0的问题。

到目前为止,这是我的代码。

<?php

require 'functions.php';

$body = "";  

$score = 0;
$count = 0;

if(isset($_POST['submit']))
{
    $firstDigit = $_POST['lho'];
    $secondDigit = $_POST['rho'];
    $operator = $_POST['op'];
    $userAnswer = $_POST['answer'];
    $count = $_POST['count'];
    $score = $_POST['score'];
    $answer = evaluate($firstDigit, $secondDigit, $operator);

    if($answer == $userAnswer)
    {
        $count++;
        $score++;
        $body .= "\n<h1>Congratulations!</h1>\n\n";
        $body .= "$score out of $count";
    }
    else
    {   
        $count++;
        $body .= "\n<h1>Sorry!</h1>\n\n";
        $body .= "$score out of $count";
    }
}

header( 'Content-Type: text/html; charset=utf-8');
print("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");

?>

<?php
    include("./header.php");
?>

<h1>Math Quiz</h1> <br /> <br />

<?php 
    print $body;
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <h3><?php echo $firstDigit; ?> <?php echo $operator; ?> <?php echo $secondDigit; ?> = ? 
        <input type="text" name="answer" size="2" /></h3>

    <p><input type="submit" name="submit" value="Try It!" />
    <input type="hidden" name="lho" value="<?php echo randdigit(); ?>" />
    <input type="hidden" name="rho" value="<?php echo randdigit(); ?>" />
    <input type="hidden" name="op" value="<?php echo randop(); ?>" />
    <input type="hidden" name="score" value="<?php echo $score++; ?>" />
    <input type="hidden" name="count" value="<?php echo $count++; ?>" /></p>
</form>

<?php
    include("./footer.php");
?>

我的评估功能是:

function evaluate($d1, $d2, $op) {
    switch($op) {
        case '+' : // addition
            $result = $d1 + $d2;
            break;
        case '-' : // subtraction
            $result = $d1 - $d2;
            break;
        case '*' : // multiplication
            $result = $d1 * $d2;
            break;
        default :  // Unidentified, return safe value
            $result = 0;
    }
    return $result;
}

这是randop()函数和randdigit()函数:

/* Return a number in the range 0-9 inclusive
 */
function randdigit() {
    return mt_rand(0,9);
} // end functionranddigit()

function randop(){
    $ops = array('+', '-', '*');
    // pick a random index between zero and highest index in array.
    $randnum = mt_rand(0,sizeof($ops)-1);
    return $ops[$randnum];  // Use the index to pick the operator
}

1 个答案:

答案 0 :(得分:2)

第48行首先:

ch[i] = make(chan bool)

首次加载表单时,直到提交一次,

  

$ firstDigit,$ operator,$ secondDigit

未设置。

然后,要解决的等式填充了需要求解的旧方程,并且隐藏的字段用新数字填充,使用randdigit()和randop()对用户不可见。

<h3><?php echo $firstDigit; ?> <?php echo $operator; ?> <?php echo $secondDigit; ?> = ? 

以下是适用于我的代码:

<input type="hidden" name="lho" value="<?php echo randdigit(); ?>" />
<input type="hidden" name="rho" value="<?php echo randdigit(); ?>" />
<input type="hidden" name="op" value="<?php echo randop(); ?>" />