【问题标题】:PHP form validation (sort of like captcha)PHP 表单验证(有点像验证码)
【发布时间】:2013-12-25 04:25:21
【问题描述】:

我已经用我能想到的各种方式进行了尝试,有一个包含 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>
");

?>

【问题讨论】:

    标签: php arrays forms validation


    【解决方案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>
    ");
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      相关资源
      最近更新 更多