###前提・実現したいこと
PHP初心者のため、わかりづらい点もあるかと思いますが、ご容赦ください。
[数量入力ページ]で入力した情報を[商品情報編集ページ]にて削除を行えるようにしたいと考えております。
しかし現状、商品を追加したその都度の情報がキーとなっており、入力された商品が全て削除されてしまいます。
個別に商品情報を格納し、個別に商品の削除を行うにはどのように実装するべきでしょうか。
現状と修正後の例といたしましては、
【現状】
[数量入力ページ]
商品1 → 50個
商品2 → 100個
商品3 → 200個
と入力を行い、[お見積り結果ページ]へ遷移します。
[お見積り結果ページ]
商品情報変更ボタンより[商品情報編集ページ]へ遷移します。
[商品情報編集ページ]
商品1の削除ボタンをクリック。商品1・商品2・商品3の情報が全て削除されます。
【修正後】
〜お見積り結果ページまでの流れは同様です。〜
[商品情報編集ページ]
商品1の削除ボタンをクリック。商品1のみ削除されます。
###現状のソース
[数量入力ページ(estimate_input.php)]
php
1<form action="" method="post" name=""> 2 <div class="item_wrap"> 3 <div class="item"> 4 <label>商品1</label> 5 <input id="item1" type="text" name="item1" value="<?php print $item1; ?>">個 6 </div> 7 <div class="item"> 8 <label>商品2</label> 9 <input id="item2" type="text" name="item2" value="<?php print $item2; ?>">個 10 </div> 11 <div class="item"> 12 <label>商品3</label> 13 <input id="item3" type="text" name="item3" value="<?php print $item3; ?>">個 14 </div> 15 </div> 16 17<input type="hidden" name="edit" value="<?php print $edit; ?>"> 18<input type="hidden" name="key" value="<?php print $key; ?>"> 19<p class="submit"><input type="submit" class="estimateSubmit btn-estimate" name="form-add" onClick="check()" value="お見積り結果"></p> 20</form>
[入力された情報をセッションへ格納するための処理(post.php)]
<?php //変更時のみ $edit=$_POST['edit']; $key=$_POST['key']; //見積もり商品追加フォーム入力時のpost $item1=htmlspecialchars($_POST['item1'],ENT_QUOTES); $item2=htmlspecialchars($_POST['item2'],ENT_QUOTES); $item3=htmlspecialchars($_POST['item3'],ENT_QUOTES); //見積もりフォーム中の挙動 if($_REQUEST['act']==""){ //見積もりフォームエラー時は商品をセッション保存せずに if($check=="err"){ //何もしない //見積もりフォームにエラーが無い時だけセッションに保存する }elseif($check=='ok'){ //金額計算 if( (count($_SESSION['order'])>1)&&(in_array($_POST['order_id'],get_last_value($_SESSION['order']))) ){ //リロード対策同じIDが被った時はなにもしない }elseif( (count($_SESSION['order'])==1)&&(in_array($_POST['order_id'],get_first_value($_SESSION['order']))) ){ //リロード対策同じIDが被った時はなにもしない }else{ if($edit=='edit'){ //編集時は更新 $_SESSION['order'][$key]=array( item1 => $item1, item2 => $item2, item3 => $item3, ); }else{ $_SESSION['order'][]=array(order_id => $_POST['order_id'], item1 => $item1, item2 => $item2, item3 => $item3, ); $request='result'; } } }elseif($check=='default'){ //何もしない } } ?>
[商品情報編集ページ(estimate_change.php)]
php
1<?php 2session_start(); 3?> 4 5<?php 6//1回の注文テーブルを順番に表示 7foreach ($_SESSION['order'] as $key => $value){ 8 $array = $value; 9 10 //テーブル内の項目を順番に表示 11 foreach ($array as $item => $number){ 12 13 if($item=='item1'){$item_name='商品1'; $item_size='サイズ1'; $item_img='商品画像URL';} 14 if($item=='item2'){$item_name='商品2'; $item_size='サイズ2'; $item_img='商品画像URL';} 15 if($item=='item3'){$item_name='商品3'; $item_size='サイズ3'; $item_img='商品画像URL';} 16 17 if($number!==''){ 18 if($item=='order_id'){ 19 20 }else{ 21 print ' 22 <li> 23 <div class="item_left"> 24 <figure><img src="'.$item_img.'" alt="" /></figure> 25 <h3>'.$item_size.''.$item_name.'</h3> 26 </div> 27 <div class="item_center">'.$number.'個</div> 28 <div class="item_right"> 29 <div class="change_btn"><input type="submit" class="return_btn" value="数量変更" onClick="form.action=\'form.php\';return true"></div> 30 <div class="delete_btn"><a href="./delete.php?key='.$key.'">削除</a></div> 31 </div> 32 33 <input type="hidden" name="key" value="'.$key.'"> 34 <input type="hidden" name="edit" value="edit"> 35 <input type="hidden" name="商品1" value="'.$value[item1].'"> 36 <input type="hidden" name="商品2" value="'.$value[item2].'"> 37 <input type="hidden" name="商品3" value="'.$value[item3].'"> 38 </li>'; 39 } 40 } 41 } 42} 43?>
[削除ボタンをクリックした際の処理(delete.php)]
php
1<?php 2$key=$_REQUEST['key']; 3$act=$_REQUEST['act']; 4session_start(); 5unset($_SESSION['order'][$key]); 6 7 8header("Location: ../estimate_change.php"); 9?> 10
※お見積り結果ページに関してましては、リンク先を設置しているだけのため、割愛しております。
恐れ入りますが、何卒ご教示の程宜しくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/25 18:24