Ошибка загрузки нескольких файлов Php / Laravel - неопределенное смещение - PullRequest
0 голосов
/ 11 сентября 2018

Я немного новичок в нескольких загрузках файлов, и у меня есть ошибка, в которой 2 из моих полей являются необязательными.Я попытался проверить, что, если мой клиент загрузил поля основного изображения и изображения 3, то при отправке формы появилась ошибка.там написано Неопределенное смещение: 2 в моем коде "Image::make($file)->resize(450,450)->save('storage/uploads/'.$fileToStore[$key],50);"

Вот мои поля

<label for="">Primary Image </label>
<input type="file" name="prod_image[]" accept="image/*" required>

<label for="">Image 2 (Optional) </label>
<input type="file" name="prod_image[]" accept="image/*">

<label for="">Image 3 (Optional) </label>
<input type="file" name="prod_image[]" accept="image/*">

Вот мой кодв бэкэнде.

$files = $request->prod_image;

//set new filename and upload to /storage/uploads/
foreach($files as $key => $file) {
    $filenameWithExt = $file->getClientOriginalName();
    $filename = pathinfo($filenameWithExt,PATHINFO_FILENAME);
    $extension = $file->getClientOriginalExtension();
    $fileToArray[] = strtolower(preg_replace('/[^A-Za-z0-9 _ .-]/', '', $request->prod_name)).'-'.generate_random_str(10).'.'.$extension;
    $implodeFile = implode(',', $fileToArray);
    $fileToStore = explode(',', $implodeFile);

    Image::make($file)->resize(450,450)->save('storage/uploads/'.$fileToStore[$key],50);
}
$insert = $this->productData($request);
$getInsertedId = DB::table('products')->insertGetId($insert);

//insert to product_image table
for($i = 0; $i < count($fileToStore); $i++) {
   DB::table('product_image')->insert(['product_id' => $getInsertedId,'product_image' => $fileToStore[$i]]);
}

Что нужно сделать, чтобы вставить все загруженные изображения, а также данные в мою таблицу product_image, даже если они пропустили / забыли поместить изображение в поле Изображение 2.

1 Ответ

0 голосов
/ 11 сентября 2018

Я решил свою проблему, поэтому вместо использования ключа $ в моем foreach, в котором он проверяет каждый ключ моего поля.Я установил $ initKey = 0, чтобы использовать его для $ fileToStore и увеличивать его.Я не знаю, является ли это лучшим способом, но это решает мою проблему.Извините за плохое объяснение, я не очень хорош в этом.

Вот мой код

$files = $request->prod_image;
$initKey = 0;
foreach($files as $key => $file) {
    $filenameWithExt = $file->getClientOriginalName();
    $filename = pathinfo($filenameWithExt,PATHINFO_FILENAME);
    $extension = $file->getClientOriginalExtension();
    $fileToArray[] = strtolower(preg_replace('/[^A-Za-z0-9 _ .-]/', '', $request->prod_name)).'-'.generate_random_str(10).'.'.$extension;
    $implodeFile = implode(',', $fileToArray);
    $fileToStore = explode(',', $implodeFile);

    Image::make($file)->resize(450,450)->save('storage/uploads/'.$fileToStore[$initKey],50);
    $initKey++;
}
$insert = $this->productData($request);
$getInsertedId = DB::table('products')->insertGetId($insert);

for($i = 0; $i < count($fileToStore); $i++) {
   DB::table('product_image')->insert(['product_id' => $getInsertedId,'product_image' => $fileToStore[$i]]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...