0

スクリプトの 1 つでセッション変数を保存しようとしていますが、スクリプトの一部では問題なく動作しているように見えますが、コードの 2 番目の部分で削除されます。すべての行をエコーし​​ましたが、なぜこれが起こっているのかわかりません。また、このコードは以前は問題なく動作していましたが、サーバーを切り替えてから、誤動作しているようです。コードの最初の部分は正常に動作するため、セッションの保存パスではないと思います。これが私のコードの基本的な外部構造です (スペースを節約するために無関係な部分をすべて削除しました):

<!--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

これは簡単なセッション スクリプトです。これに問題がありますか? もしそうなら、phpに問題があります。

<?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 に答える
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() があり、未設定は使用されていませんか?

于 2012-08-24T07:44:07.647 に答える
-1

セッション値は、最初のフォームが送信されたときにのみ設定します(isset($_POST['user_submit']))。スクリプトが2番目のフォーム送信(isset($_POST['record_approve']))を処理しているとき、セッション値は設定されません。したがって、出力はありません。

スクリプトが1つのPHPファイルに含まれている場合でも、相互に排他的な2つのフォーム送信によってトリガーされることをご存知ですか?したがって、セッション値は。の後にのみ使用可能になりますisset($_POST['user_submit']。したがって、最初のフォームを送信した後に2番目のフォームを送信すると、'user_id'セッションの設定を解除して破棄する行をコメントアウトしていれば、セッション変数が作成されます。

それが理にかなっていることを願っています。

于 2012-08-24T06:39:35.410 に答える