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

时间:2013-12-07 22:06:16

标签: php arrays forms validation

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

问题是,当我按下提交按钮时,用户实际上正在提交下一个问题的答案,在按下提交之前无法显示!这可以通过输入预期值(例如“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>
");

?>

1 个答案:

答案 0 :(得分:1)

问题是您的条件检查无效。条件中的$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>
");

?>