Mohammad Abdollahi
3 سال پیش توسط Mohammad Abdollahi مطرح شد
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>```

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


ثبت پرسش جدید
Mohammad Abdollahi
@dr.m.abdollahi 3 سال پیش آپدیت شد
0

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


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
0

یه روش هست که دارن ازش استفاده میکنن و به این صورت هست که برای آپلود هر چند تا عکس که دلت بخواد باید یه دکمه قرار بدی که با جی کویری بتونی هر چند تا که خواستی 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
@dr.m.abdollahi 3 سال پیش مطرح شد
0

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


Mohammad Abdollahi
@dr.m.abdollahi 3 سال پیش مطرح شد
0

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

@nimageneral
@mhyeganeh
@endworld
@bamdad


محمد
@molkan99 3 سال پیش مطرح شد
0
dd($request->file('filenames') );

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


Mohammad Abdollahi
@dr.m.abdollahi 3 سال پیش مطرح شد
0

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


محمد
@molkan99 3 سال پیش مطرح شد
0

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

dd($request->allFiles());

Mohammad Abdollahi
@dr.m.abdollahi 3 سال پیش مطرح شد
0

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

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 3 سال پیش مطرح شد
1

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


Mohammad Abdollahi
@dr.m.abdollahi 3 سال پیش مطرح شد
0

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


محمد
@molkan99 3 سال پیش آپدیت شد
1

@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 رو بزارین اینجا


Mohammad Abdollahi
@dr.m.abdollahi 3 سال پیش آپدیت شد
0

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


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

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