I'm working in Laravel 5.2, and using the Eloquent ORM for dealing with Database. I tried to update user data in database but when I click on my UPDATE button it gives me the error below. I am using the PUT method for updating the data in database as per Laravel REST rules.
Error URL :
http://localhost/users?_token=wazgR1tQaznQwRdejXdx4g3jLgbtlfPLIeIiXdRy&name=warka&email=&password=
Error:
Object not found!
The requested URL was not found on this server. The link on the referring page seems to be wrong or outdated. Please inform the author of that page about the error.
If you think this is a server error, please contact the webmaster.
Error 404
localhost Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8
User Controller:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\View;
use App\User;
class UsersController extends Controller
{
public function create(){
return view('create');
}
public function store(){
$rules = array(
'name' => 'required|unique:users',
'email' => 'required|unique:users',
'password' => 'required|min:5'
);
$validator = Validator::make(Input::all(),$rules);
if($validator->fails()){
return Redirect::to('http://localhost/laravelking/users/create')->withInput()->withErrors($validator);
}else{
User::create(array(
'name' => Input::get('name'),
'email' => Input::get('email'),
'password' => Input::get('password')
));
return Redirect::to('http://localhost/laravelking/users');
}
}
public function index(){
return view::make('users')->withUsers(User::all());
}
public function show($id){
$user = User::find($id);
if($user == null){
return Redirect::to('http://localhost/laravelking/users');
}else{
return View::make('profile')->withUser($user);
}
return 'list '.$id;
}
public function update($id){
$rules = array(
'name' => 'required|unique:users',
'email' => 'required|unique:users',
'password' => 'required|min:5'
);
$validator = Validator::make(Input::all(),$rules);
if($validator->fails()){
return Redirect::to('http://localhost/laravelking/users/'.$id.'/edit')->withInput()->withErrors($validator);
}else{
$user = User::find($id);
if(Input::has('name')) $user->name = Input::get('name');
if(Input::has('email')) $user->email = Input::get('email');
if(Input::has('password')) $user->password = Input::get('password');
$user->save();
return Redirect::to('http://localhost/laravelking/users/'.$id);
}
}
public function edit($id){
$user = User::find($id);
if($user == null){
return Redirect::to('http://localhost/laravelking/users');
}else{
return View::make('edit')->with('id',$id);
}
}
public function delete($id){
return 'list'.$id;
}
}
View Update Form :
<form role="form" method="PUT" action="users/".$id>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<label for="username">New Name:</label>
<input type="username" class="form-control" name="name" id="name">
</div>
<div class="form-group">
<label for="email">New Email address:</label>
<input type="email" name="email" class="form-control" id="email">
</div>
<div class="form-group">
<label for="pwd">New Password:</label>
<input type="password" name="password" class="form-control" id="pwd">
</div>
<div class="checkbox">
<label><input type="checkbox"> Remember me</label>
</div>
<button type="submit" class="btn btn-default">Update</button>
</form>
Profile VIEW From Where I enter to update View is :
<div class="container">
<div class="col-md-8 col-lg-8 col-sm-12">
<div class="jumbotron">
<h1> Hello {!! $user->name !!}</h1>
<h3> Your Email is {!! $user->email !!}</h3>
<h3 style="color:red"> Your Password is {!! $user->password !!}</h3>
<h1> {!! Html::link('users/'.$user->id.'/edit','Edit ') !!}</h1>
</div>
</div>
</div>
Route :
Route::group(['middleware' => ['web']], function () {
//
Route::resource('users','UsersController');
});
Updated :
Just changed the Form Method to :
<form role="form" action='http://localhost/laravelking/users/<?php echo $id; ?>' method="PUT">
I.e $id to PHP echo and it worked but data in DB is not updated !
The New URL now looks like this:
http://localhost/laravelking/users/1?_token=wazgR1tQaznQwRdejXdx4g3jLgbtlfPLIeIiXdRy&name=Lololololol&email=Lololololol%40gaic.com&password=Lololololol
But problem is data is not updated in DB
http://localhost/users/4/users?_token=wazgR1tQaznQwRdejXdx4g3jLgbtlfPLIeIiXdRy&name=John+Doe&email=john%40gmail.com&password=john1234then this meanshttp://localhost/users/4/usersdoesn't even exist. Which means it can't find a route for that. This is not a Laravel error, the 404 comes from your browser saying that it can't find the requested URL.Usersupdate in your question