Bagaimana cara melakukan update pada laravel

Halo, selamat siang teman teman sekolah koding!

Jadi saya ingin membuat halaman edit profil, yang mana dihalaman tersebut sudah ditampilkan data user yang login (username,nama,password,email dipanggil dari tabel user) , dan dihalaman tersebut user dapat mengedit/update data profilnya sendiri, nah saya masih sedikit bingung mengenai cara updatenya (mohon maaf sekali, newbie baru tahap belajar, dan sangat awam sekali)

Saya melihat referensi disini dan sudah mengikuti tutorial update https://www.youtube.com/watch?v=ahYtmPBb27k&list=PLCZlgfAG0GXDijjesNoqcCmuYpQSbpucl&index=9

Namun yang saya inginkan adalah URL saya tetap seperti ini

 localhost:8000/edit-profil/

bukan dan tidak ingin menggunakan tambahan url lagi seperti /{id} atau /{username} dll seperti ini

 localhost:8000/edit-profil/ {id}

Berikut saya lampirkan beberapa bagian yang mungkin dibutuhkan untuk memperjelas ini tampilan halaman /edit-profil

#### Route Bagian Edit Profil


Route::get('/edit-profil','ProfilController@indexprofil');
Route::post('/edit-profil','ProfilController@editprofil');
Route::PUT('/edit-profil','ProfilController@sudahupdateprofil');

#### User Table

 public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('username')->unique();
            $table->string('email')->unique();
            $table->string('avatar')->default('avatar-user.png');
            $table->string('password')->nullable();
            $table->boolean('admin')->default(false);
            $table->rememberToken();
            $table->timestamps();
        });
    }

#### Profil Controller

 <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use Auth;
use Image;

class ProfilController extends Controller
{
    public function indexprofil()
    {
    	return view('belakangs.admins.edit-profil', array('user' => Auth::user()) );
    }

    public function editprofil(Request $request)
    {
    	// Bagian yang mengHandle upload avatar user
    	if($request->hasFile('avatar'))
    		{
	    		$avatar = $request->file('avatar');
	    		$filename = time() . '.' . $avatar->getClientOriginalExtension();
	    		Image::make($avatar)->resize(300, 300)->save( public_path('/img/upload/avatar/' . $filename ) );

	    		$user = Auth::user();
	    		$user->avatar = $filename;
	    		$user->save();
    		}
    	return view('belakangs.admins.edit-profil', array('user' => Auth::user()) );
    }

    public function sudahupdateprofil(Request $request)
    {
        $this->validate($request,[
          'name' => 'required|max:255',
          'username' => 'required|min:3|max:20|unique:users',
          'password' => 'required|min:6|confirmed',
        ]);

        Auth::user()->update([
           'name' => $request->name,
           'username' => $request->username,
           'password' => $request->password
        ]);

        return redirect('/edit-profil');
}
}

#### Bagian Edit-profil.blade.php


@extends('belakangs.admins.index-master')

