在 php 中提交表单后会话丢失其数据或值
Session loses its data or value after form submitting in php
向高级和初级开发人员致意,我是 php 的新手。目前,我正面临与会话相关的问题。但是在我描述我的问题之前,我也尝试了其他解决方案,但没有奏效。所以这是我的问题:
我有两个 php 文件 s1 和 s2.php
当我在输入框中输入我的名字并单击提交按钮时,我希望我的名字显示在另一个页面 s2.php 上。我想通过使用会话来实现上述结果。我所做的是我写了一个条件语句来检查按钮是否已提交,如果提交了,则将我在 url 中的输入框中输入的值分配给我的会话变量。然后我在 html 文档之上定义了会话开始。我对 s2 页面做了同样的事情,我试图在页面上回显会话变量,但它什么也没显示。然后我试了一下session有没有设置,发现还没设置。
那么如何解决问题呢?为什么我的会话没有设置?如果我尝试不提交表格,它工作正常。
这是我的 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 在服务器上处理并且您的条件为假,因此 html 表单将返回并且您在浏览器中看到它。
当您提交表单时,表单数据将发送到 s2.php。您正在检查 session 是否已设置,告诉我们并显示 session['name'].
的内容
所以基本上问题是您在 s1.php 的 setter 片段根本没有得到设置 session['name'] 的更改。它在错误的地方。就像 Robert 所说的 move
if(isset($_GET['submit'])){
$_SESSION['name']=$_GET['username'];
}
到s2.php,然后检查是否设置了session['name']
& 如果你与 s1.php 中的 session 无关,
你可以删除
<?php
session_start();
?>
来自s1.php
的头
此致:)
向高级和初级开发人员致意,我是 php 的新手。目前,我正面临与会话相关的问题。但是在我描述我的问题之前,我也尝试了其他解决方案,但没有奏效。所以这是我的问题: 我有两个 php 文件 s1 和 s2.php 当我在输入框中输入我的名字并单击提交按钮时,我希望我的名字显示在另一个页面 s2.php 上。我想通过使用会话来实现上述结果。我所做的是我写了一个条件语句来检查按钮是否已提交,如果提交了,则将我在 url 中的输入框中输入的值分配给我的会话变量。然后我在 html 文档之上定义了会话开始。我对 s2 页面做了同样的事情,我试图在页面上回显会话变量,但它什么也没显示。然后我试了一下session有没有设置,发现还没设置。
那么如何解决问题呢?为什么我的会话没有设置?如果我尝试不提交表格,它工作正常。 这是我的 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 在服务器上处理并且您的条件为假,因此 html 表单将返回并且您在浏览器中看到它。 当您提交表单时,表单数据将发送到 s2.php。您正在检查 session 是否已设置,告诉我们并显示 session['name'].
的内容所以基本上问题是您在 s1.php 的 setter 片段根本没有得到设置 session['name'] 的更改。它在错误的地方。就像 Robert 所说的 move
if(isset($_GET['submit'])){
$_SESSION['name']=$_GET['username'];
}
到s2.php,然后检查是否设置了session['name']
& 如果你与 s1.php 中的 session 无关, 你可以删除
<?php
session_start();
?>
来自s1.php
的头此致:)