購入時に値が消えるカートページの問題

このQ&Aのポイント
  • 購入時に値が消えるカートページについての問題を解決する方法を教えてください。
  • 購入時に値が消えるカートページの原因として考えられる点や、問題を解決するための対策について教えてください。
  • 遷移したページで値が消える問題について、セッションの使い方やフォームの設置方法について詳しく教えてください。
回答を見る
  • ベストアンサー

簡単な買い物カゴ機能を作成しました。

<?php echo "ばなな"; echo '<form action="*****" method="*****">'; echo '<input type="hi**en" name="bnn" value="0">'; echo '<input type="submit" value="カートに入れる">'; echo '</form>'; ?> 買い物カゴ <?php $a = array('ばなな','りんご','魚'); $s = $_POST['bnn']; $k = $a[$s]; $_SESSION['ss'] = $k; echo $_SESSION['ss']; echo '<a href="ss.php">次へ</a>'; ?> 上記でセッションしているはずなのに、違うページを経由してカートページに行くと何故か値が消えてます。どなたか問題点を御教授いただけないでしょうか。。。

  • PHP
  • 回答数3
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>やはり確認ページがいるのでしょうか いやダイレクトにもいけますが、確認ページはあった方がいいです。 ダイレクトで行く場合は、POSTされるデータともとのセッションデータが 競合しますので、POSTデータのチェックが必要です。 以下、入力→カゴ→別ページ→カゴで動作がわかると思います //nyuryoku.php <form action="kago.php" method="post"> <select name="bnn"> <option value="0">ばなな</option> <option value="1">りんご</option> <option value="2">魚</option> </select> <input type="submit" value="カートに入れる"> </form> //kago.php <?PHP session_start(); $a = array('ばなな','りんご','魚'); $s = $_POST['bnn']; print "ポストデータは".$_POST['bnn']."<br>\n"; $k = $a[$s]; if(!empty($k)) $_SESSION['ss'] = $k; print "セッションデータは".$_SESSION['ss']."<br>\n"; ?> <a href="betu.php">別のページ</a> //betu.php <a href="kago.php">カゴに戻る</a>

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

なにか勘違いがあるかと思うんですが 以下のようなフローをとっているか確認してみてください //nyuryoku.php <form action="kakunin.php" method="post"> <select name="bnn"> <option value="0">ばなな</option> <option value="1">りんご</option> <option value="2">魚</option> </select> <input type="submit" value="カートに入れる"> </form> <a href="kago.php">kago</a> //kakunin.php <?PHP session_start(); $a = array('ばなな','りんご','魚'); $s = $_POST['bnn']; print "ポストデータは".$_POST['bnn']."<br>\n"; $k = $a[$s]; $_SESSION['ss'] = $k; print "セッションデータは".$_SESSION['ss']."<br>\n"; ?> <a href="kago.php">kago</a> //kago.php <?PHP session_start(); print "セッションにあるのは"; print $_SESSION['ss']; ?> <a href="nyuryoku.php">nyuryoku</a>

drmada
質問者

補足

回数ありがとうございます。なるほど、やはり確認ページがいるのでしょうか。カートに入れるボタンを押したら、即カートページが表示されるサイトがありますが、あれはPHPじゃなくAJAXか何かですか?

回答No.1

こんにちは。 えーと・・・、 ちゃんと session_start() してますか?

drmada
質問者

補足

しています。他に考えられる原因は何か無いでしょうか??

