Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和HTML:如何一次显示一个结果?_Php_Html_Sql - Fatal编程技术网

PHP和HTML:如何一次显示一个结果?

PHP和HTML:如何一次显示一个结果?,php,html,sql,Php,Html,Sql,我是PHP和HTML的新手。我正在努力解决这个问题。如何一次显示一个问题,直到用户选择答案并转到下一个问题?我的代码现在显示在同一页上的所有问题。我只希望页面显示一个问题,用户选择答案并单击提交按钮转到下一个问题。非常感谢你 <?php require_once 'database.php'; // Start the session session_start(); $query = "SELECT * FROM question_table"; $statement = $

我是PHP和HTML的新手。我正在努力解决这个问题。如何一次显示一个问题,直到用户选择答案并转到下一个问题?我的代码现在显示在同一页上的所有问题。我只希望页面显示一个问题,用户选择答案并单击提交按钮转到下一个问题。非常感谢你

    <?php
require_once 'database.php';

// Start the session
session_start();

$query = "SELECT * FROM question_table";
$statement = $db->prepare($query);
$statement->execute();
$question = $statement->fetchall();
//print_r($question); //test the query to see if any result comes back
$statement->closeCursor(); 

// Getting response from the student
//if (isset($_POST["submit"])){
//   
//echo "worked"; 
//echo $_POST["option"];
//}

?>

<!DOCTYPE html>
<html>

<head>
<title>SimulationQuestion</title>
</head>
<body>

<h1>Welcome</h1>
<form action="QuestionAndOption.php" method="POST">
<!--         index is used to display question number-->
        <?php $index =1; ?>
<!--        Pulling data from the returned array from the query-->
        <?php foreach($question as $value){ ?>
        Question <?php echo $index.": ".$value["Question"];?><br>

        A: <input type="radio" name="option" value="OptionA"> <?php echo $value["OptionA"]; ?><br>
        B: <input type="radio" name="option" value="OptionB"> <?php echo $value["OptionB"]; ?><br>
        C: <input type="radio" name="option" value="OptionC"> <?php echo $value["OptionC"]; ?><br>
        D: <input type="radio" name="option" value="OptionD"> <?php echo $value["OptionD"]; ?><br>

        <!--Submit button-->
        <button name="submit" type="submit">Submit</button><br>

        <!--index is increment by 1 after each loop-->
        <?php $index++; ?>                           
        <?php } ?>

    </form>

</body>


</html>

模拟问题
欢迎
问题
答:
B:
C:
D:
提交

存储问题和计数器,以存储在会话['questions']中提出的问题。使用计数器(也存储在
$\u会话中
)找出下一个问题,并在每次提交后递增

session_start()之后执行此检查如果设置了
$\u会话['questions']
。如果没有,则获取您的问题并将其存储到
$\u会话['questions]
,然后将计数器设置为0

您可以通过
$\u会话['questions'][$\u会话['counter']]
而不是
foreach()
访问您的问题,但不要忘记每次都增加计数器


示例代码:

设置/获取问题和增加计数器的部分:
session_start();

if(!isset($_SESSION['questions'])) {
    $query = "SELECT * FROM question_table";
    $statement = $db->prepare($query);
    $statement->execute();
    $question = $statement->fetchall();
    $statement->closeCursor();

    $_SESSION['questions'] = $question;
    $_SESSION['counter'] = 0;
}

if (isset($_POST["submit"])){
    // DO YOUR STUFF

    $_SESSION['counter']++;
}
?>
输出部分回答了以下问题:

<?php
    $question = $_SESSION['questions'][$_SESSION['counter']];
    if(empty($question)) {
        // FINISHED ALL QUESTIONS
    } else {
?>
<form action="QuestionAndOption.php" method="POST">
    Question <?php echo $_SESSION['counter'] . ": " . $question["Question"]; ?><br>

    A: <input type="radio" name="option" value="OptionA"> <?php echo $question["OptionA"]; ?><br>
    B: <input type="radio" name="option" value="OptionB"> <?php echo $question["OptionB"]; ?><br>
    C: <input type="radio" name="option" value="OptionC"> <?php echo $question["OptionC"]; ?><br>
    D: <input type="radio" name="option" value="OptionD"> <?php echo $question["OptionD"]; ?><br>
    <button name="submit" type="submit">Submit</button>
</form>
<?php
    } // if close 
?>

问题
答:
B:
C:
D:
提交
您应该有一个页面显示一个问题。您的查询将是:
SELECT*FROM question\u table,其中question=:id
。然后执行
$statement=$db->prepare($query,array(“:id”=>$\u GET[“id”])
来准备查询,以便只获取一个问题,获取问题,然后显示数据库获取的问题

用户回答问题后,它将被提交,在您的提交逻辑中,它应该通过增加问题id将用户重定向到下一个问题。页面地址应该有一个名为
id
(例如:
mypage.php?id=1
)的查询参数


Pastebin:

从id=1的问题表中选择*只获取第一个问题,然后在用户回答时增加数字。这可以通过许多不同的方式来实现,比如在如下url:yourpage.com/questions.php?question=1中增加$_GET['question'],也可以在客户端使用JavaScript来实现,并使用AJAX将结果发送到服务器,这将给你的页面一个更现代的单页应用程序的感觉。有很多方法可以做到这一点,但我的答案取决于你是否想在用户浏览每个问题时保存每个问题的答案?如果是这样,那么正如上面所建议的,您需要在每个表单上有一个隐藏的输入,并输出当前的订单号。否则,如果不需要保存,您可以简单地输出所有问题,并使用jquery.Valiant显示/隐藏它们,但这一级别的问题需要一个更健壮的代码示例来实现。一个小的,有效的例子是必要的。非常感谢你的解决方案。我只想理解代码。在代码中,在我回答一个问题并单击提交后,在代码中的什么位置使页面显示下一个问题$问题[“问题”]在每次提交后自动转到下一个问题?这是因为多维数组吗$问题=$会话['questions'][$会话['counter']]@内森:是的,这是因为
$question=$会话['questions'][$会话['counter']。第一次调用脚本时,它将初始化问题键并将计数器键设置为零。提交表单将导致通过POST将表单数据发送到“QuestionAndOption.php”。这导致PHP设置
$\u POST[“提交”]
。如果设置了
$\u POST[“submit”]
,则
$\u会话['counter']
将增加1。通过
$question=$会话['questions'][$会话['counter']
$question
现在存储下一个问题,并使用新值填充表单。