【问题标题】:Error:While updating form Using Ajax Post method in laravel错误:在 laravel 中使用 Ajax Post 方法更新表单时
【发布时间】:2017-10-04 05:58:24
【问题描述】:

我正在尝试更新我的 Laravel 表单在更新除 file 字段之外的其他字段时,我正在使用 hasfile() 检查 Laravel 字段,但它失败了。

如果我更新文件上传条件完美运行,唯一的问题发生在我更新另一个表单字段而不更新文件时

这是我的控制器页面:

public function update(Request $request, $id)
{

    $this->validate($request,[
        'design_no'=>'required',
        'design_image'=>'image|nullable|max:1999'
    ]);
            // Handle file Upload
     if ($request->hasFile('design_image')) {
        // Get filename with image 
            $filenameWithex=$request->file('design_image');
        // Get just file name
             $filename=$_FILES['design_image']['name'];
            // $filename=pathinfo($filenameWithex,PATHINFO_FILENAME);
        // Get just ex 
            // $extension=pathinfo($filenameWithex,PATHINFO_EXTENSION);
        // File Name To Store
            $fileNameToStore=$filename;
            $path=$request->file('design_image')->storeAs('public/images',$fileNameToStore);
    }else{
        $fileNameToStore='noimage.jpg';
    }
design::where('design_no',$id)->update([
           'desg_1' => $request->input('desg_1'),
            'design_image'=> $fileNameToStore,
            'desg_2' => $request->input('desg_2'),
            'desg_3' => $request->input('desg_3'),
            'desg_4' => $request->input('desg_4'),
            'desg_5' => $request->input('desg_5'),
            'desg_6' => $request->input('desg_6') 
]);
    $design->save();
    return '1';
}  

这是我的 Ajax 调用:

    $('.submit').click(function(){
            $.ajaxSetup({
                headers: {
                        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                    }
            });
        var form = $('form')[0];
        var update = new FormData(form);
        var id =$('.designNo').val();
     $.ajax({
        type:"POST",
          url:"/design_update/"+id,
            processData: false,  // Important!
            contentType: false,
            cache: false,
          data:update,
          success:function(results){
            if (results==1) {
                $("#result").html("Upadated Successfully");
              }else{
                $('#error').html(results);
                }
            }
        }); 
    }); 

【问题讨论】:

  • $request->all() 里面有什么?
  • 检查我的答案
  • @aldrin27 我听不懂
  • 我的意思是$request变量的值是什么。
  • 你找到解决办法了吗??

标签: php laravel laravel-5.4


【解决方案1】:

首先你需要像这样验证你的文件

$this->validate($request,[
        'design_no'=>'required',
        'design_image'=>'nullable|image|mimes:jpg,png,jpeg|max:1999'
    ]);

如果您已经有这些记录,则需要获取要更新的记录,然后忽略此步骤。

$designData = design::where('design_no',$id)->first();

现在您需要检查变量$fileNameToStore,如果它有noImage.jpg,则意味着您没有在此处更新图像,在这种情况下您需要更新保持上次上传的文件完整,否则像这样更新您的图像文件。

design::where('design_no',$id)->update([
           'desg_1' => $request->input('desg_1'),
            'design_image'=> ($fileNameToStore != 'noimage.jpg') ? $fileNameToStore : $designData->design_image,
            'desg_2' => $request->input('desg_2'),
            'desg_3' => $request->input('desg_3'),
            'desg_4' => $request->input('desg_4'),
            'desg_5' => $request->input('desg_5'),
            'desg_6' => $request->input('desg_6') 
]);

替代方法

你也可以在这里做两个更新语句,这样保持干净

if ($request->hasFile('design_image')) {
        // Get filename with image 
            $filenameWithex=$request->file('design_image');
        // Get just file name
             $filename=$_FILES['design_image']['name'];
            // $filename=pathinfo($filenameWithex,PATHINFO_FILENAME);
        // Get just ex 
            // $extension=pathinfo($filenameWithex,PATHINFO_EXTENSION);
        // File Name To Store
            $fileNameToStore=$filename;
            $path=$request->file('design_image')->storeAs('public/images',$fileNameToStore);

    design::where('design_no',$id)->update([
            'desg_1' => $request->input('desg_1'),
            'design_image'=> $fileNameToStore,
            'desg_2' => $request->input('desg_2'),
            'desg_3' => $request->input('desg_3'),
            'desg_4' => $request->input('desg_4'),
            'desg_5' => $request->input('desg_5'),
            'desg_6' => $request->input('desg_6') 
     ]);
}else{   // ignore design_image when you don't need to update that
    design::where('design_no',$id)->update([
            'desg_1' => $request->input('desg_1'),
            'desg_2' => $request->input('desg_2'),
            'desg_3' => $request->input('desg_3'),
            'desg_4' => $request->input('desg_4'),
            'desg_5' => $request->input('desg_5'),
            'desg_6' => $request->input('desg_6') 
     ]);
}

【讨论】:

  • 抱歉有点晚了,我使用了似乎适合我的替代方法,但如果你能解释一下,我不知道这是否是最佳做法
  • 没有问题!好吧,如果您担心代码行,则由您决定,如果您不关心代码行,则第一个更可取,如果您正在使用,则第二个显然适合您,否则第二个更可取!
猜你喜欢
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 2017-01-15
  • 2018-03-07
  • 1970-01-01
  • 2017-12-23
相关资源
最近更新 更多