Php 完成表单处理后转到另一页
我有一个表单,当我按下submit按钮时,我会根据需要处理数据。我想要的是转到另一页,或者上一页。我的页面是什么,首先是一个链接列表,当我按下一个链接时,另一个页面打开,有问题要回答,回答后,我需要返回选择页面。我尝试了Php 完成表单处理后转到另一页,php,html,redirect,Php,Html,Redirect,我有一个表单,当我按下submit按钮时,我会根据需要处理数据。我想要的是转到另一页,或者上一页。我的页面是什么,首先是一个链接列表,当我按下一个链接时,另一个页面打开,有问题要回答,回答后,我需要返回选择页面。我尝试了header(),因为这是大多数人说要使用的,但我仍然停留在同一页上,我尝试了使用,但这似乎一次又一次地刷新同一页。当我按下submit并处理问题时,如何使其返回选择页面 谢谢 注意:如果需要代码,请告诉我,以便我发布它们 编辑: 下面是我尝试使用header()和http\u
header()
,因为这是大多数人说要使用的,但我仍然停留在同一页上,我尝试了使用
,但这似乎一次又一次地刷新同一页。当我按下submit并处理问题时,如何使其返回选择页面
谢谢
注意:如果需要代码,请告诉我,以便我发布它们
编辑:
下面是我尝试使用header()
和http\u redirect()
使用操作属性
<form method="post" action="other-page.php">
...
...
由于您声明已在当前页面上处理数据,因此无需将数据从一个页面传递到另一个页面。因此,一旦处理完数据,就可以移动到另一个页面。因此,只需在处理数据的代码下面添加适当的标题
header('Location:otherpage.php');
在新发布的代码中,我注意到在header()调用上方有HTML。为了防止开发人员低效地处理不必要的代码,这是不允许的。(如果要在看到数据之前立即重定向,为什么要显示数据)
尝试将处理代码和header()调用添加到页面顶部,如下所示:
<?php
// topic 1
try {
$db = new PDO("mysql:dbname=mawarid;host=localhost", "khaled", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$q_qry = "select * from question where question_topic='1';";
$questions = $db->query($q_qry)->fetchAll();
} catch (PDOException $ex) {
// code here for handling error
print "error";
print "\n".$ex->getMessage()."\n";
}
session_start();
if(isset($_POST["submit"])) {
$user_ans = array();
for($i = 1; $i <= 10; $i++) {
$ans_access = "q".$i;
$user_ans[$i] = $_POST[$ans_access];
}
// $correct = $_SESSION["contestant_name"]["correct"];
// $wrong = $_SESSION["contestant_name"]["wrong"];
$correct = 0;
$wrong = 0;
foreach ($questions as $question) {
if ($question[2] == $user_ans[$question[0]])
$correct++;
else
$wrong++;
}
$_SESSION["contestant_name"]["topics_score_correct"][0] = $correct;
$_SESSION["contestant_name"]["topics_score_wrong"][0] = $wrong;
$_SESSION["contestant_name"]["topics_done"][0] = TRUE;
$_SESSION["contestant_name"]["correct"] += $correct;
$_SESSION["contestant_name"]["wrong"] += $wrong;
$_SESSION["contestant_name"]["last_topic_id"] = 1;
// header("Location:choosetopic.php");
http_redirect("choosetopic.php");
}
?>
<!doctype html>
<html>
<html>
<meta charset="UTF-8">
<title>topic 1</title>
</html>
<body>
<h1>topic 1:</h1>
<form method="post" action="">
<ol>
<?php
foreach ($questions as $question) {
$qa_qry = "select * from answer where question='$question[0]';";
$ans = $db->query($qa_qry)->fetchAll();
?>
<li><?= $question[1] ?></li>
<?php
foreach ($ans as $a) {
$radio_name = "q".$question[0];
?>
<label><input type="radio" name="<?= $radio_name ?>" value="<?= $a[0] ?>"><?= $a[1] ?></label><br/>
<?php
}
}
?>
</ol>
<input type="submit" value="submit" name="submit">
</form>
</body>
</html>
处理完数据后,可以发出http_redirect()
;这与标题('Location:…')的作用相同,但可能更易于使用。请参阅文档:
我们应该做到这一点。但是,请确保页面中该行之前没有回音。代码通常是最好的开始位置。没有病人在手术台上,很难进行手术你如何评估你想进入哪个页面?只是好奇,但你是否有任何具体的错误报告可以提供给我们。另外,我假设当您被告知使用header()调用时,他们说您不能在重定向上方显示任何数据代码?在主代码的上下文中,我看不到这一点;但是确保在header()调用之前没有任何HTML或回声。@OP
:我也很好奇。代码所在页面的名称(php)
是什么?可能不会是choosetopic.php
?哦,这段代码来自的页面名是topic1.php
,而choosetopic.php
是我可以选择的9个主题的链接,所以我要做的是在我完成第一个主题并提交它之后,我想回到我选择另一个主题的页面,我想重点是表单处理程序和他希望访问者在处理表单提交后登陆的页面不是同一个页面。我不确定为什么会出现-1。但是这个解决方案需要注意的是,它需要从第一个页面获取所有数据处理代码,并将其放在新定向的页面上。我没有否决这一点,但从更新的代码可以看出,OP希望他的整个代码都在同一个位置运行,因此,将空表单操作设置为self
。你不能妄自尊大,我引用了OP我尝试了header(),因为这是大多数人说要使用的,但我保持在同一页上…
。是的,也许他把它添加到了错误的位置。标题调用上方不能显示任何数据;这就是为什么我特别说要将它添加到数据处理下面(假设他没有任何高于此的输出)。我们不能确定,因为没有什么(代码)可供我们使用。你很可能是对的;-)@aizen92感谢您添加相关源代码;在您的文件中提供的PHP代码之上还有其他代码吗?@aizen92我注意到您的header()调用之上有HTML。请添加会话_start();如果(isset($_POST[“submit”])代码出现在php页面的最顶端。您不能在呼叫上方显示数据代码。@aizen92给我们显示一些代码怎么样?就我而言,我从来没有出现在读心术课上,昨晚我的超能力已经耗尽了;TMI。
<?php
// topic 1
try {
$db = new PDO("mysql:dbname=mawarid;host=localhost", "khaled", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$q_qry = "select * from question where question_topic='1';";
$questions = $db->query($q_qry)->fetchAll();
} catch (PDOException $ex) {
// code here for handling error
print "error";
print "\n".$ex->getMessage()."\n";
}
session_start();
if(isset($_POST["submit"])) {
$user_ans = array();
for($i = 1; $i <= 10; $i++) {
$ans_access = "q".$i;
$user_ans[$i] = $_POST[$ans_access];
}
// $correct = $_SESSION["contestant_name"]["correct"];
// $wrong = $_SESSION["contestant_name"]["wrong"];
$correct = 0;
$wrong = 0;
foreach ($questions as $question) {
if ($question[2] == $user_ans[$question[0]])
$correct++;
else
$wrong++;
}
$_SESSION["contestant_name"]["topics_score_correct"][0] = $correct;
$_SESSION["contestant_name"]["topics_score_wrong"][0] = $wrong;
$_SESSION["contestant_name"]["topics_done"][0] = TRUE;
$_SESSION["contestant_name"]["correct"] += $correct;
$_SESSION["contestant_name"]["wrong"] += $wrong;
$_SESSION["contestant_name"]["last_topic_id"] = 1;
// header("Location:choosetopic.php");
http_redirect("choosetopic.php");
}
?>
<!doctype html>
<html>
<html>
<meta charset="UTF-8">
<title>topic 1</title>
</html>
<body>
<h1>topic 1:</h1>
<form method="post" action="">
<ol>
<?php
foreach ($questions as $question) {
$qa_qry = "select * from answer where question='$question[0]';";
$ans = $db->query($qa_qry)->fetchAll();
?>
<li><?= $question[1] ?></li>
<?php
foreach ($ans as $a) {
$radio_name = "q".$question[0];
?>
<label><input type="radio" name="<?= $radio_name ?>" value="<?= $a[0] ?>"><?= $a[1] ?></label><br/>
<?php
}
}
?>
</ol>
<input type="submit" value="submit" name="submit">
</form>
</body>
</html>
header("Location: http:your link")