【问题标题】:Session array resets on submit?会话数组在提交时重置?
【发布时间】:2023-03-12 02:21:01
【问题描述】:

我有 test.php:

<html>
<?php
if (!isset($_SESSION))
{
    echo 'session is not yet set';
    session_start();
    $_SESSION['comments'] = array();
}
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
<input type="text" name="comment">
Click the button!
<input type="submit"/>
</form>
<?php

array_push($_SESSION['comments'], $_GET['comment']);
echo 'Current array count: ' . count($_SESSION['comments']) . '<br>';

foreach($_SESSION['comments'] as $comm)
{
    echo $comm.'<br>';
}

?>
</html>

应该发生的是,在文本框中输入的任何文本都应该被推送到会话数组,但是每次我点击提交时,打印的是我刚刚输入的文本,而不是附加/存储以前的条目。我一直只得到1 作为数组计数。

每次我点击提交时,session is not yet set 总是显示在页面顶部,即使我有 if 条件。

我似乎找不到问题所在?

【问题讨论】:

  • 把 session_start();在页面顶部。

标签: php arrays session


【解决方案1】:

你需要这样做:

<?php
 session_start();
if (!isset($_SESSION))
{
?>

否则,您的 HTML 标记会输出标头,会话将无法正常启动。

【讨论】:

  • 希望我能接受两个答案,所以我会赞成这个。谢谢!
【解决方案2】:

您应该始终在页面顶部开始会话。

session_start(); //start the session

然后我们可以检查会话是否存在。

if(!isset($_SESSION['user'])){
     // your code
    }else{
     // your code
    }

【讨论】:

    【解决方案3】:

    session_start() 不只是开始一个新会话。如果客户端已经有一个会话,它将恢复该会话。 PHP Manual
    如果您正在使用会话,只需在页面顶部添加session_start();,PHP 就会解除启动或恢复会话。

    【讨论】:

    • 我会在几分钟后接受这个答案。谢谢!
    猜你喜欢
    • 2021-02-12
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2012-04-11
    相关资源
    最近更新 更多