Laravel不使用数据库实现数据增删改及插入覆盖问题排查
解决Laravel中Session存储数据被覆盖的问题
我来帮你搞定这个问题~你现在遇到的核心问题是每次提交表单都会覆盖Session里的旧数据,因为你每次都是直接把仅包含当前输入的新数组存进Session,而不是追加到已有的数组中。咱们来修改代码实现数据累加的功能:
第一步:修改控制器代码
先把你的控制器逻辑改成“先取旧数据→追加新数据→存回Session”的模式,同时增加表单提交的判断(避免页面首次加载时报错):
public function index(Request $request){ // 仅在表单POST提交时处理数据 if ($request->isMethod('post')) { // 处理姓名:先获取已有数据(无则初始化空数组),再追加新值 $existingNames = Session::get('name', []); $existingNames[] = $request->input('name'); Session::put('name', $existingNames); // 同理处理班级 $existingClasses = Session::get('class', []); $existingClasses[] = $request->input('class'); Session::put('class', $existingClasses); // 同理处理邮箱 $existingEmails = Session::get('email', []); $existingEmails[] = $request->input('email'); Session::put('email', $existingEmails); } // 把所有Session数据打包传给视图 $studentData = [ 'names' => Session::get('name', []), 'classes' => Session::get('class', []), 'emails' => Session::get('email', []), ]; return view('frontEnd.student.user', $studentData); }
为什么原来的代码会覆盖?
你之前的Session::put('name',[$data['name']]);相当于每次都创建一个只装当前输入值的新数组,直接替换掉Session里之前存储的数组,自然会覆盖旧数据。现在的逻辑是先取出已有的数组,把新值追加进去,再存回Session,就能保留历史数据了。
第二步:修改前端视图(可选,用于展示已存数据)
如果你想在页面上看到所有已提交的学生信息,可以在表单下方添加列表展示逻辑:
<!DOCTYPE html> <html> <head> <title>Insert using session</title> </head> <body> <form action="{{url('/user')}}" method="post"> {{csrf_field()}} <table> <tr> <td>Name</td> <td><input type="text" name="name"></td> </tr> <tr> <td>Class</td> <td><input type="text" name="class"></td> </tr> <tr> <td>Email</td> <td><input type="text" name="email"></td> </tr> <tr> <td></td> <td><input type="submit" name="submit"></td> </tr> </table> </form> <!-- 新增:展示已提交的学生列表 --> <h3>已添加的学生</h3> @if(count($names) > 0) <table border="1"> <tr> <th>姓名</th> <th>班级</th> <th>邮箱</th> </tr> @foreach($names as $index => $name) <tr> <td>{{ $name }}</td> <td>{{ $classes[$index] }}</td> <td>{{ $emails[$index] }}</td> </tr> @endforeach </table> @else <p>还没有添加任何学生哦~</p> @endif </body> </html>
额外优化建议(可选)
为了让代码更健壮,可以给表单添加验证规则,确保用户输入的合法性:
// 在处理数据前添加验证 $request->validate([ 'name' => 'required|string', 'class' => 'required|string', 'email' => 'required|email' ]);
内容的提问来源于stack exchange,提问作者Ajeet kumar
相关产品推荐
相关产品推荐

