今天捣鼓php上传图片,将多张图片路径用foreach循环入库,最后结果却将最后一张图片路径多次入库了??弄 了半天也没发现是哪的问题?哪位给解答下
```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>";
}
是不是重复请求了,引用的对象是同一个呢,最好贴下代码
循环插入的时候,名称一样了,然后覆盖掉了?
不修改图片的情况下或者新老图片张数一样的时候,你的逻辑有问题,最好是先删除再插入
不知道你这个问题是否已经解决, 如果还没有解决的话: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字段是什么类型啊,你每次循环都更新或着插入它。
最后一张把前面的覆盖了