如何使用随机数在同一页面上验证表单输入?

时间:2014-02-01 23:06:15

标签: php forms validation random

如果你可以帮帮我的话会很棒!我正在尝试构建一个简单的页面来显示随机数学问题。答案应由用户输入,并应在同一页面上进行验证,并向他提供有关成功和失败的反馈。

问题在于,通过将表单输入提交到同一页面(我称之为“form6.php”),页面会重新加载并生成一组新的数字 - 这就是为什么“解决方案”变量是新定义的不能用来测试用户答案的​​准确性。

这是我到目前为止的代码(适用于固定数字,但随着随机数生成失败):

<?php
$number1 = rand(1,100);
$number2 = rand(1,100);
$solution = $number1+$number2;

echo "$number1+$number2=?";

?>

<form action="form6.php" method="post">
Your Answer:<br>
<input type="integer" name="answer">
<input type="Submit" value="Submit!">
</form>

<?php
if(isset($_POST['answer'])){
    if ($_POST["answer"] == $solution)
    {echo "That's right";}
    else
    {echo "That's wrong!";};
}

?>

非常感谢任何帮助!由于我不是一个专业的程序员,你可以获得的越多,越好!

5 个答案:

答案 0 :(得分:2)

POST ed表单将重新加载您的PHP脚本,从而生成2个新的rand()个数字。您将要在表单中传递解决方案。

编辑:我更新了答案,以显示使用随机操作数进行验证的快速解决方案。这只是通过切换随机整数来完成的。请注意,使用-/时,您可能会收到非整数(3 / 5815 - 86),因此您可能需要添加一些自定义逻辑来防止这种情况发生。

<?php
$number1 = rand(1,100);
$number2 = rand(1,100);

switch(rand(0,3)) {
    case 0:
        $solution = $number1 + $number2;
        echo "$number1+$number2=?";
        break;
    case 1:
        $solution = $number1 - $number2;
        echo "$number1-$number2=?";
        break;
    case 2:
        $solution = $number1 * $number2;
        echo "$number1*$number2=?";
        break;
    case 3:
        $solution = $number1 / $number2;
        echo "$number1/$number2=?";
        break;
}
?>

<form action="form6.php" method="post">
    Your Answer:<br><input type="integer" name="answer">

    <input type="hidden" name="solution" value="<?php echo $solution; ?>">
    <input type="Submit" value="Submit!">
</form>

<?php
if(isset($_POST['answer']) && isset($_POST['solution'])) {
    if ($_POST["answer"] == $_POST['solution']) {
        // Valid
    } else {
        // Incorrect
    }
}
?>

答案 1 :(得分:1)

如果您不想在表单中包含解决方案(隐藏),则必须将解决方案存储在单独的文本文件中,例如,您可以在其中序列化数据。

或者,您可以使用会话或cookie。

但你必须将解决方案存储在某个地方。

以下是对会话的尝试:

<?php
session_start();

$nb1 = rand(1,100);
$nb2 = rand(1,100);

$_SESSION['number1'] = $nb1;
$_SESSION['number2'] = $nb2;
$_SESSION['solution'] = $nb1 + $nb2;

// (...)

if(isset($_POST['answer']))
{
    if ($_POST["answer"] == $_SESSION['solution'])
        {echo "That's right";}
    else
        {echo "That's wrong!";};

    unset($_SESSION['nb1']);
    unset($_SESSION['nb2']);
    unset($_SESSION['nbsolution']);
}

答案 2 :(得分:0)

if(isset($_POST['answer'])===true){
    if ($_POST["answer"] == $solution)
    {echo "That's right";}
    else
    {echo "That's wrong!";};
}

如果您使用isset($_POST['answer']),则必须在结尾处包含=== true 另外请确保使用而不是整数。

答案 3 :(得分:0)

@ user3261573,

正如@Sam所指出的,你可以在隐藏字段中传递值,但正如@Jivan所说,更好的方法是使用会话来存储解决方案。

以下是代码:

Ps。:我简化了代码以便更好地理解。

<?php
    // Initiate session
    session_start();

    // If the FORM has been submited, verify answer
    if( isset($_SESSION['solution']) === TRUE && $_SESSION['solution'] !== NULL && isset($_POST['answer']) === TRUE && isset($_POST['solution']) == TRUE ){
        if( $_SESSION['solution'] == $_POST['answer'] ){
            echo 'That\'s right';
        }else{
            echo 'That\'s wrong';
        }
    }
    // If the FORM ain't submited yet, display the question
    else{
        // Random numbers
        $number1 = rand(1,100);
        $number2 = rand(1,100);

        // Store solution in session for further comparison
        $_SESSION['solution'] = $number1+$number2;

        // Echo question
        echo "$number1+$number2=?";


        echo '<form action="form6.php" method="post">
        Your Answer:<br>
        <input type="integer" name="answer">
        <input type="Submit" value="Submit!">
        </form>';
    }
?>

如果您喜欢,请参阅以下有关使用PHP SESSION的一些教程:

http://www.w3schools.com/php/php_sessions.asp http://www.php.net/manual/en/session.examples.basic.php

答案 4 :(得分:0)

<?php
$number1 = rand(1,100);
$number2 = rand(1,100);

echo "$number1+$number2=?";

?>

<form action="form6.php" method="post">
Your Answer:<br>
<input type="integer" name="answer">
<input type="Submit" value="Submit!">

<input type="hidden" name="n1" value="$number1">
<input type="hidden" name="n2" value="$number2">
</form>

<?php
if(isset($_POST['answer'])){
    $solution = $_POST['n1'] + $_POST['n2'];
    if ($_POST["answer"] == $solution)
    {echo "That's right";}
    else
    {echo "That's wrong!";};
}

&GT;