راکت
حل شده

عدم آپلود چند فایل در فرم

11 پاسخ

با سلام من یک فرم دارم که اطلاعات در دیتابیس ثبت میکنه و در این فرم یک input برای دارم که clone میشه اما زمانی که فرم ارسال میشه فقط یکی از عکس ها آپلود میشه و فایلهای بعدی آپلود نمیشوند

    public function store(Request $request)
    {
        $data = $request->validate([
            'company_name' => 'required|max:255',
            'cat' => 'required',
            'malek' => 'nullable',
            'ostan' => 'required',
            'shahr' => 'required',
            'state' => 'required',
            'address' => 'required',
            'lat' => 'required',
            'long' => 'required',
            'sabet' => 'required',
            'mobile' => 'required',
            'status' => 'required',
            'website' => 'nullable|string',
            'telegram' => 'nullable|string',
            'instagram' => 'nullable|string',
            'facebook' => 'nullable|string',
            'linkdin' => 'nullable|string',
            'aparat' => 'nullable|string',
            'twitter' => 'nullable|string',
            'rules' =>'accepted',
            'user_id' => 'required',
            'keywords' => 'required',
            'product' => 'nullable',
            'about' => 'required',
            'captcha' => 'required|captcha',
            'logo' => 'required|image|mimes:jpeg,png,jpg|max:500',
            'filenames' => 'nullable',
            'filenames.*' => 'mimes:jpeg,png,jpg,gif|max:2048'

        ]);
        $image = $request->file('logo');
        $new_name = rand() . '.' . $image->getClientOriginalExtension();
        $image->move(public_path('logos'), $new_name);
            $ded = new Dedicated();
            $ded->company_name = $data['company_name'];
            $ded->cat = $data['cat'];
        $ded->website = $data['website'];
        $ded->telegram = $data['telegram'];
        $ded->instagram = $data['instagram'];
        $ded->twitter = $data['twitter'];
        $ded->linkdin = $data['linkdin'];
        $ded->facebook = $data['facebook'];
        $ded->aparat = $data['aparat'];
            $ded->malek = $data['malek'];
            $ded->ostan = $data['ostan'];
            $ded->shahr = $data['shahr'];
            $ded->state = $data['state'];
            $ded->user_id = Auth::user()->id;
            $ded->address = $data['address'];
            $ded->lat = $data['lat'];
            $ded->long = $data['long'];
            $ded->keywords = $data['keywords'];
            $ded->sabet = $data['sabet'];
            $ded->mobile = $data['mobile'];
            $ded->about = $data['about'];
            $ded->logo = $new_name;
            $ded->shanbe = $request->s0;
            $ded->yekshanbe = $request->s1;
            $ded->doshanbe = $request->s2;
            $ded->seshanbe = $request->s3;
            $ded->charshanbe = $request->s4;
            $ded->panjshanbe = $request->s5;
            $ded->jome = $request->s6;
        $ded->product = $request->product;

        $ded->transaction_id = $request->transaction_id;
            $invoice  = Transactions::where('user_id',Auth::user()->id)->orderBy('created_at', 'desc')->first();
            $ded->due_date = Carbon::now()->addMonths($invoice->tedad);
            $ded->tedad = $invoice->tedad;
            $ded->transaction_id = $invoice->id;
        $ded->save();
        foreach ($request->file('filenames') as $key => $value) {

            $imageName = time(). $key . '.' . $value->getClientOriginalExtension();
            $value->move(public_path('/images/didicated/'.Auth::user()->id.'/'.$ded->id), $imageName);
            $img = new Upload();
            $img->image = $imageName;
            $img->user_id = Auth::user()->id;
            $img->ded_id = $ded->id;
            $img->save();

        }

            function multiexplode ($delimiters,$string) {

            $ready = str_replace($delimiters, $delimiters[0], $string);
            $launch = explode($delimiters[0], $ready);
            return  $launch;
        }

        $myString = $request->keywords;
        $myArray  = explode('،', $myString);
        $myArray = multiexplode(array(",","،"),$myString);
        $deds  = Dedicated::orderBy('created_at', 'desc')->first();
        for($i=0 ; $i< count($myArray); $i++) {
            $kk = Keywords::where('word', '=', $myArray[$i])->first();
            if ($kk === null) {
                $key = new Keywords();
                $key->word = $myArray[$i];
                $key->ded_id = $deds->id;
                $key->save();
            }
        }

     $invoice  = Transactions::where('user_id',Auth::user()->id)->orderBy('created_at', 'desc')->first();
        $ded  = Dedicated::where('user_id',Auth::user()->id)->orderBy('created_at', 'desc')->first();

        $invoice->ded_id = $ded->id;
        $invoice->update();

        //  return Response::json($normalkar);
        return redirect()->route('add.image');
    }
<div class="input-group hdtuto control-group lst increment">
    <div id="wrapper">
        <div id="c3"><input type="text" name="matn[]" class="myfrm form-control" /></div>

        <div id="c1"><input type="file" name="filenames[]" class="myfrm form-control" style="width: 350px;" /></div>
    </div>
    <div class="input-group-btn" style="padding-bottom: 10px; padding-top: 10px; direction: rtl;">
        <button class="logobtn" type="button" style="width: 150px;">افزودن عکس</button>
    </div>
</div>
<div class="clone hide">
    <div class="hdtuto control-group lst input-group" style="margin-top: 10px;">
        <div id="wrapper">

            <div id="c2"><label>توضیحات جایگزین</label></div>
            <div id="c1"><input type="file" name="filenames[]" class="myfrm form-control" style="width: 350px;" /></div>
        </div>
    </div>