@section('konten-tabel')
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
    <div class="card">
        <div class="header">
            <h2>Edit Profil</h2>
        </div>
        <div class="body">
            <div class="table-responsive">
                <div class="col-md-10 col-md-offset-1">
                    <img src="/img/upload/avatar/{{ $user->avatar }}" style="width:150px; height:150px; float:left; border-radius:50%; margin-right:25px;">
                    <h2>{{ $user->name }}</h2>
                    <form enctype="multipart/form-data" action="/edit-profil" method="POST">
                        <label>Ganti Foto Profil</label>
                        <input type="file" name="avatar">
                        <input type="hidden" name="_token" value="{{ csrf_token() }}">
                        <input type="submit" value="SIMPAN" class="pull-right btn btn-sm bg-gelap waves-effect">
                    </form>
                </div>

                <br><br><br><br>

                <div class="col-xs-12 ol-sm-12 col-md-12 col-lg-12">
                    <div class="panel-group" id="accordion_17" role="tablist" aria-multiselectable="true">
                      <div class="panel panel-col-red">
                         <div class="panel-heading" role="tab" id="headingOne_17">
                            <center><h4 class="panel-title">
                               <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion_17" href="#lengkap" aria-expanded="false"
                                  aria-controls="lengkap">
                               lihat data lengkapnya...</a>
                            </h4></center>
                         </div>
                         <div id="lengkap" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOne_17">
                            <form method="POST" type="hidden" name="_method" value="PUT" action="/edit-profil/">
                            {{ csrf_field() }}
                            <div class="panel-body">
                               <div class="col-md-6">
                                    <div class="input-group input-group-lg {{ $errors->has('name') ? ' has-error' : '' }}">
                                        <span class="input-group-addon">
                                            <i class="material-icons">face</i>
                                        </span>
                                        <div class="form-line">
                                            <input id="name" type="text" class="form-control" name="name" value="{{ $user->name }}" placeholder="Nama Lengkap" required autofocus>

                                            @if ($errors->has('name'))
                                            <span class="help-block">
                                            <strong>{{ $errors->first('name') }}</strong>
                                            </span>
                                            @endif
                                        </div>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="input-group input-group-lg {{ $errors->has('username') ? ' has-error' : '' }}">
                                        <span class="input-group-addon">
                                            <i class="material-icons">person</i>
                                        </span>
                                        <div class="form-line">
                                            <input type="text" class="form-control" value="{{ $user->username }}" placeholder="Username">
                                        </div>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="input-group input-group-lg">
                                        <span class="input-group-addon">
                                            <i class="material-icons">email</i>
                                        </span>
                                        <div class="form-line">
                                            <input disabled="disabled" id="email" type="email" class="form-control" name="email" value="{{ $user->email }}" placeholder="Alamat Email" required>

                                            @if ($errors->has('email'))
                                            <span class="help-block">
                                            <strong>{{ $errors->first('email') }}</strong>
                                            </span>
                                            @endif
                                        </div>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="input-group input-group-lg">
                                        <span class="input-group-addon">
                                            <i class="material-icons">lock</i>
                                        </span>
                                        <div class="form-line">
                                            <input id="password" type="password" class="form-control" name="password" minlength="6" placeholder="Password (minimal 6 karakter)">

                                            @if ($errors->has('password'))
                                            <span class="help-block">
                                            <strong>{{ $errors->first('password') }}</strong>
                                            </span>
                                            @endif
                                        </div>
                                    </div>
                                </div>
                                <button class="btn btn-block btn-lg bg-gelap waves-effect" type="submit">SIMPAN</button>
                            </form>
                            </div>
                         </div>
                      </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

Mohon maaf jika berantakan, maklum baru belajar laravel, mohon bimbingannya teman-teman

avatar mbuh
@mbuh

27 Kontribusi 5 Poin

Diperbarui 7 tahun yang lalu

6 Jawaban:

itu Mbuh udah atur route, controller, dan view semuanya. Masalahnya apa? hasil yang sekarang bagiamana? orang ngga ngerti kalau ngga dikasih tahu? ada error? errornya apa?

avatar hilmanski
@hilmanski

2672 Kontribusi 2133 Poin

Dipost 7 tahun yang lalu

Mohon maaf bang @hilmanrdn kalo saya kurang jelas dalam menyampaikan, saya betulkan terlebih dahulu, dan saya coba buat menjadi lebih jelas:

Yang diinginkan: Jadi saya ingin membuat halaman untuk edit profil semua user dan admin, dengan url statis www.domain.com/edit-profil , jadi bukan dinamis yang misal menyesuaikan id seperti ini www.domain.com/edit-profil/{id}

Saya coba perjelas dengan gambar, untuk tampilan form dan urlnya

Yang dilakukan: Route

Route::get('/edit-profil','ProfilController@indexprofil');
Route::post('/edit-profil','ProfilController@editprofil');
Route::PUT('/edit-profil','ProfilController@sudahupdateprofil');

ProfilController (saya fokuskan pada method updatenya langsung, detail profilcontroller lengkapnya ada di pertanyaan diatas)

 public function sudahupdateprofil(Request $request)
    {
        $this->validate($request,[
          'name' => 'required|max:255',
          'username' => 'required|min:3|max:20|unique:users',
          'password' => 'required|min:6|confirmed',
        ]);

        Auth::user()->update([
           'name' => $request->name,
           'username' => $request->username,
           'password' => $request->password
        ]);

        return redirect('/edit-profil');
}

view edit profil (saya fokuskan pada formnya langsung, detail view edit-profil lengkapnya ada di pertanyaan diatas)

 <form method="POST" type="hidden" name="_method" value="PUT" action="/edit-profil">
{{ csrf_field() }}

