2012-05-01 5 views
2

私はレストランでテーブルを予約するためのコードを書いています。しかし、私のクライアントは、レストランメニューからいくつかの項目を選択して戻ってきて、テーブルを予約できるように頼んだ。ユーザーがメニューを選択したくない場合は、そのステップを無視することができます。なぜ私はPHPでセッションを解除できないのですか?

このようにするには、「メニューを選択しますか?」というメッセージが印刷されました。メニューページへのハイパーリンクをクリックします。私はiavascript onClickイベントを使用して、ユーザーがクリックされたかどうかを聞きました。クリックされた場合、私のセッションでユーザーの活動を追跡するために関数のsetessionを呼び出しました。私はページの上に機能を宣言しました。

<script> 
    function setsession(){ 
    <?php $_session['reservation']= TRUE; 
    } 
    </script> 
<form action="" method="post"> 
    <p>Do you want to choose menu? Then <a href="somepage.php" onClick="setsession()">Click here.</a></p> 
<p>rest of my code</p> 
<p>confirm to reserve.</p> 
<a href="javascript:{}" onclick="return Validate();submitform();">Confirm</a> 
</form> 

<?php if(isset($addnew) && !$error) ?> 
<div class="success"> 
<p>sucess</p> 
<?php $_SESSION['reservationprocess'] = FALSE;?> 
</div> 
<?php } ?> 

すべて正常に機能しました。ハイパーリンクのセッション変数を正常にクリックしたとき。そして、私は確認ボタン(上のハイパーリンク)をクリックすると、データをデータベースに正常に保存し、メッセージの成功を引き出し、セッションを解除します。

しかし、問題はどのように、なぜ私のセッションが再び設定されていないのですか?どのくらいセッションを解除しようとしたのですか?失敗しました。私の残りのコードはうまく動作しており、問題はありません。私はそれをテストしました。専門家からの解決策はありますか?前もって感謝します。

+3

ページ上部の 'session_start()'を呼び出しましたか? –

+0

はい。私のサイトはログインシステムを持っています。 – maksbd19

+1

いくつかのこと.. PHPは、JavaScriptがレンダリングされる前にサーバー上で評価されます。 JavaScriptの条件に基づいてphp変数を更新できるかどうかはわかりません。次に、最初の<?phpタグには終了タグがありません。再び、私はそれが重要だとは思わない。 –

答えて

0

もう一度お詫び申し上げます。しかし今回は初心者の質問をするのではなく、自分の質問に答えてください。

まず、質問を簡単に書きます。私はイベントをキャッチしたかったので、セッションが何らかの方法で破壊されない限り、そのイベントを自分のサイトの残りの部分で認識するために、そのイベントをセッションに保存するためにイベントを使用したかったのです。 Al .phpファイルで使用される変数は、値を格納し、サーバー上にあるときにすべての操作を実行します。ブラウザに結果が表示されます。ユーザーが何かを(私の場合はクリックして)実行する間に、どのようにして期待することができ、ブラウザ内にphp変数が存在しない間にPHP変数に値を格納するだけです。だから私たちができることは、JavaScriptの変数に結果を格納するか、サーバーに戻り、値を変数に設定することです。 ajaxを使用してサーバーを呼び出すことは専門家の方法であり、正直言って私はそれをあまり知らない。だから私はすでに知っているものを探す必要があった。もちろん、PHPに基づいています。最後に私はCOOKIEを手に入れました。 イベントをキャッチするには、javascriptを使うことが明らかです。私はjQueryを使用してイベントリスナーを使用し、その内部に私のブラウザのクッキーに値を格納します。私のウェブサイトのクッキーを確認するためにjavascriptとphpの両方を使用しました。 これにはフォールバックがあります。ユーザーがCookieを無効にすると、そのCookieを使用するオプションはありません。

1

これはかなり自然ではありませんが、セッションを破壊するには、事前にsession_start()を呼び出していることを確認する必要があります。

セッションを破棄するには、そのJavaScript関数内で行うことはできません。サーバーへのHTTPリクエストを作成する必要があります。このリクエストは、セッションを削除する 'PHP'関数をトリガする必要があります。

以下の記事のあなたのコメントを読んでから、セッションの1つの変数だけを削除したいと思っています。 (前に何の初期化がされていない場合)

session_start(); 
unset($_SESSION['reservationprocess']); 
+1

PHPがセッションを開始していない場合、どのセッションを破棄するべきかをどのように知っていますか?だから、まずそれを始める必要があります。 –

+1

JavaScriptからPHPSIDクッキーを削除するだけです。 – Pablo

+0

@Pablo、クール私はそれをそのように試みたことはありません。 – Jack

0

セッションを初期化する必要があるでしょうにsession_start()を、そして別の先端がsession_destroy()istead解除を使用することです:多分これを試してみてください。

<?php $_session['reservation']= TRUE;?> 

...あなたのメニューのページへ:あなたがここに何をすべき

+0

ログインシステムが必要なため、セッションをすべて破棄したくありません。この$ _SESSION ['reservationprocess']変数の設定を解除したいだけです。ありがとう。 – maksbd19

+0

すべてのおかげです。私はどこに問題があるのか​​分かった。私はセッションを設定しようとしたときに、サーバー上ではなく、すでに私のブラウザにあります。だから私はどれくらい私はその価値を設定できなかったのですか。私がそれを行うことができる唯一の方法、ajaxによって。私はそれに取り組んでいます。私は私の答えを得るときに私はあなたと共有します。ありがとう – maksbd19

0

は、この呼び出しを移動しています。メニューページがロードされると、このセッションが設定されます。それから、session_destroy()で変数を設定解除することができます。

+0

ありがとう。しかし、私がこのセッションを設定する必要があるのは、ユーザーが自分のリンクをクリックしたときだけです。 – maksbd19

+0

メニューページはサイトの他の部分からアクセスできると言っていますか?このリンクがクリックされたことを示す$ _POST配列に隠しフィールドを追加し、セッション変数を設定することができます。あなたはとにかくそれをやることができます。あなたがそれをやっているように私はそれをしないと言っているだけです。 –

0

なぜあなたは何らかの理由なくスクリプトにセッション変数を持っているのですか?第2に、あなたの変数が割り当てられているページが読み込まれ、それが再び設定される理由かもしれないと思います。変数を初期化または割り当てるときに何らかのチェックをしてください。

関連する問題