関連するQ&A

  • 買い物カゴについて

    ------------------------------------------------------------------ 買い物カゴに入れるページ ------------------------------------------------------------------ <?php session_start(); $_SESSION['gazou']=$gazou; if (!is_array($_SESSION['syou'])) { $_SESSION['syou'] = array(); } if (!is_array($_SESSION['kakaku'])) { $_SESSION['kakaku'] = array(); } ?> <body> <?php $id = $_GET['id']; $query = "select * from mo where id= '{$_GET['id']}'"; $result = mysql_query($query); $num_rows=mysql_num_rows($result); while($row = mysql_fetch_array($result)){ echo $syou = '<strong>商品名:</strong>'.$row['syou'].'<br/>'; echo $kakaku ='<strong>価格:</strong> '. $row['kakaku'] . '<br />'; echo'<form method="post" action="kato.php">'; echo'<input type="hidden" name="shou" value='.$row['syou'].'>'; echo'<input type="hidden" name="kakaku" value='.$row['kakaku'].'>'; echo'<input type="submit" name="button" id="button" value="カートに入れる" />'; echo'</form>'; ?> ------------------------------------------------------------------ 買い物カゴページ ------------------------------------------------------------------ <?php session_start(); echo '<strong>現在の買い物カゴの中身</strong></br>'; print_r($_SESSION['syou']) . '<br />'; print_r($_SESSION['kakaku']); ?> </head> <body> <?php mysql_query("SET NAMES eucjpms") or die("can not SET NAMES eucjpms"); $query = "select * from mo"; $result = mysql_query($query); ?> 現在大まかに言うとこんな感じに買い物カゴサイトを作成しています。(DB接続文は念のため削除) しかし、買い物カゴに一回入れて、もう一度違う商品を選ぶと、一回目の情報が消えてしまいます。 この情報を残し、買い物カゴに入れた商品情報を蓄積させるにはどうすれば良いでしょうか?? 概要としましては、買い物カゴページはID事に echo $syou = '<strong>商品名:</strong>'.$row['syou'].'<br/>'; echo $kakaku ='<strong>価格:</strong> '. $row['kakaku'] . '<br />'; の内容が変わるようになっていまして、その値をセッションし、一つの商品だけなら、買い物カゴページに上手く入りますが 二つ目を入れると情報が上書きされ、蓄積されないのです。どうかお力をお貸し下さい。

    • 締切済み
    • PHP
  • 買い物カゴについて

    すいません。レンタルショッピングカートについて 質問です。 現在、商品を登録する以下のようなソースがもらえる タイプのショッピングカートを使っています。 このソースはすでにボタンも付いているのですが 出来ればこのボタンの部分を変えて、普通に HTMLで書いた文字をボタンの代わりにしたいと 考えています。そのようなことは可能でしょうか? <FORM action='http://www.e-sh****.jp/******_order_new.php' method='post' target='_blank' style='margin:0;font-size:10pt'> <BR> <INPUT type='submit' value='カゴに入れる'> <INPUT type='hidden' name='button' value='追加'> <INPUT type='hidden' name='sy' value='*******************'> <INPUT type='hidden' name='sh' value='***'> </FORM> <BR>

    • ベストアンサー
    • HTML
  • セッションにIDを振って値を代入

    PHP初心者です。 PHP4.2.xを使っています。 ショッピングカートで購入した商品データをセッションで維持してカートに追加する機能部分を作っていますがうまくいきません。 コードは以下のとおりです。 【goods.php】 ----------------------------------------------------------- <? session_start(); ?> ■商品1 <form action="cart.php" method="POST"> <input type="hidden" name="id" value="1" /> <input name="num" type="text" /> <INPUT type=submit value="カートに追加"> </form> ■商品1 <form action="cart.php" method="POST"> <input type="hidden" name="id" value="2" /> <input name="num" type="text" /> <INPUT type=submit value="カートに追加"> </form> ----------------------------------------------------------- 【cart.php】 ----------------------------------------------------------- <? session_start(); if($_POST['id'] != ""){ $id = $_POST['id']; $num = $_POST['num']; // セッション名自体をIDで作っています。中身は個数のみです。 $_SESSION["$id"] = $num; } echo "カートに入ってる商品<br />"; for ($i = 0; $i<=100; $i++) { if (!empty($_SESSION["$i"])){ echo $_SESSION["$i"]. "<br>\n"; } } ?> ----------------------------------------------------------- goods.phpのファイルで商品1と商品2を1つずつカートに入れれば cart.phpのページで 1 1 と表示されるはずが、1しか出ません。 $_SESSION["1"] $_SESSION["2"]の中身が表示される予定でしたがそうならず、 そのときPOSTで投げられたIDしか$_SESSION["$id"]に保持されません。 どうすればどんどん商品をカートに追加できますでしょうか? アドバイスのほどどうぞよろしくお願いします!

    • ベストアンサー
    • PHP
  • SESSIONを使用したユーザ登録を作成しています。

    SESSIONを使用したユーザ登録を作成しています。 フォーム→確認ページ→登録完了という流れのページを作成しています。 ソースは下記のとおりになります。(文字数制限のため、ソースを省略しています。) フォームページ /* form.php */ <?php session_start(); ?> <html> <body> <form action="confirm.php" method="POST"> 名前:<input type="text" name="name" value="<?php echo $_SESSION["name"]; ?>" > <input type="hidden" name="regist" value="<?php echo $regist; ?>" /> <input type="submit" name="confirm" value="確認"> </form> </body> </html> 確認ページ /* confirm.php */ <?php session_start(); $regist = $_POST["regist"]; ?> <html> <body> 名前:<?php echo $name; ?> <form action="complete.php" method="post"> <input type="hidden" name="regist" value="<?php echo $regist; ?>" /> <input type="submit" name="submit" value="登録" /> </form> </body> </html> 登録完了ページ /* complete.php */ <?php session_start(); $regist = $_POST["regist"]; $link = DBNAMEなどの設定 $name = htmlspecialchars($_POST["name"]); $query = "INSERT INTO `user` (`name`) VALUES('$name')"; $result = mysql_query($query, $link); if ($result) { $msg = '登録しました。'; } else { $msg = '登録に失敗しました。'; } ?> <html> <body> <?php echo $msg; ?> </body> </html> としています。 ご質問なのですが、フォーム画面にて名前を入力して、確認画面では名前が表示されるのですが、登録完了では空の値になってデータベースに登録されてしまいます。 たぶん確認画面から登録完了画面への受け渡しができていないのはわかるのですが、記述方法がわかりません。 PHPは初心者のため、おわかりの方がいらっしゃいましたら、ご教授いただけないでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでの画像出力について

    すいません。初めてphpを勉強しているのですが下記の表記で画像が出るはずなんですが 上手く出力されません。(ブラウザfirefoxで確認していますが、画像が見つからないマーク?みたいなのが出ています) 当方XAMPPというのを使っておりまして、echo "<img src=\"K3\">";の部分を単純に文字出力 などに変えるとちゃんと文字が出ます。 出力させたい画像名はk3.jpgです。 画像の置き場所はhtdocsフォルダ内(123.php、test10.phpのファイルがある場所)でいいのですよね? どなたか分かる方いましたらよろしくお願いします。 ファイル名 123.php <FORM ACTION="test10.php" METHOD="POST"> <INPUT type="radio" NAME="ss" VALUE="se">レッド <INPUT type="radio" NAME="ss" VALUE="ch">ブルー <INPUT type="radio" NAME="ss" VALUE="pi" CHECKED>ピンク <INPUT type="submit" VALUE="並び替える"> </FORM> ファイル名 test10.php <?php $_POST['ss']; $a = $_POST['ss']; if( $a == pi ){ echo "<img src=\"K3\">"; } ?>

    • ベストアンサー
    • PHP
  • 買い物カゴとHTML

    こんにちは。質問があります。 当方、現在、商品を登録する以下のようなソースがもらえる タイプのショッピングカートを使っています。 またこのソースにはボタンがすでに付属されています。(ソースを貼るとボタンもあります) 現在HPビルダー9にてHPを作成しているのですが このボタンの代わりにHPビルダーで書いた文字を クリックするとこのボタンの代わりになるように (リンク先に移行し買い物カゴに商品が入るように)したいと考えています。どのようにすればいいのでしょうか? <FORM action='http://www.e-shops2.jp/kago2/****_order_new.php' method='post' target='_blank' style='margin:0;font-size:10pt'> <INPUT type='submit' value='カゴに入れる'> <INPUT type='hidden' name='button' value='追加'> <INPUT type='hidden' name='sy' value='*********'> <INPUT type='hidden' name='sh' value='***'> </FORM> <BR>

  • php $_SESSIONで値が消える。

    いつもお世話になり誠にありがとうございます。 標記の件。 インプット画面ー>確認画面ー>戻るー>インプット画面 インプット画面に戻った時、どうしても最初のインプット画面で打った内容が消えてしまいます。 プログラムを診て、誤りを指摘して頂けないでしょうか? どうぞよろしくお願い致します。           記 <?php session_start(); $mode = 'input'; if( isset($_POST['back']) && $_POST['back'] ){ //何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ $_SESSION['name'] = $_POST['name']; $_SESSION['email'] = $_POST['email']; $_SESSION['category']= $_POST['category']; $_SESSION['message'] = $_POST['message']; $mode = 'confirm'; } else if( isset($_POST['send']) && $_POST['send'] ){ $mode = 'send'; } else { $_SESSION['name'] =""; $_SESSION['email'] =""; $_SESSION['category']=""; $_SESSION['message'] =""; } ?> <!DOCTYPE html> <html lang="ja"> <head> </head> <body> <div class="v_line_fix"> <h1>Blog K・T</h1> <h2><a href="index.html">トップページ</a></h2> <?php if( $mode=='input'){ ?> <form method=post> お名前(ニックネーム)<br> <input type="text" name="name" value="<?php echo $_SESSION['name'] ?>"><br> Eメール<br> <input type="email" name="email" value="<?php echo $_SESSION['email'] ?>"><br> カテゴリー<br> <input type="text" name="category" value="<?php echo $_SESSION['category'] ?>"><br> 本文<br> <textarea style="font-size:1.5em;" cols="30" rows="80" name="message"><?php echo $_SESSION['message'] ?></textarea><br> <input type="submit" name="confirm" value="確認" /> </form> <?php }else if( $mode=='confirm'){ ?> <!--確認画面--> <form method="post"> <?php echo $_SESSION['name']?><br> <?php echo $_SESSION['email']?><br> <?php echo $_SESSION['category']?><br> <br> <?php echo nl2br($_SESSION['message'])?><br> <input type="submit" name="back" value="戻る"/> <input type="submit" name="send" value="送信"/> } </form> <?php } else { ?> <!--完了画面--> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP
  • postのタイムラグ

    以下のソースでPOSTの値が取れないときがあるので困っています。 具体的にはページを表示してから30秒程度待ってからの クリックじゃないとPOSTの値が取れません。 GETの場合はページ表示後すぐにボタンをクリックしても大丈夫でした。 原因が分からず途方に暮れています。 お知恵をお貸しください。 PHP Version 5.2.3 <?php $P_data = $_POST["pg"]; print("POST=>".$P_data."<BR>"); $G_data = $_GET["pg"]; print("GET=>".$G_data."<BR>"); print <<< DOC_END <html> <head> </head> <body> DOC_END; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=1>"; echo"<input type=submit value=あ>"; echo"</form>"; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=2>"; echo"<input type=submit value=い>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=3>"; echo"<input type=submit value=う>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=4>"; echo"<input type=submit value=え>"; echo"</form>"; print <<< END </body> </html> END; ?>

    • 締切済み
    • PHP
  • if文での条件分岐後の出力内容を他のページへ移動させたい

    お世話になります。現在ショッピングカートを製作しているのですが、b.phpで条件分岐をし、商品名、金額を表示させるのですが、表示させた内容をどのようにしたら、c.phpやd.phpに移動させることが出来るのでしょうか?ちなみにセッションを利用しています。 a.php(選択画面)→b.php(商品名・金額を表示)→c.php(送付先入力)→d.php(送付先入力確認)→e.php(メール送信) a.php ------------------------------------------------- <form name="form1" method="post" action="b.php"> <input type="radio" name="a" value="1">ラーメン <input type="radio" name="a" value="2">ソバ <input type="radio" name="b" value="1">うどん <input type="radio" name="b" value="2">パスタ <input type="submit" name="Submit" value="送信"> </form> ------------------------------------------------- b.php <form name="form1" method="post" action="c.php"> <?php session start(); $_SESSION['php']=$_POST['a']; $_SESSION['p']=$_POST['b']; ?> <?php if($_SESSION['php']==1 && $_SESSION['p']==1){ print "ラーメン&うどん" } 省略 ?> <?php if($_SESSION['php']==1 && $_SESSION['p']==1){ print "1000円" 省略 <input type="submit" name="Submit" value="送信"> </form> ------------------------------------------------- 上記のラーメン&うどん、と1000円をc.phpへ移動させるにはどのようにすればよいでしょうか? おわかりになられる方ご教授よろしくお願いします。

    • 締切済み
    • PHP
  • 特定の場合にのみ半額にしたい。

    現在、ショッピングカート作りの練習をしています。 そこで質問なのですが、赤のみを選択したら1000を表示、青のみを選択したら2000を表示。ここまでは問題ないのですが、赤と青を両方選択した場合の合計を赤はそのまま1000、青を1000と半額に。合計を2000としたいのですが、おわかりになられる方がいましたら、お教えいただきたいと思います。よろしくお願いいたします。なお、sessionを利用しております。 OS WinXP PHP Ver 4.3.10 <form name="form1" method="post" action="a.php"> <input type="radio" name="a" value="1000">赤 <input type="radio" name="b" value="2000">青 <input type="submit" name="Submit" value="次へ"> </form> <<a.php>> <?php session_start(); $_SESSION['php']=$_POST['a']; $_SESSION['ph']=$_POST['b']; ?>

    • 締切済み
    • PHP

専門家に質問してみよう