【问题标题】:Does action attribute in html forms interfere with what's stored in $_SESSION global variable?html 表单中的 action 属性是否会干扰 $_SESSION 全局变量中存储的内容?
【发布时间】:2015-06-18 10:10:18
【问题描述】:

假设,我有两个页面:page01.php 和 page02.php(它们的代码如下所示)。

如果我将 page01.php 表单中的 action 属性留空(即 action=""),则访问 page01.php,填写表单,按提交,然后访问 page02.php - 一切正常(即$_SESSION 变量存储在 page01.php 上提交的数据,可以在 page02.php 上按预期访问和查看)。

但是,当我尝试让表单将用户发送到 page02.php(通过将操作属性更改为 action="page02.php")时,看起来 $_SESSION 全局变量不存储来自 page01 的数据。

我的问题是:这是因为用户在提交表单后立即被重定向到 page02.php 并且 page01.php 上的 php 标签之间的代码没有被执行吗?

我知道我可以在 page02.php 上使用 $_GET 或 $_POST 来实现所需的行为,但我只是想了解 action 属性和 $_SESSION 交互的方式。谢谢你。

Page01.php:

<html>
<head>
    <title>Page 01</title>      
</head>
<body>
    <h1>Please fill this form</h1>
    <form action="" method="post">
        Name:  <input name="username">
        <input type="submit" value="send">
    </form>

    <?php   
        session_start();
        if(isset($_POST['username'])) {
            $_SESSION['username']=$_POST['username'];
        }
    ?>
</body>

Page02.php:

<html>
<head>
    <title>Page 02</title>      
</head>
<body>
    <h1>Another temporary page is working</h1>
    <?php
        session_start();
        $expectedName = "Bob";
        if($_SESSION['username'] == $expectedName) {
            echo "Welcome, Bob!";
        }
        else {
            echo "Access denied. You are ". $_SESSION['username']  . ", not Bob.";
        }
    ?>
</body> 

【问题讨论】:

  • 你是对的......它的bcoz page01.php中存储会话数据的代码没有被执行。
  • 发生这种情况是因为在 page2 上您不使用 post 值,仅在 page1.php 上使用
  • 您没有为 page1 上的会话数组分配任何值,如果检查会阻止该值

标签: php html


【解决方案1】:

action 属性是您指定提交后需要运行的脚本的属性。

所以如果你希望用户在表单提交后被重定向,你可以使用 header() 函数。

【讨论】:

  • 所以,我现在看到的方式:我的 php 代码在页面首次加载时在 page01.php 上执行,但由于尚未提交表单,$_POST 变量为空,因此$_SESSION 变量中没有存储任何内容。然后,在提交带有“page02.php”值的 action 属性的表单后,我在 page01.php 上的 php 代码不会再次执行。感谢大家的澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 2020-11-30
  • 2018-05-12
  • 2016-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多