【问题标题】:Loading new page after php code has run?php代码运行后加载新页面?
【发布时间】:2016-08-17 19:00:17
【问题描述】:

我有一个表单,这个表单在一个名为 question1.php 的页面上,我希望它在按下提交按钮时加载 question2.php。

<form action="question2.php" method="post">
    <input type="radio" name="ans" value="cuboid">
    <input type="radio" name="ans" value="cone">
    <input type="radio" name="ans" value="cylinder">
    <input type="radio" name="ans" value="sphere">
    <input type="submit" value="submit" name="submit">
</form>

但我也有这个 php 代码

<?php
    if(isset($_POST['submit'])) {
      if(isset( $_POST['ans'])) {
           $selected_answer = $_POST['ans'];
           if($selected_answer == "cuboid") {
               $_SESSION["cuboid"] = ((int)$_SESSION["cuboid"]) + 1;
           }
      }
    }
?>

编辑:我做了一个更简单的演示来尝试更好地解释自己,我有三页。

page1.php

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<form action="page2.php">
    <input type="submit" value="submit" name="submit">
</form>
<?php
// Set session variables
$_SESSION["favcolor"] = "green";
?>
</body>
</html>

page2.php

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
    <form action="page3.php" method="post">
        <input type="radio" name="ans" value="color">
        <input type="submit" value="submit" name="submit">
    </form>
<?php
// Echo session variables that were set on previous page
if(isset($_POST['submit'])) {
    if(isset($_POST['ans'])) {
        $selected_answer = $_POST['ans'];
        if($selected_answer == "color") {
            $_SESSION["favcolor"] = "red";
        }
    }
}
?>
</body>
</html>

还有page3.php

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
     echo "Favorite color is " . $_SESSION["favcolor"] . ".";
?>

</body>
</html>

所以在第一页我声明会话变量“favcolor”,然后在第二页如果用户选择单选按钮我想将颜色更新为红色,但它不会改变我,在第三页仍然是绿色的

【问题讨论】:

  • 你可能忘记了session_start()。没有开始的会话,没有保存/传播的数据
  • 什么?您真的应该在php.net 上阅读更多关于 php 的真正含义
  • 我有 session_start(),在我的测验结束时(5 个问题)我可以显示会话变量,但是它们在应该增加的时候没有增加
  • ^ 他们总是说“事后”。
  • “我有 session_start(),在我的测验结束时(5 个问题)” - “在最后?”............我没有这个问题。

标签: php html forms session


【解决方案1】:

您在 page2.php 上遇到问题,因为您在 page3.php 上提交表单,但您在 page2.php 上处理提交请求。所以我在下面为你更正了。

page1.php

<?php session_start(); ?>
<!DOCTYPE html>
<html>
  <body>
    <form action="page2.php" method="post">
        <input type="submit" value="submit" name="submit">
    </form>
    <?php
    // Set session variables
    $_SESSION["favcolor"] = "green";
    ?>
  </body>
</html>

page2.php

<?php session_start(); ?>
<!DOCTYPE html>
<html>
<body>
    <form action="page3.php" method="post">
        <input type="radio" name="ans" value="color">
        <input type="submit" value="submit" name="submit">
    </form>        
 </body>
</html>

page3.php

<?php session_start(); ?>
<!DOCTYPE html>
<html>
 <body>
    <?php
    // Echo session variables that were set on previous page
    if (isset($_POST['submit'])) {
        if (isset($_POST['ans'])) {
            $selected_answer = $_POST['ans'];
            if ($selected_answer == "color") {
                $_SESSION["favcolor"] = "red";
            }
        }
    }
    echo "Favorite color is " . $_SESSION["favcolor"] . ".";
    ?>
 </body>
</html>

【讨论】:

    【解决方案2】:

    我希望这应该可行。

    $_SESSION["cuboid"] = isset($_SESSION["cuboid"]) ? $_SESSION["cuboid"] : 0;
    $_SESSION["cuboid"] = ((int)$_SESSION["cuboid"]) + 1;
    

    【讨论】:

    • 你为什么只希望?
    • 你能看看我的编辑吗?我试图更好地解释自己:)
    • 看看我的最新答案
    【解决方案3】:

    据我所知,您正试图重定向到另一个网页。

    尝试使用 header() 函数发送 HTTP 标头。

    header('Location: http://example.com/page3.php');
    exit();
    

    如果 HTTP 标头一开始不起作用,请使用 ob_start() 打开输出缓冲区。

    【讨论】:

      【解决方案4】:

      您正在错误页面中检查 $_POST['ans']。

      目前,当用户输入 page2.php 时,您正在检查“ans”,这是在用户提交包含该输入元素的表单之前。

      当您在 page2.php 上提交表单时,该操作会将请求发送到 page3.php,因此您实际上希望将设置颜色为绿色的 if 语句移动到 page3 的顶部(会话开始下方)。 php

      【讨论】:

        猜你喜欢
        • 2014-06-19
        • 2017-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多