Php 从数据库中获取mcsq'z单选按钮的值

Php 从数据库中获取mcsq'z单选按钮的值,php,mysql,database,Php,Mysql,Database,我是一个制作测验应用程序,它有一个名为question_bank的数据库表,它有列: id | question | a | b | c | d | right_ans | given_ans 我想从数据库中获取所有问题,当用户提交表单时,应将给定的问题与正确的问题进行比较。我可以从数据库中获取所有问题,但它无法正常运行。它应该只从四个给定选项中选择一个值,但此代码允许我选择所有选项。我需要单选按钮的值为a,b,c,d。因为我会把它和右边的专栏进行比较 $query="SELECT *

我是一个制作测验应用程序,它有一个名为question_bank的数据库表,它有列:

id | question | a | b | c | d | right_ans | given_ans
我想从数据库中获取所有问题,当用户提交表单时,应将给定的问题与正确的问题进行比较。我可以从数据库中获取所有问题,但它无法正常运行。它应该只从四个给定选项中选择一个值,但此代码允许我选择所有选项。我需要单选按钮的值为a,b,c,d。因为我会把它和右边的专栏进行比较

    $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'>"[!

单选按钮必须具有相同的名称,才能像您希望的那样相互排斥:

 echo "A:<input type ='radio' value ='a'  name='response".$i."' >".$a."</br>";
 echo "B:<input type ='radio' value ='b'  name='response".$i."' >".$b."</br>";
 echo "C:<input type ='radio' value ='c'  name='response".$i."' >".$c."</br>";
 echo "D:<input type ='radio' value ='d'  name='response".$i."' >".$d."</br>";

您正在while循环中执行。 然后试试这个:

$i =1;

 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=response'$i' >".$a."</br>";
 echo "B:<input type ='radio' value ='b'  name=response'$i' >".$b."</br>";
 echo "C:<input type ='radio' value ='c'  name=response'$i' >".$c."</br>";
 echo "D:<input type ='radio' value ='d'  name=response'$i' >".$d."</br>";
 $i++;
}
它将使您的电台名称为response1、response2等等…

构建表单

通常分组,共享相同名称属性的单选按钮是一个组的一部分示例中一个问题的所有答案。由于默认情况下没有选中任何答案,因此当在单选按钮组中没有选中任何答案时,将不会提交输入。为了防止在组中的第一个单选按钮上使用“必需”属性,这将告诉浏览器仅在输入不为空时提交表单

下面是一个示例,我以面向对象的方式使用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>";
,其中键是问题的id,值由用户选择答案

如何验证表单的示例:

$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>';
        }       
    }   
}

如果我给单选按钮起了相同的名字,它只允许我从所有问题中选择一个选项。还要注意,这不是做br标记的正确方法。您可以使用或,先生,我如何在提交表格后获得所有值?我希望所有给出的答案都能与正确答案相比较。你在问一个新问题。请开始一个新问题,结束这个问题。如果原来的问题已经回答了,先生,我还需要问一件事。当用户提交测验时,我如何获得给定答案的所有值?当用户提交测验时,我如何获得给定答案的所有值?我正在做ifisset$_POST['submit']{$a=$_POST['response.$i']];}在POST尝试从我的表格中获取问题的值后,您将从中获得$i。提交后,我希望将这些值与正确答案进行比较。非常感谢:你刚刚帮我节省了很多时间。
$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>';
        }       
    }   
}
$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>";