来自Mysql数据库的PHP POST循环

来自Mysql数据库的PHP POST循环,php,mysql,Php,Mysql,我是php新手,我正在尝试构建一个php测试,阅读mysql数据库中的问题和答案。 到目前为止,我有以下代码: require_once("scripts/connect_db.php"); session_start(); $_SESSION['Qid'] = 1; if (!isset($_POST['answer'])){ $Qid = $_SESSION['Qid']; echo $Qid; $stmt = $dbh->prepare("Select * F

我是php新手,我正在尝试构建一个php测试,阅读mysql数据库中的问题和答案。 到目前为止,我有以下代码:

require_once("scripts/connect_db.php");
session_start();
$_SESSION['Qid'] = 1;
if (!isset($_POST['answer'])){
    $Qid = $_SESSION['Qid'];
    echo $Qid;
    $stmt = $dbh->prepare("Select * FROM qtable WHERE id = ?");
    $stmt->bindParam(1, $Qid);
    $stmt->execute();
    $result = $stmt->fetchObject(); 
    echo $result->Q . "<br />";
    $stmt = $dbh->prepare("SELECT * FROM atable WHERE Qid = ? ORDER BY rand()");
    $stmt->bindParam(1, $Qid);
    $stmt->execute();
    $result = $stmt->fetchAll();
    echo "<form action=\"test1.php\" method=\"post\">";
    foreach ( $result as $row ) {
        if ( $row['correct'] == 1 ){
            echo "<input type=\"radio\" name=\"answer\" value=\"1\">" .$row['answer']."<br />";
        } else {
            echo "<input type=\"radio\" name=\"answer\" value=\"0\">" .$row['answer']."<br />";
        }
    }   
    echo "<input type=\"submit\" value=\"next\">";
    echo "</form>";     
}
else
{ 
    $Qid = $_SESSION['Qid'] + 1;
    echo $Qid;
    $stmt = $dbh->prepare("Select * FROM qtable WHERE id = ?");
    $stmt->bindParam(1, $Qid);
    $stmt->execute();
    $result = $stmt->fetchObject(); 
    echo $result->Q . "<br />";
    $stmt = $dbh->prepare("SELECT * FROM atable WHERE Qid = ? ORDER BY rand()");
    $stmt->bindParam(1, $Qid);
    $stmt->execute();
    $result = $stmt->fetchAll();
    echo "<form action=\"test1.php\" method=\"post\">";
    foreach ( $result as $row ) {
        if ( $row['correct'] == 1 ){
            echo "<input type=\"radio\" name=\"answer\" value=\"1\">" .$row['answer']."<br />";
        } else {
            echo "<input type=\"radio\" name=\"answer\" value=\"0\">" .$row['answer']."<br />";
        }
    }   
    echo "<input type=\"submit\" value=\"next\">";
    echo "</form>";
}
require_once(“scripts/connect_db.php”);
会话_start();
$\会话['Qid']=1;
如果(!isset($_POST['answer'])){
$Qid=$_会话['Qid'];
echo$Qid;
$stmt=$dbh->prepare(“从qtable中选择*,其中id=?”;
$stmt->bindParam(1,$Qid);
$stmt->execute();
$result=$stmt->fetchObject();
echo$result->Q.“
”; $stmt=$dbh->prepare(“从数据表中选择*,其中Qid=?按兰德排序()”; $stmt->bindParam(1,$Qid); $stmt->execute(); $result=$stmt->fetchAll(); 回声“; foreach($结果为$行){ 如果($row['correct']==1){ 回显“$row['answer']”。
; }否则{ 回显“$row['answer']”。
; } } 回声“; 回声“; } 其他的 { $Qid=$\会话['Qid']+1; echo$Qid; $stmt=$dbh->prepare(“从qtable中选择*,其中id=?”; $stmt->bindParam(1,$Qid); $stmt->execute(); $result=$stmt->fetchObject(); echo$result->Q.“
”; $stmt=$dbh->prepare(“从数据表中选择*,其中Qid=?按兰德排序()”; $stmt->bindParam(1,$Qid); $stmt->execute(); $result=$stmt->fetchAll(); 回声“; foreach($结果为$行){ 如果($row['correct']==1){ 回显“$row['answer']”。
; }否则{ 回显“$row['answer']”。
; } } 回声“; 回声“; }
我的想法是每次按submit时将$_SESSION['Qid']增加1,这样我就可以循环访问数据库,但到目前为止,我只能进入第二行。有没有人能帮助我,或者为我指出正确的方向,告诉我如何在没有Jquery或AJAX的情况下做到这一点。
谢谢

您一直在重置
$\u会话['Qid']=1

试一试

然后在接近结束时,添加以下内容以将计数器保存回会话:

$_SESSION['Qid'] = $Qid;

你的问题在于

$Qid = $_SESSION['Qid'] + 1;
问题在于,在SESSION_start()之后,您从未将实际的$_SESSION变量设置为除1以外的任何值;如果希望值在递增后保持不变,则应执行以下操作:

$_SESSION['Qid'] = $Qid

在脚本结束之前。

谢谢,在您的帮助下,我找到了答案,以下是代码:

session_start();
if (!isset($_POST['answer'])){  
$_SESSION['Qid'] = 1;
echo "im in the if";
$stmt = $dbh->prepare("Select * FROM qtable WHERE id = ?");
$stmt->bindParam(1, $_SESSION['Qid']);
$stmt->execute();
$result = $stmt->fetchObject(); 
echo $result->Q . "<br />";
$stmt = $dbh->prepare("SELECT * FROM atable WHERE Qid = ? ORDER BY rand()");
$stmt->bindParam(1, $_SESSION['Qid']);
$stmt->execute();
$result = $stmt->fetchAll();
echo "<form action=\"test1.php\" method=\"post\">";
foreach ( $result as $row ) {
    if ( $row['correct'] == 1 ){
        echo "<input type=\"radio\" name=\"answer\" value=\"1\">" .$row['answer']."<br />";
    } else {
        echo "<input type=\"radio\" name=\"answer\" value=\"0\">" .$row['answer']."<br />";
    }
}   
echo "<input type=\"submit\" value=\"next\">";
echo "</form>";   

} else {
    $Qid = $_SESSION['Qid'];
    $_SESSION['Qid'] = $Qid + 1;
    echo "im in the else";
    echo $_SESSION['Qid'];
    $stmt = $dbh->prepare("Select * FROM qtable WHERE id = ?");
    $stmt->bindParam(1, $_SESSION['Qid']);
    $stmt->execute();
    $result = $stmt->fetchObject(); 
    echo $result->Q . "<br />";
    $stmt = $dbh->prepare("SELECT * FROM atable WHERE Qid = ? ORDER BY rand()");
    $stmt->bindParam(1, $_SESSION['Qid']);
    $stmt->execute();
    $result = $stmt->fetchAll();
    echo "<form action=\"test1.php\" method=\"post\">";
    foreach ( $result as $row ) {
        if ( $row['correct'] == 1 ){
            echo "<input type=\"radio\" name=\"answer\" value=\"1\">" .$row['answer']."<br />";
        } else {
            echo "<input type=\"radio\" name=\"answer\" value=\"0\">" .$row['answer']."<br />";
        }
    }   
    echo "<input type=\"submit\" value=\"next\">";
    echo "</form>";
}
session_start();
如果(!isset($_POST['answer']){
$\会话['Qid']=1;
回显“im在if中”;
$stmt=$dbh->prepare(“从qtable中选择*,其中id=?”;
$stmt->bindParam(1,$_会话['Qid');
$stmt->execute();
$result=$stmt->fetchObject();
echo$result->Q.“
”; $stmt=$dbh->prepare(“从数据表中选择*,其中Qid=?按兰德排序()”; $stmt->bindParam(1,$_会话['Qid'); $stmt->execute(); $result=$stmt->fetchAll(); 回声“; foreach($结果为$行){ 如果($row['correct']==1){ 回显“$row['answer']”。
; }否则{ 回显“$row['answer']”。
; } } 回声“; 回声“; }否则{ $Qid=$_会话['Qid']; $\会话['Qid']=$Qid+1; 呼应“我在别处”; echo$_会话['Qid']; $stmt=$dbh->prepare(“从qtable中选择*,其中id=?”; $stmt->bindParam(1,$_会话['Qid'); $stmt->execute(); $result=$stmt->fetchObject(); echo$result->Q.“
”; $stmt=$dbh->prepare(“从数据表中选择*,其中Qid=?按兰德排序()”; $stmt->bindParam(1,$_会话['Qid'); $stmt->execute(); $result=$stmt->fetchAll(); 回声“; foreach($结果为$行){ 如果($row['correct']==1){ 回显“$row['answer']”。
; }否则{ 回显“$row['answer']”。
; } } 回声“; 回声“; }
@GolezTrol他也打败了我。我们可能是在编辑这个问题,而他正在键入他的答案:)你的问题有两个方面(至少)。吉姆和马特莫林应该合作,因为他们都描述了问题的一部分。不过,使用事先准备好的声明是值得称赞的。由于某种原因,大多数初学者都会使用旧的api。
session_start();
if (!isset($_POST['answer'])){  
$_SESSION['Qid'] = 1;
echo "im in the if";
$stmt = $dbh->prepare("Select * FROM qtable WHERE id = ?");
$stmt->bindParam(1, $_SESSION['Qid']);
$stmt->execute();
$result = $stmt->fetchObject(); 
echo $result->Q . "<br />";
$stmt = $dbh->prepare("SELECT * FROM atable WHERE Qid = ? ORDER BY rand()");
$stmt->bindParam(1, $_SESSION['Qid']);
$stmt->execute();
$result = $stmt->fetchAll();
echo "<form action=\"test1.php\" method=\"post\">";
foreach ( $result as $row ) {
    if ( $row['correct'] == 1 ){
        echo "<input type=\"radio\" name=\"answer\" value=\"1\">" .$row['answer']."<br />";
    } else {
        echo "<input type=\"radio\" name=\"answer\" value=\"0\">" .$row['answer']."<br />";
    }
}   
echo "<input type=\"submit\" value=\"next\">";
echo "</form>";   

} else {
    $Qid = $_SESSION['Qid'];
    $_SESSION['Qid'] = $Qid + 1;
    echo "im in the else";
    echo $_SESSION['Qid'];
    $stmt = $dbh->prepare("Select * FROM qtable WHERE id = ?");
    $stmt->bindParam(1, $_SESSION['Qid']);
    $stmt->execute();
    $result = $stmt->fetchObject(); 
    echo $result->Q . "<br />";
    $stmt = $dbh->prepare("SELECT * FROM atable WHERE Qid = ? ORDER BY rand()");
    $stmt->bindParam(1, $_SESSION['Qid']);
    $stmt->execute();
    $result = $stmt->fetchAll();
    echo "<form action=\"test1.php\" method=\"post\">";
    foreach ( $result as $row ) {
        if ( $row['correct'] == 1 ){
            echo "<input type=\"radio\" name=\"answer\" value=\"1\">" .$row['answer']."<br />";
        } else {
            echo "<input type=\"radio\" name=\"answer\" value=\"0\">" .$row['answer']."<br />";
        }
    }   
    echo "<input type=\"submit\" value=\"next\">";
    echo "</form>";
}