访问页面出现Undefined index: img错误,求排查解决方法
解决 "Undefined index: img" 错误
我一眼就揪出问题所在啦,咱们一步步捋明白:
问题根源
你在控制器里用DB::select()执行查询后,返回的$products是一个包裹着单个产品数据的数组——哪怕id是唯一主键,DB::select()也会返回数组格式的结果集。但你在Blade视图里直接写$products["img"],相当于试图从数组本身上取img索引,这肯定会报错啊!img是数组里那个产品元素的属性/索引,不是数组本身的。
另外必须提一句:你直接把$id拼进SQL语句里,这存在SQL注入风险,这个得立刻改!
修复步骤
1. 修正控制器的查询逻辑(同时解决SQL注入)
给你两种靠谱的处理方式:
方式一:用查询构建器(推荐,自动防注入)
public function show($id) { // findOrFail会根据id查找,找不到直接返回404,返回的是单个产品对象 $product = DB::table('products')->findOrFail($id); return view("productpage", ["product" => $product]); }
方式二:如果坚持用DB::select(),要正确处理结果数组
public function show($id) { // 用参数绑定避免SQL注入! $products = DB::select("SELECT * FROM products where id=?", [$id]); // 先检查有没有找到数据 if(empty($products)) { abort(404); // 没找到就返回404页面 } // 取出数组里的第一个产品元素 $product = $products[0]; return view("productpage", ["product" => $product]); }
2. 调整Blade视图的访问方式
根据控制器传递的$product变量,对应修改视图:
- 如果是查询构建器返回的对象:
@extends("master") @section("mainpage") <div class="container"> <img src="{{$product->img}}"> <!-- 其他页面内容 --> </div> @endsection
- 如果是
DB::select()返回的数组元素:
@extends("master") @section("mainpage") <div class="container"> <img src="{{$product["img"]}}"> <!-- 其他页面内容 --> </div> @endsection
为啥var_dump能看到正常数据?
因为你var_dump($products)时,输出的是整个结果数组,里面确实包含了带img字段的产品元素,但你没注意到这个元素是数组里的第一个项,直接去数组本身上取索引当然找不到啦~
内容的提问来源于stack exchange,提问作者TimeRunner2359
相关产品推荐
相关产品推荐

