PHPのセッションに関して

http://riri.heteml.jp/mo/
言葉では伝えにくいのでサイトを提示します。まず服を選んでいただき、カートに入れてください。次にバックして違う服を選らんで下さい。この際、二種類の商品が入っていて欲しいのですが、上書きされてしまいます。
ソースは
a.php
echo $syou= '<strong>商品名:</strong>'.$row['syou'].'<br/>';
echo $kakaku='<strong>価格:</strong> '. $row['kakaku'] . '<br />';
これでDBから商品を探し出し、
<?php
session_start();
$_SESSION['gazou']=$gazou;
$_SESSION['syou']=$syou;
$_SESSION['kakaku']=$kakaku;
?>
セッション生成し、
kato.php
echo '<strong>現在の買い物カゴの中身</strong></br>';
echo $_SESSION['syou'];
echo $_SESSION['kakaku'];
このように出力しています。どう改変したら良いか分からずアドバイスをお願いしたいと思います。よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/10/25 22:21:59
  • 終了:2011/11/01 22:25:03

回答(1件)

id:tdoi No.1

tdoi回答回数174ベストアンサー獲得回数752011/10/25 22:37:36

まず状況を把握してください。

1.初めてアクセス ($_SESSION['syou']は空);

2.片方を選んでa.phpにアクセス ($_SESSION['syou'] = 'シャツ1')

  ※意図とは違う気がしますが、この時点でセッションに格納されてます。

3.カートに入れるを押して、内容を表示($_SESSION['syou'] = 'シャツ1')

4.ブラウザの戻るボタンででも最初の画面にアクセス($_SESSION['syou'] = 'シャツ1')

5.別の方を選んでa.phpにアクセス ($_SESSION['syou'] = 'ぼろしゃつ')

※2と同様に意図は違うと思います。また、この時点で2で保存したものを書きつぶしています。

この状況をまず理解してください。

では、何故こうなるか?

$_SESSION['syou']=$syou;

と書いているからです。

恐らく期待するのは、5の時点で($_SESSION['syou'] = 'シャツ1', 'ぼろしゃつ')となっていると期待していると思います。それであれば、

if (isset($_SESSION['syou']) && is_array($_SESSION['syou'])) {
    $_SESSION['syou'][] = $syou;
} else {
    $_SESSION['syou'] = array($syou);
}

また、カートの中の表示は、

print_r ($_SESSION['syou']);

とでも書けばいいでしょう。

もっと言いたいことはたくさんありますが、まずはここまで理解してください。

  • id:rogotaro
    御指摘頂いたとおりコードを変更しましたが、まだ上書きされてしまいます。。
  • id:tdoi
    サンプルのサイトは書き変わってます?
  • id:rogotaro
    はい。カートページへの初期アクセス時、arrayと表示されましたが、コレが原因でしょうか??
  • id:tdoi
    だから、
    print_r($_SESSION['syou']);
    にしてくださいと書いたのですが・・・。
  • id:rogotaro
    カートページも御指摘の通り記述しました。
  • id:tdoi
    動きからするとですが、以下を確認してください。

    if (isset($_SESSION['syou']) && is_array($_SESSION['syou'])) {
    // ここがおかしいです。$_SESSION['syou'] = $syou; になっていないか確認してください。[]が大事です。
    $_SESSION['syou'][] = $syou;
    } else {
    // この時点で、$syouに入れたい値が入っていない気がします。
    $_SESSION['syou'] = array($syou);
    }
  • id:rogotaro
    夜遅くまで付き合っていただいたのに寝てしまい返信が遅れてしまいました。
    やはりそのままコピーしたので、[]は付いていました。よろしくお願いします。[]をつけるのは、その部分だけで良いですか??
  • id:rogotaro
    ちなみに
    [0]=""
    [1]=""
    [2]=""
    のような処理はしていないのですが大丈夫でしょうか??
  • id:tdoi
    その他で、

    $_SESSION['syou'] = 何か

    としている場所はないですか?
  • id:rogotaro
    探してみましたが、ない状態です。
  • id:tdoi
    挙動からすれば、どこかでそれに類することをしてしまっているはずです。
    コードを追って見つけられないなら、色々なところに、
    print_r ($_SESSION['syou']);
    とでも書いて、Array([0] => '', ・・・)と表示されなくなるタイミングを特定してください。
    それ以前に、書いたように$syouに正しい値が来ていないようですけどね。

    これ以上は今の情報だけからは何も言えません。
  • id:rogotaro
    ちなみにですが、アドバイスをお願いしたいと思います。今回はセッションを主体でカートを作成しようと思いましたが、これはポピュラーなやり方でしょうか??
    もしかしたらDBに登録した方がやりやすいのかなとも考えています。
  • id:tdoi
    カートの保存の方式は永続化の範囲やシステム全体との関わりなので、一概には言えません。
    ただ、失礼ながら今のスキルでしたら、どちらを採用しても難しいと思います。
  • id:rogotaro
    難しいという事は提示していただいたコード以外に、何かしなければならない事が有るという事でしょうか?(カートへの保存機能)もし宜しければ、コードまでとは言いませんが、しなければならない工程を教えていただけないでしょうか?よろしくお願いします。
  • id:TransFreeBSD
    まだ、配列や制御構文、セッション管理に慣れておらず、勘違いされている部分も多々あるように感じます。
    書籍でもWebでもいいので、チュートリアルを実際にやり、自分で変更したり組み合わせたりして、何が出来て何が出来ないか、どう使うのか試行錯誤してみた方が良いと思います。
    http://www.phpbook.jp/tutorial/session/
    http://www.standpower.com/php_session.html
    (配列は別質問で)

    あと、サーバとブラウザのやり取りを紙に実際に書いて、それをどんどん細かく、どこからデータが発生して、どう伝わるのか、具体的内容に落とし込んで見てください。
    わかってるつもりでも、実際に具体的に書こうとすると、矛盾や問題点がはっきりして整理され、何が必要かわかってきます。

    最後に。
    カート機能で何をされるつもりですか?
    演習なら機能実装だけで良いですが、実際の商売となると、(バーチャルでも)値段など商品管理、商品の受け渡しや請求、誤発注や誤請求の防止や実際に発生した場合の対処等、カートへの出し入れ以外に、ユーザーと様々なやり取りが発生します。
    すなわち、ユーザーに付随する情報としてそれらも管理するコードが必要です。結合度合もありますが、全体として一つのシステムとなるわけです。
    そういった事に対し、どのような見通しなのですか?
  • id:rogotaro
    機能を楽しんでもらえるサイトになれば良いです。商売にするにしても、最初は不確かなままやると思います。「ハッキングされる、情報漏えいした際多大な影響になる」サイトになる頃には、「儲かる」サイトと化してますから、その頃にはシステムは外注だと思います。そんな簡単に「儲かるサイト」にはならないでしょうし、とにかく最初は機能さえ動いて、楽しんでもらえるサイトが出来ればそれで良いです。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません