来自Mysql数据库的PHP POST循环
我是php新手,我正在尝试构建一个php测试,阅读mysql数据库中的问题和答案。 到目前为止,我有以下代码:来自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
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>";
}