会话中的 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.phppage2.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中的会话变量中

PhP 5.4 中的 PhP 上传进度不起作用。未设置会话变量

session_unset() 是清除和重置 PHP 会话变量的正确方法吗?

会话变量影响 PHP 中其他会话变量的问题

PHP 会话变量的安全性如何?