会话中的 PHP 和变量
Posted
技术标签:
【中文标题】会话中的 PHP 和变量【英文标题】:PHP and variable in session 【发布时间】:2021-09-02 04:00:24 【问题描述】:我需要在 2 个 php 页面之间传递一个变量。
按钮提交后,表单中的action调用第二个页面。
<body>
<div>
<form action="callSecondPage.php" method="POST">
<div>
<select name="taskOption">
<option>First</option>
<option>Second</option>
<option>Third</option>
</select>
</div>
<?php
$currentValue = (isset($_POST['taskOption'])) ? $_POST['taskOption'] : '';
$_SESSION['taskOption'] = $currentValue;
?>
<div>
<button name="submit" class="btn">Submit</button>
</div>
</form>
</div>
</body>
在第二页中,我只是尝试找到该值并在控制台中打印它:
<?php
session_start();
$taskOption = $_SESSION['taskOption'];
echo '<script>';
echo 'console.log('. json_encode($taskOption, JSON_HEX_TAG) .')';
echo '</script>'; ?>
我哪里错了?为什么第二页的值为null?
【问题讨论】:
是不同的文件(page1.php
,page2.php
),如果是,你会在第二个做 session_start() 吗?
此代码在第一页是真的吗?如果是,则不需要使用SESSION
,而是可以直接在callSecondPage
中使用POST
此代码在第一页,是的,有 2 个不同的文件。
我尝试直接在第二页进行 POST 但结果始终相同...空值。
以后当您需要添加更多代码时,请编辑您的问题。 cmets 中的代码很难阅读,您可以自己看到。这次我给你加了,然后我在下面准备了一个答案——请看一下。谢谢。
【参考方案1】:
这没有任何意义,因为您从一开始就从未将值存储在会话中。您的其他代码:
$currentValue = (isset($_POST['taskOption'])) ? $_POST['taskOption'] : '';
$_SESSION['taskOption'] = $currentValue;`
将始终在 Session 中设置一个空值,因为它试图查找的值直接发布到 callSecondPage.php
,它永远不会通过此代码。
因此,因为您将值直接发布到第二页,所以在 callSecondPage.php
中您可以简单地写
$taskOption= $_POST['taskOption'];
echo $taskOption;
立即从 POST 数据中获取它。无需会话。
【讨论】:
谢谢,它可以工作,但是当你说我直接在第二页中设置会话中的值时,我不明白。有了这一行: $_SESSION['taskOption'] = $currentValue;` 在第一页我没有在会话中设置值吗?i don't understand when you say that i'm setting the value in session directly in second page
...我也没有,因为我没有这么说。我说您是将表单发布 直接到第二页。 action="callSecondPage.php"
表示只要您提交表单,下一个运行的代码就是 callSecondPage.php 代码。它永远不会回到您的第一页。
With this row: $_SESSION['taskOption'] = $currentValue; in first page am i not setting the value in session
...您正在设置一个值,但它总是将值设置为""
(即空)-我的回答已经解释了原因。请理解$_POST['taskOption']
永远不会存在于您的第一页,因为您将表单提交到第二页,而不是第一页。以上是关于会话中的 PHP 和变量的主要内容,如果未能解决你的问题,请参考以下文章
PhP 5.4 中的 PhP 上传进度不起作用。未设置会话变量