如何通过使用随机数来验证表单输入在同一页面上?(How to validate form input

2019-10-19 07:35发布

将是真棒,如果你能帮助我! 我想建立一个简单的页面来显示随机数学问题。 这些问题的答案应该由用户键入的,应在同一页面上进行验证,让他对成功和失败的反馈。

问题是,通过提交输入到同一页的形式(我把它叫做“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!";};
}

?>

任何帮助,不胜感激! 由于我不是专业编码器,更具体的你可以得到更好的!

Answer 1:

一个POST版的形式将刷新你的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
    }
}
?>


Answer 2:

如果你不希望在您的形式解决方案(无论是隐藏的),你必须存储在一个单独的文本文件,可以在其中,例如,序列化数据的解决方案。

或者,您可以使用会话或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']);
}


Answer 3:

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

如果您正在使用isset($_POST['answer'])你必须包括在最后===真还要确保您使用的,而不是整数。



Answer 4:

@ 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 S:

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



Answer 5:

<?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!";};
}

?>



文章来源: How to validate form input on the same page by using random numbers?