【问题标题】:PHP: Quiz answers were showing up until I pressed the next button one too many timesPHP:测验答案一直显示,直到我按下下一个按钮太多次
【发布时间】:2016-04-04 02:31:18
【问题描述】:

我正在努力完成我的测验。我遇到的问题是,最初当我让我的代码工作时,我可以在单选按钮旁边看到我的 sql 表的内容,四个答案按相同的 id (qid) 排序。

在我多次按下下一个按钮后,我在页面上看不到任何内容,我什至尝试刷新浏览器几次。如何在我的页面上再次看到我的问题?以及如何防止这种情况再次发生?我使用的是谷歌浏览器,但我已经在 Firefox 和 Internet Explorer 上尝试过,但没有任何效果。

PHP/HTML

<?php

$localhost = "localhost";
$username = "root";
$password = "";
$connect = mysqli_connect($localhost, $username, $password) or die ("Kunde inte koppla");
mysqli_select_db($connect, 'wildfire');

session_start();
$qid = isset($_SESSION['qid']) ? $_SESSION['qid']+1 : 1;
$_SESSION['qid'] = $qid;

ob_start();

echo "<form>";
$sql1 = mysqli_query($connect,"SELECT * FROM question where qid ='$qid'");

while($row1=mysqli_fetch_assoc($sql1))
    echo "<input type='radio' name='answer1' value='{$row1['Point']}'>{$row1['answer']}<br>";

echo "<input type='submit' name='forward' value='next'>";
echo "</form>";


$output = ob_get_clean();
?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body> 
        <?php echo $output; ?>
    </body>

</html>

【问题讨论】:

  • 只使用 php 和 html,让用户觉得网站风格过于陈旧。使用 jquery 和 ajax,使其更加用户友好。不仅如此,刷新页面次数过多会影响您的带宽。
  • 但是我怎么做这个工作,我宁愿不使用 AJAX,因为我不太熟悉它?奇怪的是,这最初是有效的,我很确定我不是在想象。
  • 在循环外使用按钮
  • @devpro 我刚刚试过了,没有任何反应
  • 在页面的第一行试试这个并检查发生了什么:session_start(); $qid = isset($_SESSION['qid']) ? $_SESSION['qid']+1 : 1; $_SESSION['qid'] = $qid; print_r($_SESSION);退出;

标签: php mysqli radio-button


【解决方案1】:

试试这个:

<?
$localhost = "localhost";
$username = "root";
$password = "";
$connect = mysqli_connect($localhost, $username, $password) or die ("Kunde inte koppla");
mysqli_select_db($connect, 'wildfire');

$qid = (!isset($_POST['qid']) && intval($_POST['qid']) == 0) ? 1 : $_POST['qid']+1;

?>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body> 
        <form method="post" action="">
            <input type="hidden" name="qid" value="<?=$qid?>">
            <?php
                $sql1 = mysqli_query($connect,"SELECT * FROM question where qid =".intval($qid));
                while($row1=mysqli_fetch_assoc($sql1)){
                ?>
                <input type='radio' name='answer1' value="<?php echo $row1['Point'];?>"><?php echo $row1['answer'];?><br>
                <?php
                }
            ?>
            <input type='submit' name='forward' value='next'>
        </form>
    </body>

</html>

有什么变化?

我使用$_POST 代替SESSION 作为qid ID,因为刷新页面时需要取消设置会话值,所以将qid 存储到$_POST 而不是$_SESSION

【讨论】:

  • 嗯。我在表单内的行上收到四个错误。 “未定义的变量”并期望更多的参数等。但是它们已经被定义了,这真的很奇怪。
  • @PHPScrub:我已经更新,使用
  • 好的,我现在没有错误。但我仍然得到与提出这个问题之前相同的结果。我需要让前八个问题再次可见。
  • @PHPScrub:根据代码,只有一个问题会显示在 $qid 的右侧。当你向前移动时,$qid 将更改为 +1 并且问题也会更改...我是对的吗?
  • 哦,我明白了,实际上当你刷新页面时,你的会话被设置为以前的值。您需要取消设置会话以获取 ist 问题..
猜你喜欢
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 2021-10-08
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
相关资源
最近更新 更多