0

我有一个表单,当我按下提交按钮时,我会根据需要处理数据。我想要的是转到另一页或上一页。我的页面是什么,起初是一个链接列表,当我点击一个链接时,另一个页面会打开,里面有问题要回答,我回答完之后,我需要回到选择页面。我试过header()了,因为这是大多数人说要使用的,但我停留在同一页面上,我尝试了使用,<meta http-equiv="refresh" content="0" url="the page to go to">但这似乎一遍又一遍地刷新同一页面。当我按下提交并处理问题时,我怎样才能使它返回到选择页面。

谢谢

注意:如果需要代码,请告诉我,以便我发布它们。

编辑:

这是我尝试使用header()and的代码http_redirect()

<?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";
}

?>

<!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>

<?php 

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");
}
?>
4

4 回答 4

1
header("Location: http:your link")

应该做的伎俩。但是,请确保该行之前的页面中没有回声。

于 2013-06-10T17:51:52.170 回答
1

由于您声明您处理了当前页面上的数据,因此您不需要将数据从一个页面传递到另一个页面。因此,一旦您完成处理数据,您就可以移动到另一个页面。因此,只需在处理数据的代码下方添加适当的标题即可。

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>
于 2013-06-10T17:46:00.950 回答
-1

使用动作属性

<form method="post" action="other-page.php"> 
...
于 2013-06-10T17:45:43.630 回答
-1

完成数据处理后,您可以发出http_redirect(); 这与做同样的事情,header('Location:...')但可能更容易使用。请参阅文档: http: //php.net/manual/en/function.http-redirect.php

于 2013-06-10T17:46:59.733 回答