0

我试图在我的一个脚本中保存一个会话变量,它似乎对脚本的一部分工作正常,但是,它在我的代码的第二部分中被删除了。我已经回应了每一行,但无法弄清楚为什么会发生这种情况。此外,这段代码之前运行良好,但自从我切换服务器后,它似乎出现了故障。我不认为这是会话保存路径,因为代码的第一部分工作正常。这是我的代码的基本外部结构(我删除了所有不相关的部分以节省空间):

<!--raw-->
<?php 

session_start(); 
include 'config.php'; 

?>
<html>
<body>

<form id="driver_record" method="post" action="<?php echo htmlentities($PHP_SELF); ?>">
Enter Driver Number: <input type="text" name="driver" />
<input type="submit" value="Submit" name="user_submit" />
</form>

<?php

if(isset($_POST['user_submit']))
{
if(username_exists($_POST['driver'])){

$ulog = $_POST['driver'];
$_SESSION['user_id'] = $ulog;
echo $_SESSION['user_id']; //Session echos fine here
$tablename_cc = "cc_".$ulog;
$tablename_db = "db_".$ulog;
$tablename_misc = "misc_".$ulog;
$tablename_cash = "cash_".$ulog;

?>

<form id="expenses_update" method="post" action="<?php echo htmlentities($PHP_SELF); ?>">
<input type="submit" value="Approve" name="record_approve" />

<?php
}
}
?>

<?php

    if(isset($_POST['record_approve']))
    {
        echo $_SESSION['user_id']; //Session does not echo here
        $ulog = $_SESSION['user_id'];
        $tablename_cc = "cc_".$ulog;
        $tablename_db = "db_".$ulog;
        $tablename_misc = "misc_".$ulog;
        $tablename_cash = "cash_".$ulog;

    }

    //unset($_SESSION['user_id']);
    //session_destroy();
?>

</body>
</html>
<!--/raw-->

编辑:我已经注释掉了 unset 语句,并且还尝试将它们放在 if 语句中,而不改变代码的行为。

4

4 回答 4

0

每次运行代码时,您都在调用 unset($_SESSION['user_id']); 这是因为它不在你的 IF 语句中,你在错误的地方有一个花括号。

<?php

    if(isset($_POST['record_approve']))
    {
        echo $_SESSION['user_id']; //Session does not echo here
        $ulog = $_SESSION['user_id'];
        $tablename_cc = "cc_".$ulog;
        $tablename_db = "db_".$ulog;
        $tablename_misc = "misc_".$ulog;
        $tablename_cash = "cash_".$ulog;

    unset($_SESSION['user_id']);
    session_destroy();

    } //moved curly brace here

?>

编辑:代码对我来说运行良好,我不得不注释掉包含行和使用的函数,错误必须在 config.php 内。您在该文件的顶部有一个 session_start() 并且没有使用 unsets 吗?

于 2012-08-24T07:44:07.647 回答
0

这是一个简单的会话脚本,你有这个问题吗?如果是这样,那么 php.ini 有问题。

<?php
session_start();

$_SESSION['testing'] = "boo";
echo "Session 1=" . $_SESSION['testing'];
?>

<form action="session1.php" method="post">
<input type="text" name="input"
<input type="submit" />
</form>
<pre>

<?php

if (isset($_POST['input']))
{
   print_r ($_SESSION);
   print_r ($_POST);
}

?>
于 2012-08-25T10:58:38.880 回答
0

似乎我或这里的任何其他人都无法找到关于正在发生的事情的合乎逻辑的解决方案。我决定简单地删除会话变量并包含一个“隐藏”输入字段,该字段仅通过 POST 变量发送变量。这似乎解决了我所有的问题,而不必担心会话变量的行为。

于 2012-08-25T22:53:54.737 回答
-1

只有在提交第一个表单时才设置会话值 ( isset($_POST['user_submit']))。当脚本处理第二个表单提交 ( isset($_POST['record_approve'])) 时,没有设置会话值。因此没有输出。

您确实意识到,即使脚本在一个 PHP 文件中,它也会被两个互斥的表单提交触发,对吧?所以会话值只有在isset($_POST['user_submit']. 因此,如果您在提交第一个表单后提交第二个表单,您将拥有一个会话变量'user_id',前提是您已注释掉取消设置和破坏会话的行。

希望这是有道理的。

于 2012-08-24T06:39:35.410 回答