PHP表单验证(有点像验证码)

PHP表单验证(有点像验证码),php,arrays,forms,validation,Php,Arrays,Forms,Validation,我已经尝试了我能想到的各种方法,有一个多维数组,包含3组数据,每组都有一个问题和相应的awswer,我想验证用户对每个问题的答案 问题是,当我按下submit按钮时,用户实际上是在提交下一个问题的答案,在按下submit之前无法显示!这可以通过输入预期值(如“2”)并等待下一个问题为1+1来验证= <?php $question = array( 0 => array( 'question' => "1+1=", 'answer' =&g

我已经尝试了我能想到的各种方法,有一个多维数组,包含3组数据,每组都有一个问题和相应的awswer,我想验证用户对每个问题的答案

问题是,当我按下submit按钮时,用户实际上是在提交下一个问题的答案,在按下submit之前无法显示!这可以通过输入预期值(如“2”)并等待下一个问题为1+1来验证=

<?php
$question = array(
    0 => array(
        'question' => "1+1=",
        'answer' => 2
        ),
    1 => array(
        'question' => "2+1=",
        'answer' => 3
        ),
    2 => array(
        'question' => "4+1=",
        'answer' => 5
        )
);

$arrayIndex = array_rand($question);
$q = $question[$arrayIndex]['question'];
$a = $question[$arrayIndex]['answer'];

if (isset($_POST['submit'])) {
    if($_POST['answer'] == $a) {
        echo "correct";
    } else {
        echo "incorrect";
    }
} else {
    echo "Answer this:";
}

print $a;
print ("
<form method='post'><br/>
<input type='text name='". $a ."' value='". $q ."'>
<input type='text' name='answer'><br/>
<input type='submit' name='submit'><br/>
</form>
");

?>

问题是您的条件检查无效。条件中的
$a
设置为新值,因此包含新答案,而不是用户提交问题的答案

我已经显式地添加了一个隐藏属性来捕获问题的索引,然后相应地检查答案

当然,代码可以被优化和清理,但是这里有一个简单的代码修改来完成这件事

<?php
$question = array(
    0 => array(
        'question' => "1+1=",
        'answer' => 2
        ),
    1 => array(
        'question' => "2+1=",
        'answer' => 3
        ),
    2 => array(
        'question' => "4+1=",
        'answer' => 5
        )
);

if (isset($_POST['submit'])) {
    if($_POST['answer'] == $question[$_POST['index']]['answer']) {
        echo "correct";
    } else {
        echo "incorrect";
    }
} else {
    echo "Answer this:";
}

$arrayIndex = array_rand($question);
$q = $question[$arrayIndex]['question'];
$a = $question[$arrayIndex]['answer'];


print $a;
print ("
<form method='post'><br/>
<input type='text name='". $a ."' value='". $q ."'>
<input type='hidden' name='index' value='".$arrayIndex."'>
<input type='text' name='answer'><br/>
<input type='submit' name='submit'><br/>
</form>
");

?>