</div>

 <script type="text/javascript">
        $(document).ready(function() {
            $(".logobtn").click(function(){
                var lsthmtl = $(".clone").html();
                $(".increment").after(lsthmtl);
            });
            $("body").on("click",".btn-danger",function(){
                $(this).parents(".hdtuto control-group lst").remove();
            });
        });
    </script>```

لطفا دوستان یه کمکی به بنده بکنید تا بتونم در همین فرم چندین عکس نیز آپلود کنم

ثبت پرسش جدید

پاسخ‌ها

11
Mohammad Abdollahi
Mohammad Abdollahi
@dr.m.abdollahi
بهترین پاسخ

درود
مشکل حل شد
با تشکر از پیگیری شما
مشکل مربوط به همین view بود

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

یه روش هست که دارن ازش استفاده میکنن و به این صورت هست که برای آپلود هر چند تا عکس که دلت بخواد باید یه دکمه قرار بدی که با جی کویری بتونی هر چند تا که خواستی input فایل به فرمت اضافه کنی و اسمشونو به صورت آرایه در نظر بگیر ی بعد در سمت سرورت با یه حلقه foreach این آرایه رو پیمایش کنی و فایل هارو دونه دون آپلود کنی.

    <div id="list">

    </div>
    <button onclick="addInputFile()">
        Add Input File
    </button>
    <script>
        function addInputFile() {
            var html = `<div class="form-group">
                    <input type="file" name="files[]">
                </div>`;
            $('#list').append(html);
        }
    </script>

کاری باقی نمیمونه فقط در سمت سرورت این آرایه files[] رو اعتبار سنجی و با حلقه foreach فایل هاشو آپلود کن.

Mohammad Abdollahi
Mohammad Abdollahi
@dr.m.abdollahi

درود
ممنون از جوابتون
ولی اگر به کدها نگاه میکردید من هم از همین روش استفاده کردم ولی زمان آپلود فقط یکی از فایلها آپلود میشه!

شاید پاسخ شما همین‌جا باشد

Mohammad Abdollahi
Mohammad Abdollahi
@dr.m.abdollahi

درود
دوستان راه حلی برای این مشکل من وجود داره ؟

@nimageneral
@mhyeganeh
@endworld
@bamdad

محمد
محمد
@molkan99
dd($request->file('filenames') );

این کد رو بزنین تست کنین که آیا همه مقادیر فایل ها رو دریافت میکنه یا نه

Mohammad Abdollahi
Mohammad Abdollahi
@dr.m.abdollahi

درود
نه انگار فقط فایل اول رو دریافت میکنه
@molkan99

محمد
محمد
@molkan99

@dr.m.abdollahi من قسمت ارسال فرم رو تست گرفتم مشکل از داخل کنترلر هست با همین کد ها چند تا فایل می فرسته.
با این کد هم تست بگیرین خروجیش چند فایل میشه یا نه

dd($request->allFiles());
Mohammad Abdollahi
Mohammad Abdollahi
@dr.m.abdollahi

درود
بعید میدونم از کنترل باشه
بازم همون فایل اول ارسال میشه

array:1 [▼
  "filenames" => array:1 [▼
    0 => Illuminate\Http\UploadedFile {#1395 ▼
      -test: false
      -originalName: "6.jpg"
      -mimeType: "image/jpeg"
      -error: 0
      #hashName: null
      path: "D:\xampp\tmp"
      filename: "phpFBB2.tmp"
      basename: "phpFBB2.tmp"
      pathname: "D:\xampp\tmp\phpFBB2.tmp"
      extension: "tmp"
      realPath: "D:\xampp\tmp\phpFBB2.tmp"
      aTime: 2020-12-21 14:07:23
      mTime: 2020-12-21 14:07:23
      cTime: 2020-12-21 14:07:23
      inode: 86412817850992837
      size: 42947
      perms: 0100666
      owner: 0
      group: 0
      type: "file"
      writable: true
      readable: true
      executable: false
      file: true
      dir: false
      link: false
      linkTarget: "D:\xampp\tmp\phpFBB2.tmp"
    }
  ]
]
محمد
محمد
@molkan99

کد html رو داخل enctype='multipart/form-data' در فرم گذاشتین یا از روش های دیگه ای مثل ای جکس و یا ... استفاده کردید ؟

Mohammad Abdollahi
Mohammad Abdollahi
@dr.m.abdollahi

درود
از enctype='multipart/form-data استفاده کردم

محمد
محمد
@molkan99

@dr.m.abdollahi
همه کدتون رو داخل تگ form قرار دادین دیگه درست ؟
این فایلی که میگین فقط همین ارسال میشه توی کدوم اینپوت های جدید یا همون اینپوت بالا ؟ منظورم اینجاست

 <div id="wrapper">
        <div id="c3"><input type="text" name="matn[]" class="myfrm form-control" /></div>

        ***<div id="c1"><input type="file" name="filenames[]" class="myfrm form-control" style="width: 350px;" /></div>
    </div>

یا

<div id="wrapper">

            <div id="c2"><label>توضیحات جایگزین</label></div>
            <div id="c1"><input type="file" name="filenames[]" class="myfrm form-control" style="width: 350px;" /></div>
        </div>

که هر بار بعد هر کلیک بهش میشه اینپوت جدید اضافه کرد .

اگر امکانش هست کد کامل قسمت view رو بزارین اینجا

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام