質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1177閲覧

Laravel SESSION内容の削除について

HALU

総合スコア7

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/12/20 05:17

前提

phpのフレームワークであるLaravelを使用して、アパレルECサイトを製作中。
Laravel6系を使用。

修正箇所について、ご教示願います。

実現したいこと

SESSIONを用いて、カート追加機能を作成、
カート一覧画面で個別に削除したい

流れとしては、
①商品詳細ページでカートに追加するを押した時に商品情報をSESSIONに格納
②redirectでカート内に遷移し、SESSIONの情報を取り出して表示
③viewでは、キーはLaravelの$loop関数を使用し、foreachで配列内の情報を表示。

削除対象のキーについては$loop->indexをvalueとし、送信。
受け取ったキーで対象の情報を削除、というふうに行いたい。

発生している問題・エラーメッセージ

削除ができない ※コントローラー上で該当のキーは削除ができているが、 削除後の内容をSESSIONにセットする事ができていない

該当のソースコード

Controller

1{ 2// カートに追加する 3 public function addCart(request $request){ 4 $product_table = new Product; 5 $file_table = new File; 6 7 $product_id = $request->product_id; 8 9 $SessionUserId = $request->user_id; 10 $SessionProductId = $request->product_id; 11 $SessionProductName = $request->name; 12 $SessionProductPrice = $request->price; 13 $SessionProductSize = $request->size; 14 $SessionProductQuantity = $request->quantity; 15 $SessionShopName = $product_table->where('id',$SessionProductId)->with('user')->first(); 16 $SessionProductImg = $file_table->where('product_id',$SessionProductId)->first(); 17 18 19 $SessionData = array(); 20 $SessionData = compact('SessionUserId','SessionProductImg','SessionShopName','SessionProductId','SessionProductName','SessionProductPrice','SessionProductSize','SessionProductQuantity'); 21 // dd($SessionProductImg); 22 $request->session()->push('session_data', $SessionData); 23 // session()->flush(); 24 return redirect("view_cart"); 25 } 26 27 //カート内確認 28 public function view_cart(){ 29 30 $file_table = new File; 31 $defaultimg = $file_table->where('id',0)->first(); 32 33 $datas =session()->get('session_data'); 34 35 if (!empty($datas)){ 36 $total_price = array_sum(array_column($datas, 'SessionProductPrice')); 37 $shopname = array_column($datas,'SessionShopName'); 38 $productimg = array_column($datas,'SessionProductImg'); 39 }else{ 40 $total_price=""; 41 $shopname=""; 42 $productimg=""; 43 } 44 45 return view('view_cart' 46 ,compact('datas','total_price','shopname','productimg','defaultimg') 47 ); 48 } 49 50 51 // カート削除 52 public function del_cart(request $request){ 53 $key = $request->delete_number; 54 $session = session()->get('session_data'); 55 56 unset($session[$key]); 57 $data = array_values($session); 58 $session = session()->push('session_data', $data); 59 dd($session); 60 61 return redirect('view_cart'); 62 }

view

1@extends('layouts.layout') 2@section('content') 3<div class="page_title" style="margin-bottom:30px;">カート内商品</div> 4 5<!-- 下記foreach --> 6 7<!-- カートに追加した商品があれば --> 8@if(!empty($datas)) 9@foreach($datas as $data) 10<div class="cart_frame"> 11 12 <div class="col-lg-3 text-center"> 13 14 @if(empty($productimg[$loop->index]->path)) 15 <img class="frame" src="{{$defaultimg->path}}" style="width:150px;height:150px;"alt="photo"> 16 @else 17 <img class="frame" src="{{$productimg[$loop->index]->path}}" style="width:150px;height:150px;"alt="photo"> 18 @endif 19 </div> 20 21 <div class="col-lg-3"> 22 <p class="col">{{ $data['SessionProductName'] }}</p> 23 <p class="col">サイズ:{{ $data['SessionProductSize']}}</p> 24 </div> 25 26 <div class="col-lg-3"> 27 <p class="col">{{$shopname[$loop->index]->user->name}}</p> 28 <p class="col">個数:{{$data['SessionProductQuantity']}}</p> 29 </div> 30 31 <div class="col-lg-3"> 32 <p class="individual_price">¥{{$data['SessionProductPrice']}}</p> 33 34 <!-- 削除ボタン --> 35 <form action="{{route('del_cart')}}" method="post"> 36 @csrf 37 <input type="hidden" name="delete_number" value="{{$loop->index}}"> 38 <input type="submit" class="btn btn-outline-secondary" value="削除"> 39 </form> 40 </div> 41 42</div> 43@endforeach 44<div class="ABCD"> 45 合計: 46 <p class="cart_total_price">¥{{$total_price}}</p> 47 <button type="button" class="btn btn-secondary">購入する</button> 48</div> 49 50<div class="EFG"> 51 <div> 52 <form action="{{route('exe_buy',['id' => $data['SessionProductId']])}}" method="post"> 53 @csrf 54 <p class="cart_total_price">合計:{{$total_price}}円</p> 55 <button type="submit" class="btn btn-secondary">購入する</button> 56 </div> 57</div> 58 59<!-- カートに追加した商品がなければ --> 60@else 61<div class="card text-center"> 62 <p class="p-5">商品がありません</p> 63</div> 64@endif 65@endsection

補足

$data以降がdd()で確認しても、nullが返ってくるため、うまく機能していないと考えております。
dd($data)の出力結果は、削除対象が削除された状態で配列が表示される。

$session = session()->get('session_data'); unset($session[$key]); $data = array_values($session); $session = session()->push('session_data', $data);

unset使用時には欠番発生のため、セットし直しているつもりですが、
間違い箇所につきまして、ご指摘頂ければ幸いでございます。

Laravel経験浅く、わかりにくいかと存じますが、ご助力頂けますようお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuma.inaura

2022/12/20 06:31

セッションを削除したいということでしょうか?それとも削除されてしまって困っているということなんでしょうか。
HALU

2022/12/20 07:13

言葉足らずでございました、 削除出来ないため、質問させて頂いた次第でございます。エラーは出ず削除ボタンを押して、カート内画面に遷移されても削除したい商品が削除されずに表示されている状況でございます。
guest

回答2

0

自己解決

pushの代わりにputで解決いたしました。、

投稿2022/12/20 23:52

HALU

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

削除ならpushじゃなくforget じゃないでしょうか

$request->session()->forget('session_data');

投稿2022/12/20 07:17

yuma.inaura

総合スコア1453

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HALU

2022/12/20 08:35

このカードだと全て削除されてしまわないでしょうか?session_dataそのものではなく、多次元配列の中の配列を削除したい為、$key(上から1.2.3...)を指定して$keyに該当する配列を削除したいと言う意図でございます。 https://teratail.com/questions/217031 の、BAとなっている、 "そして肝心の削除処理ですが 一旦productsを取り出した後に unsetまたは、array_spliceで削除の上、sessionにputし直すのが無難でしょう。" のputが出来ていない状況でございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問