Alewa's avatar
Level 2

Laravel 8 images update error

When i update my image in my admin database table without choosing any image in my edit_admin page the image disappears automatically but when i choose a image it updates perfectly

this is my admins database table

public function up()
    {
        Schema::create('admins', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('type');
            $table->string('mobile');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->string('image')->default('default.png');
            $table->boolean('status')->default('0');
            $table->rememberToken();
            $table->timestamps();
        });
    }

This is my edit_admin.blade.php file

<div class="card-body">
            <form action="{{ url('admin/edit_admin/'.$adminDetails->id) }}" id="quickForm" method="post">
              {{ csrf_field() }}
              <div class="row">
                <div class="col-lg-6" style="margin-left:250px;">
                  <div class="form-group">
                    <label for="name">User Name</label>
                    <input type="text" class="form-control" name="name" id="name" readonly="" value="{{ $adminDetails->name }}">
                  </div>
                  <div class="form-group">
                    <label for="email">Email</label>
                    <input type="email" class="form-control" name="email" id="email" readonly="" value="{{ $adminDetails->email }}">
                  </div>
                  <div class="form-group">
                    <label for="type">Admin Type</label>
                    <select name="type" class="form-control">
										  <option class="form-control" value="admin" @if($adminDetails->type == "admin") selected @endif>Admin</option>
                      <option class="form-control" value="subadmin" @if($adminDetails->type == "subadmin") selected @endif>Sub Admin</option>
									  </select>
                  </div>
                  <div class="form-group">
                    <input type="hidden" class="form-control" name="password" id="password">
                  </div>
                  <div class="form-group">
                    <input type="hidden" class="form-control" name="mobile" id="mobile">
                  </div>
                  <div class="form-group">
                    <div class="checkbox pull-left">
                      <label>
                        <input type="checkbox" name="status" id="status" value="1" @if($adminDetails->status == "1") checked @endif> Status
                      </label>
                    </div>
                  </div>
                </div>
                <!-- /.col -->
              </div>
              <div class="form-group" style="margin-left:250px; margin-top:15px;">
                <button type="submit" class="btn btn-primary">SUBMIT</button>
                <a href="{{ url('admin/view_admins') }}" class="btn btn-warning">BACK</a>
              </div>
              <!-- /.row -->
            </form>
          </div>

This is my AdminController the update function

public function updateAdminProfile(Request $request){
      if($request->isMethod('post')){
        $data = $request->all();

        $this->validate($request,[
          'name' => 'required|regex:/^[\pL\s\-]+$/u',
          'mobile' => 'required|numeric',
          'image' => '',
        ]);

        if($request->hasFile('image')){
          $image_tmp = $request->file('image');
          if ($image_tmp->isValid()) {
            // Upload Images after Resize
            $extension = $image_tmp->getClientOriginalExtension();
	          $imageName = rand(111,99999).'.'.$extension;
            $image_path = 'public/assets/backend/images/admin'.'/'.$imageName;

	           Image::make($image_tmp)->resize(215, 215)->save($image_path);

            }
          }else if(!empty($data['current_image'])){
            $imageName = $data['current_image'];
          }else{
            $imageName = ''; //the issue is here, which code i write here?
        }

        Admin::where('email',Auth::guard('admin')->user()->email)
        ->update(['name'=>$data['name'],'mobile'=>$data['mobile'],'image'=>$imageName]);
        return redirect()->back()->with('flash_message_success', 'User profile updated successfully.');
      }
    }

Can some one please help?

0 likes
2 replies
furqanDev's avatar

Try adding enctype='multipart/form-data' in the form.

<form action="" method="POST" enctype='multipart/form-data'>
****
</form>
Snapey's avatar

why not just leave the image attribute alone if there is no image?

You don't need to be passing the current_image back and forth in the form.

public function updateAdminProfile(Request $request){

        $this->validate($request,[
          'name' => 'required|regex:/^[\pL\s\-]+$/u',
          'mobile' => 'required|numeric',
          'image' => '',
        ]);

        Auth::user()->name = $request->name;
        Auth::user()->mobile = $request->mobile;

        if($request->hasFile('image')) {

          $extension =  $request->file('image')->getClientOriginalExtension();
	      $imageName = rand(111,99999).'.'.$extension;
          $image_path = 'public/assets/backend/images/admin'.'/'.$imageName;

	      Image::make($request->file('image'))->resize(215, 215)->save($image_path);

          Auth::user()->image = $imageName;
        }
        
        Auth::user()->save();

        return redirect()->back()->with('flash_message_success', 'User profile updated successfully.');

    }

Please or to participate in this conversation.