php用foreach循环插入多张不同图片,却把最后一张多次插入?

今天捣鼓php上传图片,将多张图片路径用foreach循环入库,最后结果却将最后一张图片路径多次入库了??弄 了半天也没发现是哪的问题?哪位给解答下

img


```php
$data = input('post.');
            //图集处理
            $imageArr=[];
            if(!empty($data['image']) && isset($data['image'])){
                $imageArr=$data['image'];
            }else{
                $this->error('请上传商品图片');
            } 
                        // 检验数据
            $validate = validate(GoodsValidate::class);
            if(!$validate->scene('add')->batch(true)->check($data)) {
                $this->error($validate->getError());
            }
            $where[]= ['goods_id','=',$id];
            $data['goods_img']=$imageArr[0];
            try {
                //更新基本数据
                Db::name('goods')->where('id',$id)->strict(false)->update($data);
                //商品图集更新
                $count1 = Db::name('goods_img')->where($where)->count();
                $count2 = count($imageArr);

                if($count1 == $count2){
                    foreach($imageArr as $v){
                        Db::name('goods_img')->where($where)->update(['image'=>$v]);
                    }
                }else{
                    Db::name('goods_img')->where($where)->delete();
                    foreach($imageArr as $v){
                        Db::name('goods_img')->insert(['goods_id'=>$id,'image'=>$v]);
                    }
                }
                }catch (\Exception $e) {

                    return alert('服务端错误','index',5);
                }
                    return alert('操作成功','index',6);

更新商品其它 字段 ,不改动图片的情况 下,原来 的图片就变得和最后一张一样

你看下你上传保存图片的对象,里面肯定只存了最后一张图片

可能是由于在循环中没有正确处理图片的路径或者文件名导致的。

可参考

$images = [
    'image1.jpg',
    'image2.jpg',
    'image3.jpg'
];

foreach ($images as $image) {
    // 生成一个唯一的文件名
    $filename = uniqid() . '_' . $image;

    // 通过文件名将图片保存到指定目录
    move_uploaded_file($_FILES['image']['tmp_name'], 'path/to/directory/' . $filename);

    // 将图片的路径保存到数据库或进行其他操作
    // ...

    // 输出成功信息
    echo "Image $filename uploaded successfully.<br>";
}

是不是重复请求了,引用的对象是同一个呢,最好贴下代码

循环插入的时候,名称一样了,然后覆盖掉了?

不修改图片的情况下或者新老图片张数一样的时候,你的逻辑有问题,最好是先删除再插入

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/1005275
  • 你也可以参考下这篇文章:php在foreach循环后留下数组的引用问题
  • 除此之外, 这篇博客: php基础教程 第八步循环补充中的 foreach 循环 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    foreach循环用于遍历数组,每次循环,数组的元素值就会赋值给一个变量。语法如下:

    foreach (数组 as 指向的变量)
    {
        循环的代码;
    }
    

    示例如下:

    <?php
    $a=array('1','aaaa',23,'daw');
    foreach($a as $val){
    	echo $val.'<br/>';
    }
    ?>
    

    以上代码中,定义了一个数组变量a,接下来使用foreach循环进行数组的遍历。
    在foreach的圆括号中,代码为 $a as $val,释义为变量val指向数组a变量的元素,每次都指向下一个。例如第一次循环指向为’1’,第二次循环指向为’aaaa’,第三次以此类推。结果如下:
    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

可能是你的图片名称使用的是同一个,导致所有的图片变成了同一张图片。其次你可以打印或者调试,看下放入到imageArr 中的图片对象是不是已经就是同一张图片了。还有就是我看你的插入和更新那行代码,感觉是有问题的,你数据库中的image字段是什么类型啊,你每次循环都更新或着插入它。

最后一张把前面的覆盖了