Update only image if user uploaded a new one, Laravel

I have an edit form that has an image field where the user can upload a new image if they want.

But if the user doesn't upload a new photo, I don't want to check the image field and just use the photo that is already in the database. And don't update the image field at all.

Here is my edit function:

public function postEdit($id) {

    $product = Product::find($id);

    // This should be in product model, just testing here
    $edit_rules = array(
        'category_id' => 'required|integer',
        'title' => 'required|min:2',
        'description' => 'required|min:10',
        'price' => 'required|numeric',
        'stock' => 'integer'
    );

    // Add image rule only if user uploaded new image
    if (Input::has('image')) {
        $edit_rules['image'] = 'required|image|mimes:jpeg,jpg,bmp,png,gif';
    }

    $v = Validator::make(Input::all(), $edit_rules);

    if ($product) {

        if ($v->fails()) {
            return Redirect::back()->withErrors($v);
        }

        // Upload the new image
        if (Input::has('image')) {
            // Delete old image
            File::delete('public/'.$product->image);

            // Image edit
            $image = Input::file('image');
            $filename = date('Y-m-d-H:i:s')."-".$image->getClientOriginalName();
            Image::make($image->getRealPath())->resize(600, 600)->save('public/img/products/'.$filename);

            $product->image = 'img/products/'.$filename;
            $product->save();
        }

        // Except image because already called save if image was present, above
        $product->update(Input::except('image'));

        return Redirect::to('admin/products')->with('message', 'Product updated.');
    }

    return Redirect::to('admin/products');
}

      

Using this, I can update all values ​​except the image.

If I don't upload a new photo, it retains all other updated values.

If I upload a new photo, it just ignores it and keeps all other updated values, doesn't upload a new photo.

+4


source to share


5 answers


public function update() {

    $id=Input::get('id');
    $rules= array('name'=>'required|regex:/(^[A-Za-z]+$)+/',
                        'detail'=>'required|regex:/(^[A-Za-z]+$)+/',
                        'images' => 'required|image');
    $dat = Input::all();

    $validation = Validator::make($dat,$rules);
    if ($validation->passes()){

        $file =Input::file('images');
        $destinationPath = 'image/pack';
        $image = value(function() use ($file){
        $filename = date('Y-m-d-H:i:s') . '.' . $file->getClientOriginalExtension();
        return strtolower($filename);
            });

        $newupload =Input::file('images')->move($destinationPath, $image);


        DB::table('pkgdetail')
                        ->where('id', $id)  
                                ->limit(1)  
                            ->update(array('name' => Input::get('name'), 'detail' => Input::get('detail'), 'image' => $newupload));


        $data=PackModel::get_all();
         return View::make('pkg_dis')->with('data',$data)
                                    ->withErrors($validation)
                                ->with('message', 'Successfully updated.');
        }

}

      



0


source


use Illuminate \ Support \ Facades \ Input;



public function update(Request $request, $id)
{
    if ($tag = Tag::find($id))
    {
        $this->validate($request, [
        'tag_name' => 'required|min:3|max:100|regex: /^[a-zA-Z0-9\s][a-zA-Z0-9\s?]+$/u|unique:tags,tag_name,'.$id.',id',
        ]);
        $tag->tag_name=$request->input('tag_name');

        // get the image tag_img_Val
        if($request->hasFile('tag_image'))
        {
            $this->validate($request, [
            'tag_image' => 'image|mimes:jpeg,png,jpg,gif,svg|max:1000',
            ]);
            $img = $request->file('tag_image');
            $old_image = 'uploads/' . $tag->tag_image;//get old image from storage
            if ($img != '')
            {
                $image = rand() . '_' . ($img->getClientOriginalName());
                $path = 'uploads/';
                //Storing image                
                if ($img->move(public_path($path), $image))
                {
                    $tag->tag_image = $image;
                    if ($tag->update())
                    {
                        if (is_file($old_image)) {
                            unlink($old_image); // delete the old image 
                        }
                        return response()->json(['message' => 'Tag has been updated successfully.'],200);
                    }
                    else
                    {
                        unlink($image); // delete the uploaded image if not updated in database
                        return response()->json(['message' => "Sorry, Tag not updated"],500);
                    }
                }
                else
                {
                    return response()->json(['message' => "Sorry, Image not moved"],500);
                }
            }
            else
            {
                return response()->json(['message' => "Sorry, Image not uploaded"],500);
            }
        }
        else
        {
            if($tag->update(Input::except('tag_image')))
            {
                return response()->json(['message' => 'Tag has been updated successfully.'],200);
            }
            else
            {
                return response()->json(['message' => "Sorry, Tag not updated"],500);
            }
        }
    }
    else
    {
        return response()->json(['message' => 'Tag not found'], 404);
    }
}

      

0


source


Check if the request has a file:

public function update(Request $request)
{
  // Update the model.

  if($request->hasFile('photo')) {
    // Process the new image.
  }

  // ...
}

      

0


source


You need to use multipart

enctype for the form

0


source


In the controller part:

    $destinationPath = 'uploads';
    $extension = Input::file('image')->getClientOriginalExtension();
    var_dump($extension);
    $fileName = rand(11111,99999).'.'.$extension;
    Input::file('image')->move($destinationPath, $fileName);

      

-1


source







All Articles