[mysql]从数据库获取值为 mcsq'z 的单选按钮

标签: MySQL PHP
发布时间: 2017/4/9 21:58:27
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我制作的测验 app,它有一个名为question_bank它有列的数据库表︰

id | question | a | b | c | d | right_ans | given_ans

我想要从数据库中获取所有的问题,当用户提交表单时它应该比较given_ans 与 right_ans。我能够从数据库中获取所有的问题,但它无法正常工作。它应从四个给定的选项中选择只有一个值,但此代码允许我选择所有选项。我需要值的单选按钮是 a,b,c,d.因为比较这与 right_ans 列。

    $query="SELECT * from question_bank";
    $result= mysqli_query($connection,$query);
    echo "<form method='post' action='exam.php'>";
    while ($read_all_data = mysqli_fetch_assoc($result))
    { 
    $id=$read_all_data['id'];
    $a=$read_all_data['a'];
    $b=$read_all_data['b'];
    $c=$$read_all_data['c'];
    $d=$read_all_data['d'];
     echo $read_all_data['question']."</br>";
     echo "A:<input type ='radio' value ='a'  name='$a' >".$a."</br>";
     echo "B:<input type ='radio' value ='b'  name='$b' >".$b."</br>";
     echo "C:<input type ='radio' value ='c'  name='$c' >".$c."</br>";
     echo "D:<input type ='radio' value ='d'  name='$d' >".$d."</br>";
    }
    echo "<input type='submit' value='submit' name='submit'>"[!

screenshot

解决方法 1:

建筑形式。

单选按钮通常组合在一起分成组,共享相同的单选按钮 name 属性是一组 (在示例中的一个问题的所有答案) 的一部分。因为没有一个答案默认选中的当既不检查输入的单选按钮组中将不提交。要防止这种使用 required 上第一个单选按钮组中,将告诉浏览器提交窗体仅当输入的属性不是空的。

下面是一个示例,我使用 mysqli 对象中面向样式︰

$connection = new mysqli( 'host', 'user', 'pass', 'db' );

$questions = $connection->query( "SELECT * FROM question_bank" );

echo "<form method='POST' action='exam.php'>";
while ( $row = $questions->fetch_assoc() ) {
    echo $row[ 'question' ] . "<br>";
    echo "<input type ='radio' value ='a'  name='$row[id]' required>" . $row[ 'a' ] . "<br>";
    echo "<input type ='radio' value ='b'  name='$row[id]' >" . $row[ 'b' ] . "<br>";
    echo "<input type ='radio' value ='c'  name='$row[id]' >" . $row[ 'c' ] . "<br>";
    echo "<input type ='radio' value ='d'  name='$row[id]' >" . $row[ 'd' ] . "<br>";
}
echo "<input type='submit' value='submit' name='submit'></form>";


处理窗体请求。

检查是否通过提交表单 post 方法与 !empty( $_POST['submit'] ) (或通过使用 $_SERVER['REQUEST_METHOD'] === 'POST' ),循环遍历所有的问题,要比较接收的答案正确的答案。由于单选按钮分组使用邮政 id 作为 name 属性, $_POST 数组将看起来像︰

数组
(
    [1] => b
    [2] => c
    [3] => c
    [提交] => 提交
)

钥匙在哪里 id 的问题,和 value 是由用户所选的答案。

如何验证窗体的示例︰

$connection = new mysqli( 'host', 'user', 'pass', 'db' );

if ( !empty( $_POST['submit'] ) ) {
    $questions = $connection->query( "SELECT * FROM question_bank" );

    while ( $row = $questions->fetch_assoc() ) {

        if ( !empty( $_POST[ $row[ 'id' ] ] ) ) {           
            $ans = $row[ $_POST[ $row[ 'id' ] ] ];

            if ( $ans === $row[ 'right_ans' ] ) {
                echo $row[ 'question' ] . ': correct<br>';
            } else {
                echo $row[ 'question' ] . ': incorrect<br>';
            }
        } else {
            echo $row[ 'question' ] . ': no answer<br>';
        }       
    }   
}

如何比较给定的答案与正确的形式。

好的今天我心情很好所以在这里是一个修订后的例子,你可以在一个数组中保存提供的答案,在构建窗体时使用该数组。我也向您展示如何通过使用三元运算符在表单提交后检查正确的答案 ( ( $checked && 'd' == $checked ? 'checked' : '' ) )

$answers = [];
$questions = $connection->query( "SELECT * FROM question_bank" );

if ( !empty( $_POST['submit'] ) ) {

    while ( $row = $questions->fetch_assoc() ) {

        if ( !empty( $_POST[ $row[ 'id' ] ] ) ) {           
            $ans = $row[ $_POST[ $row[ 'id' ] ] ];

            if ( $ans === $row[ 'right_ans' ] ) {
                $answers[ $row[ 'id' ] ] = "'$ans' is correct";
            } else {
                $answers[ $row[ 'id' ] ] = "'$ans' is not correct, correct is $row[right_ans]";
            }
        } else {
            $answers[ $row[ 'id' ] ] = 'No answer provided';
        }

    }

}

$questions = $connection->query( "SELECT * FROM question_bank" );

echo "<form method='POST' action='exam.php'>";
while ( $row = $questions->fetch_assoc() ) {

    echo $row[ 'question' ] . "<br>";

    $checked = null;
    if ( isset( $answers[ $row[ 'id' ] ] ) ) {
        echo $answers[ $row[ 'id' ] ] . "<br>";
        $checked = array_search( $row[ 'right_ans' ], array( 'a' => $row[ 'a' ], 'b' =>  $row[ 'b' ], 'c' =>  $row[ 'c' ], 'd' =>  $row[ 'd' ] ) );
    }   

    echo "<input type ='radio' value ='a'  name='$row[id]' required " . ( $checked && 'a' == $checked ? 'checked' : '' ) . ">" . $row[ 'a' ] . "<br>";
    echo "<input type ='radio' value ='b'  name='$row[id]' " . ( $checked && 'b' == $checked ? 'checked' : '' ) . ">" . $row[ 'b' ] . "<br>";
    echo "<input type ='radio' value ='c'  name='$row[id]' " . ( $checked && 'c' == $checked ? 'checked' : '' ) . ">" . $row[ 'c' ] . "<br>";
    echo "<input type ='radio' value ='d'  name='$row[id]' " . ( $checked && 'd' == $checked ? 'checked' : '' ) . ">" . $row[ 'd' ] . "<br>";

}
echo "<input type='submit' value='submit' name='submit'></form>";
官方微信
官方QQ群
31647020