在php中提交表单后会话丢失其数据或值

Posted

技术标签:

【中文标题】在php中提交表单后会话丢失其数据或值【英文标题】:Session loses its data or value after form submitting in php 【发布时间】:2021-12-15 10:40:53 【问题描述】:

问候高级和初级开发人员,我是 php 新手。目前,我面临与会话相关的问题。但在我描述我的问题之前,我也尝试了其他解决方案,但没有奏效。所以这是我的问题: 我有两个 php 文件 s1 和 s2.php 当我在输入框中输入我的名字并单击提交按钮时,我希望我的名字显示在另一个页面上,即 s2.php。我想通过使用会话来实现上述结果。我所做的是我写了一个条件语句来检查按钮是否已提交,如果提交了,则将我在 url 的输入框中输入的值分配给我的会话变量。然后我在我的 html 文档之上定义了会话开始。我对 s2 页面做了同样的事情,我试图在页面上回显会话变量,但它什么也没显示。然后我尝试检查会话是否设置,我发现它还没有设置。

那么如何解决这个问题呢?为什么我的会话尚未设置?如果我尝试不提交表单,它工作正常。 这是我的 s1.php 代码:

<?php
session_start();
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
        <form action="s2.php" method="get">
            <input type="text" name="username">
            <input type="submit" name="submit">
        </form>
    

    <?php
        
            if(isset($_GET['submit']))
                $_SESSION['name']=$_GET['username'];
            
            
        
        
      
    ?>
</body>
</html>

这是我的 s2.php 代码:

<?php
session_start();
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?php
    

        if(isset($_SESSION['name']))
            echo "it set"."<br>";
            echo $_SESSION['name'];
        else
            echo "it not set";
        
    ?>
</body>
</html>

【问题讨论】:

尝试将 s1.php 中的 if 条件放在 s2.php 文件中 session_start(); 之后。 【参考方案1】:

s1.php 在服务器上处理,您的条件为假,因此将返回一个 html 表单,您可以在浏览器中看到它。 当您提交表单时,表单数据将被发送到 s2.php。你正在检查会话是否设置,告诉我们并显示会话['name']的内容。

所以基本上问题是您在 s1.php 的设置器 sn-p 根本没有更改设置会话 ['name']。它在错误的地方。就像Robert说的那样移动

if(isset($_GET['submit']))
   $_SESSION['name']=$_GET['username'];

到 s2.php 在检查 session['name'] 是否设置之前

& 如果您与 s1.php 中的会话无关, 你可以删除

<?php
session_start();
?>

来自s1.php的头部

最好的问候:)

【讨论】:

以上是关于在php中提交表单后会话丢失其数据或值的主要内容,如果未能解决你的问题,请参考以下文章

表单提交后 Textarea 不保留其内容

发送序列化的表单数据并接收带有表单和会话数据的 PHP Laravel 重定向

CodeIgniter:提交无效表单后如何保留值?

如何使用 PHP 会话来防止重复提交表单?

提交表单后如何在后台运行 PHP 脚本?

在 PHP 中对多页表单使用会话跟踪