人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpについてセッション管理の勉強中です。
セッションを利用したショッピングカートを作っています。

カートに商品を追加し、さらに商品の追加をする際に前のデータを上書きし新たに追加した商品の小差だけが表示される状態です。

どこを直したらいいのでしうか。
よろしくお願い致します。


session_start();

if(!isset($_SESSION["desgin"])){
$_SESSION['desgin']= $desgin ;
}else{
$flg = false;
if(!$flg) {
$_SESSION["desgin"] = $desgin;
}
}
echo "<p>".$_SESSION["desgin"];

●質問者: kasai-de_eb
●カテゴリ:インターネット ウェブ制作
✍キーワード:ECHO PHP けが カート ショッピング
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● ホーエンハイム
●39ポイント ベストアンサー

質問文でよく分からない部分がありますので、教えて下さい。

  1. 「さらに商品の追加をする際に前のデータを上書きし新たに追加した商品の小差だけが表示される」の「小差」とはどういう意味でしょうか?
  2. 変数 $flg はどのような目的で使っているのでしょうか? ご質問のソースですと、下記の部分は常に実行されるので if 文の意味がありません。
$flg = false;
if(!$flg) {
$_SESSION["desgin"] = $desgin;
}

以上、よろしくお願いします。

http://q.hatena.ne.jp/

◎質問者からの返答

1.すみません。入力みすでした。

さらに商品の追加をすると、前のデータを上書きし新たに追加した商品の(詳細)データだけが表示される が正しいです。

2.参考書にかいたあったいらない部分を削って作成をしていましたが、$flg は削っていいのかがわからずこのしたあるだけです。


2 ● ko8820
●1ポイント

http://joho.boo.jp/memo/writer.cgi?mode=detail&no=51

セッションに配列形式で入れてみては?


3 ● ホーエンハイム
●25ポイント

2.参考書にかいたあったいらない部分を削って作成をしていましたが、$flg は削っていいのかがわからずこのしたあるだけです。

申し訳ありませんが、スクリプトの全体を教えていただかないと何とも言えません。


質問文にあるスクリプトを見る限り、if文で条件分岐している意味がなく、常に

$_SESSION["desgin"] = $desgin;

が実行されます。


http://q.hatena.ne.jp/

◎質問者からの返答

お返事ありがとうございます。

詳細の選択画面

<form method="post" action="a.php">

<select name="desgin" id="desgin">

<option value="090001">090001</option>

<option value="090002">090002</option>

</select>

<input name="" type="submit" value="送信">

</form>

上記で選んだものを買い物かごへ入れる動作をしたいのです。

買い物かご側は

$sql = "select * from item WHERE item1 = '" . mysql_real_escape_string($_POST['desgin']) . "'" ;

$result = mysql_query($sql) ;

$row = mysql_fetch_assoc($result) ;

$desgin = $_POST['desgin'] ;

session_start();

if(!isset($_SESSION["desgin"])){

$_SESSION["desgin"][]=$desgin;

}

echo "

".$_SESSION["desgin"];

この状態だと、1個目に入れた内容が上書きされ、新たに追加した商品の(詳細)データだけが表示される状態です。


4 ●
●25ポイント

んー、ちょっと理解できていないのですが、

1つめの商品をカートに入れる。

2つ目の商品をカートに入れる。

で、カートの中身が、

1つめと2つめの両方入っているという風にするならば、

$_SESSION["desgin"][]=$desgin;

と流れを作ればできます。

session_start();

$_SESSION['desgin'][]= $desgin ;

foreach($_SESSION["design"] as $val) {
echo "<p>".$val."</p>";
}

ifが無いのは、必ず新しく追加されるからなのですが、

既に入っているものと同じものが来た場合の処理など考えると、

ハッシュの中身を検索する処理が必要です。

現状では、同じ変数

$_SESSION["design"]

に上書きしてしまっているので、一つだけになります。

もうちょっと情報があると、お伝えできることも変わるかと思います。

とりあえず、どうしたいのか。ですかね。

http://q.hatena.ne.jp/1278145397

◎質問者からの返答

有難うございます。

session_start();

$_SESSION['desgin'][]= $desgin ;

foreach($_SESSION["design"] as $val) {

echo "

".$val."

";

}

を代入すると「$_SESSION['desgin'][]= $desgin ;」のラインにエラーができます。

下記に分を添付いたします。

お手数ですが、みて頂けるとありがたいです。


詳細の選択画面

<form method="post" action="a.php">

<select name="desgin" id="desgin">

<option value="090001">090001</option>

<option value="090002">090002</option>

</select>

<input name="" type="submit" value="送信">

</form>

上記で選んだものを買い物かごへ入れる動作をしたいのです。

買い物かご側は

$sql = "select * from item WHERE item1 = '" . mysql_real_escape_string($_POST['desgin']) . "'" ;

$result = mysql_query($sql) ;

$row = mysql_fetch_assoc($result) ;

$desgin = $_POST['desgin'] ;

session_start();

if(!isset($_SESSION["desgin"])){

$_SESSION["desgin"][]=$desgin;

}

echo "

".$_SESSION["desgin"];

この状態だと、1個目に入れた内容が上書きされ、新たに追加した商品の(詳細)データだけが表示される状態です。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