我的$ _SESSION变量不会保持其值。任何想法为什么?

时间:2010-07-30 18:31:37

标签: php

我希望它增加和减少$_SESSION['selection']中的值 下一个表单上的Mousedown会导致:“会话为1 ” 上一个表单中的Mousedown会导致“会话为-1 ”。

以下是代码:

  <?php

    if (isset($_POST['next'])) {
      displaynext();
    }
    else if (isset($_POST['previous'])) {
      displayprevious();
    }
    else {
      session_start();
      echo "session started";
      $_SESSION['selection'] = 1;
    }

    function displaynext() {
      $_SESSION['selection'] = $_SESSION['selection'] + 1;
      echo "The session is $_SESSION[selection]";
    }

    function displayprevious() {
      if ($_SESSION['selection'] != 1) {
        $_SESSION['selection'] = $_SESSION['selection'] - 1;
      }
      echo "The session is $_SESSION[selection]";
    }

    ?>

    <form action="<?=$_SERVER['PHP_SELF'];?>" method="post">
      <input type="submit" name="previous" value="Previous">
    </form>

    <form action="<?=$_SERVER['PHP_SELF'];?>" method="post">
      <input type="submit" name="next" value="Next">
    </form>

4 个答案:

答案 0 :(得分:5)

session_start()调用放在文件的开头;在<?php打开标记之后。您还需要在计划使用会话的每个脚本上执行此操作。

顺便说一句,而不是写作:

$_SESSION['selection'] = $_SESSION['selection']-1;
$_SESSION['selection'] = $_SESSION['selection']+1;

您可以使用

$_SESSION['selection']--;
$_SESSION['selection']++;

阅读:Increment/Decrement operators

答案 1 :(得分:1)

确保您在使用会话的每个页面上使用session_start()

答案 2 :(得分:1)

在任何条件之外,将session_start调用放到代码的开头。

需要在您正在使用会话的每个脚本中调用

session_start,而不仅仅是在开头(即第一个页面加载)。

答案 3 :(得分:1)

在页面之间移动时,您不会调用session_start。将调用移至if语句之前,如下所示:

session_start();
if(isset($_POST['next'])) {
  displaynext();
} else if(isset($_POST['previous'])) {
  displayprevious();
} else {
  echo "session started";

  $_SESSION['selection'] = 1;
}