<input id="name" type="text" id="name" class="form-control" name="name" value="{{ $user->name }}" placeholder="Nama Lengkap" required autofocus>

<input type="text" id="username" class="form-control" value="{{ $user->username }}" placeholder="Username">

<input disabled="disabled" id="email" type="email" class="form-control" name="email" value="{{ $user->email }}" placeholder="Alamat Email" required>

<input id="password" type="password" class="form-control" name="password" minlength="6" placeholder="Password (minimal 6 karakter)">
<button class="btn btn-block btn-lg bg-gelap waves-effect" type="submit">SIMPAN</button>
</form>

Pertanyaan:

 - Data tetap tidak terupdate
Tidak muncul error
Apakah ada kesalahan dalam kodingnya? (saya rasa iya)

Untuk informasi tambahan, saya menggunakan Laravel 5.3

avatar mbuh
@mbuh

27 Kontribusi 5 Poin

Dipost 7 tahun yang lalu

Saran saya gini gan, kalau memang tdk muncul eror saat menjalankan, silahkan di cek dulu 1-1, misal agan fokuskan pada controller updatenya , jng di jln kan dulu query yg ada di function tsb gan, dicek dulu dg return()/dd(), misal...

     public function editprofil(Request $request)
    {
    	// Bagian yang mengHandle upload avatar user
        return('Ok, Masuk Controller');
    }

Kalau returnnya muncul, bearti bagian routenya sdh OK, kalau blm cek bagian route, kalau msh blm bisa coba ganti PUT jd POST ( di Form dan Route hrs sama), Setelah return muncul baru agan jalanin query update di controllernya, mdh2 bs membantu,,,,

avatar Rismal
@Rismal

131 Kontribusi 105 Poin

Dipost 7 tahun yang lalu

[SOLVED] Terimakasih gan @cristal , bang @hilmanrdn, dan sekolahkoding

yang saya lakukan:

- edit value pada form menjadi post (setelah baca artikel di link http://stackoverflow.com/questions/8054165/using-put-method-in-html-form) - hapus route::put - masukan isi method 'sudahupdateprofil' ke method 'editprofil' (dijadikan satu)

avatar mbuh
@mbuh

27 Kontribusi 5 Poin

Dipost 7 tahun yang lalu

@mbuh sy tambahkan juga, sedikit2 belajar debug gan dari apa yg kita kerjakan. karena dari situ nanti kita bisa mahir. Karena agan juga tidak mendapati pesan error saran sy, lakukan uji coba berikut ini, biar bisa dapat dimn masalahnya dan nanti dipost biar lebih jelas errornya karena apa. Kan alur prosesnya adalah route->controller->view nah bisa dites disitu satu persatu.

1. Cek langsung apakah route dan controller yg digunakan berjalan dengan baik/tidak error

// ini routenya
Route::get('/edit-profil','ProfilController@indexprofil');

// ini method controllernya
public function indexprofil()
{
  // disini kita lakukan uji coba apakah route dan controllernya sudah OK dengan cara misalnya
  return 'OK';
  return view('belakangs.admins.edit-profil', array('user' => Auth::user()) );
}

cek juga viewnya.

Khusus untuk Route::post dan Route::put returnnya seperti ini:

// untuk memastikan bahwa semua data terkirim
return $request->all();

Untuk kasus agan ini, nampaknya masalahnya ada di view bagian form, cek code berikut:

// Versi agan
<form method="POST" type="hidden" name="_method" value="PUT" action="/edit-profil/">
...
</form>

// Semestinya untuk form yg menuju Route::post begini:
<form method="POST" action="/edit-profil">
...
</form>

// Semestinya untuk form yg menuju Route::put begini:
<form method="POST" action="/edit-profil">
// tambahkan kode berikut
<input type="hidden" name="_method" value="PUT">
// atau versi yang lebih singkat cukup gini
{{ method_field('put') }}
...
</form>

avatar onirusama
@onirusama

265 Kontribusi 184 Poin

Dipost 7 tahun yang lalu

nice kalo udah berhasil, betul kalo tetep routenya mau PUT yang perlu ditambahkan di input type _methodnya seperti yang agan @onirusama tulis

 <input name="_method" type="hidden" value="PUT">

begitu juga dengan method-method lain selain get dan post

avatar hilmanski
@hilmanski

2672 Kontribusi 2133 Poin

Dipost 7 tahun yang lalu

Login untuk ikut Jawaban