PHPについて質問です。

SESSIONに連想配列で値を入れているのですが、一杯入っているデータから選択した値を削除したいと考えています。
具体的には、現在ショッピングカートのページを作成しているのですが、確認画面のページで購入した商品でいらなくなった商品を一商品ずつ削除できるようにしたいと考えています。
$_SESSION["cart"]には商品を購入するのボタンを押すと、連想配列で管理番号と購入個数が入るようになっています。

$kanri_no = $_POST["kanri_no"];
$_SESSION["cart"]["$kanri_no"] = $_POST["kosuu"];

$_SESSION["cart"]に入っている値を、確認ページで商品を削除するのボタンを押すと商品の管理番号を元に削除したいと考えています。
管理番号は<input type="hidden" name="kanri" value="各管理番号が入っています。"> 
の様に、hiddenのvalue値に入っている管理番号を元に照合したいと思っています。
しかし、やり方がわかりません。。
$_SESSION["cart"] から $_SESSION["cart"]["$kanri_no"] を個別に削除するにはどうすればいいでしょうか?
$_SESSION["cart"] - ($_POST["kanri"]の管理番号と個数) をどうしてもしたいです。。
お手数をおかけしますが、わかるかたおりましたらご回答よろしくお願いいたします。


回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/03/31 21:25:49
  • 終了:2010/04/02 00:31:53

ベストアンサー

id:rouge_2008 No.4

rouge_2008回答回数594ベストアンサー獲得回数3512010/04/02 00:27:17

ポイント100pt

以下のようにして、個数が0個以外の時に出力するようにしてみてください。

foreach ($_SESSION["cart"] as $kanri_no=>$kosuu){
	if($kosuu != 0) { // ここを追加
		echo '<tr><td><FORM method="POST" action="kakunin4.php">';

次に、分岐処理の終わりを以下の部分に記述します。

echo '<td><input type="submit" name="delete" value="削除する"></td></form>';

echo '</tr>';}} // ここに「}」を一つ追加

※この場合は、購入商品が全く無くても項目名などテーブル自体は表示されます。

id:aiomock

ご回答ありがとうございます。無事解決できました。

2010/04/02 00:31:21

その他の回答(3件)

id:code_tk No.1

code_tk回答回数77ベストアンサー獲得回数112010/03/31 21:47:13

ポイント23pt

普通にunsetを呼び出せばいいと思いますが

http://php.s3.to/man/function.session-unset.html

こんな感じでしょうか

unset($_SESSION["cart"]["$kanri_no"]);

id:aiomock

ご回答ありがとうございます。

2010/04/01 22:19:34
id:anoncom No.2

あのん回答回数16ベストアンサー獲得回数22010/03/31 22:44:41

ポイント23pt

unset() 関数でその配列のキーと値を開放することで実現できます。

具体的には

unset( $_SESSION["cart"][$_POST["kanri"]] );

とすることでその管理番号をキーとする値と配列が除去されます。

それ以外のものは除去されません。

詳しくはこちらをご覧ください。

http://jp.php.net/unset

id:aiomock

ご回答ありがとうございます。

2010/04/01 22:19:50
id:p332 No.3

p332回答回数36ベストアンサー獲得回数32010/03/31 22:48:43

ポイント22pt

unsetを使えば消せます。

unset($_SESSION["cart"][$kanri_no])

id:aiomock

ご回答ありがとうございます。

2010/04/01 22:20:02
id:rouge_2008 No.4

rouge_2008回答回数594ベストアンサー獲得回数3512010/04/02 00:27:17ここでベストアンサー

ポイント100pt

以下のようにして、個数が0個以外の時に出力するようにしてみてください。

foreach ($_SESSION["cart"] as $kanri_no=>$kosuu){
	if($kosuu != 0) { // ここを追加
		echo '<tr><td><FORM method="POST" action="kakunin4.php">';

次に、分岐処理の終わりを以下の部分に記述します。

echo '<td><input type="submit" name="delete" value="削除する"></td></form>';

echo '</tr>';}} // ここに「}」を一つ追加

※この場合は、購入商品が全く無くても項目名などテーブル自体は表示されます。

id:aiomock

ご回答ありがとうございます。無事解決できました。

2010/04/02 00:31:21
  • id:aiomock
    削除実行してみたのですが

    http://www.aiomock2008.sakura.ne.jp/TEST/sakujo.jpg

    一回目を削除すると上記のような空白の行ができてしまいます。これにはどのように対処すればよろしいでしょうか。
    大変お手数をおかけしますがわかるかたおりましたらよろしくお願いいたします。

    現在テストとして作成しているページは以下になります。

    http://www.aiomock2008.sakura.ne.jp/TEST/test2.php
  • id:aiomock
    コードは以下になっています。

    <?


    session_start();




    echo '<table border="1" bordercolor="black" cellspacing="0" cellpadding="3"><tbody>';
    echo '<tr><td bgcolor="yellow">写真</td><td bgcolor="yellow">タイトル</td><td bgcolor="yellow">値段</td>
    <td bgcolor="yellow">個数</td><td bgcolor="yellow">金額</td><td bgcolor="yellow">削除</td>';


    require "database_connect.php";


    $kanri_no = $_POST["kanri_no"];

    $_SESSION["cart"]["$kanri_no"] = $_POST["kosuu"];


    foreach ($_SESSION["cart"] as $kanri_no=>$kosuu){

    echo '<tr><td><FORM method="POST" action="kakunin4.php">';

    //写真
    require "database_connect.php";

    $sql=mysql_query("select * from TEST WHERE PRODUCT_NAME = '".$kanri_no."' ");

    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) { echo $row["PICTURE"]; }

    //タイトル

    echo '</td><td>'.$kanri_no.'</td>';

    //値段

    echo '<td><input type="hidden" name="kanri" value="'.$kanri_no.'">';

    require "database_connect.php";

    $sql=mysql_query("select * from TEST WHERE PRODUCT_NAME = '".$kanri_no."' ");

    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) { echo $row["PRICE"]; $price=$row["PRICE"]; }



    echo '</td>';

    //個数
    echo '<td><select name="kosuu">
    <option selected>'.$kosuu.'</option>
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
    <option>6</option>
    <option>7</option>
    <option>8</option>
    <option>9</option></select>
    </td>';

    //金額

    echo '<td>';

    echo $price*$kosuu;

    echo '</td>';

    //削除ボタン

    echo '<td><input type="submit" name="delete" value="削除する"></td></form>';


    echo '</tr>';}
    echo '</tbody></table><br><br> 

    <table height="40" border="0" valign="center"><tr><td valign="center">  
    <a href="http://www.aiomock2008.sakura.ne.jp/TEST/test2.php">引き続き商品を購入する</a></td><td valign="center"><FORM method="POST" action="kakunin2.php"><br>  <input type="submit" name="kara" value="カートを空にする"></form></td><td valign="center"><FORM method="POST" action="kakunin3.php"><br>  <input type="submit" name="kounyuu" value="購入する" onClick="return confirm(\'本当にボタンを押しますか?\')"></form></td></tr></table>';


    ?>
  • id:aiomock
    削除ボタンを押したときに移動した後の処理は以下のようにしました。

    <?


    if(isset($_POST["delete"]))
    {

    session_start();

    unset( $_SESSION["cart"][$_POST["kanri"]] );
    }


    header('Location:kakunin.php');





    ?>

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

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

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

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