循环使用laravel php将变量添加到数据库

时间:2018-05-30 01:05:13

标签: php html mysql laravel

由于某些原因,我的脚本返回noimage.jpg并且没有存储图像。不太清楚为什么?它构造了正确的文件名,但出于某种原因似乎不符合这两个术语?例如它构建了' image1'但当' image1'填写的字段看不到它们匹配?

用户上传照片

   <div class="section4 ">
        <div class="row">
            <div class="col-lg-3">
                <div class="form-group">
                    {{Form::file('image1.jpg')}}
                </div>
                <div class="form-group">
                    {{Form::file('image2')}}
                </div>
                <div class="form-group">
                    {{Form::file('image3')}}
                </div>
                <div class="form-group">
                    {{Form::file('image4')}}
                </div>
            </div>

        </div>
        </div>

控制器:

for($i=1; $i<=16; $i++){
        $filenamestr = (string)('image'.$i);
        if($request->hasFile($filenamestr)){
            // Get filename with the extension
            $filenameWithExt = $request->file('image'.$i)->getClientOriginalName();
            // Get just filename
            $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
            // Get just ext
            $extension = $request->file('image'.$i)->getClientOriginalExtension();
            // Filename to store
            $fileNameToStore= $filename.'_'.time().'.'.$extension;
            // Upload Image
            $path = $request->file('image'.$i)->storeAs('public/cover_images', $fileNameToStore);
        } else {
            $fileNameToStore = 'noimage.jpg';
        }
    }

1 个答案:

答案 0 :(得分:0)

$fileNameToStore的最终值被设置为循环的第16次迭代,即noimage.jpg。但是,如果它们存在,它们看起来仍然应该存储。

您可以通过创建要存储的文件名数组来解决第一个问题:

for($i=1; $i<=16; $i++){
    $filenamestr = (string)('image'.$i);
    if($request->hasFile($filenamestr)){
        // Get filename with the extension
        $filenameWithExt = $request->file('image'.$i)->getClientOriginalName();
        // Get just filename
        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
        // Get just ext
        $extension = $request->file('image'.$i)->getClientOriginalExtension();
        // Filename to store
        $fileNameToStore[$i]= $filename.'_'.time().'.'.$extension;
        // Upload Image
        $path = $request->file('image'.$i)->storeAs('public/cover_images', $fileNameToStore[$i]);
    } else {
        $fileNameToStore[$i] = 'noimage.jpg';
    }
}

dd($fileNameToStore);

对于第二期, 请记得检查您的表单是否设置了<form enctype="multipart/form-data"...。还要检查服务器是否具有对cover_images文件夹的写访问权。

同时检查您的第一个输入的名称,因为它最后不应该有.jpg

最后,考虑在存储之前使用$request->file('image'.$i)->isValid()来检查文件是否有效。

<强>最后

考虑使用数组输入而不是编号字段。即致电每个字段{{Form::file('image[]')}}并使用Laravel对dot notationforeach($request)->file()

的支持