2017-02-22 47 views
0

Я пытаюсь редактировать профиль пользователя, но я получаю эту ошибку:Обновление базы данных с помощью формы HTML Laravel

ErrorException in editController.php line 144: Creating default object from empty value

Это мой edit.blade.php

    <blockquote> 
        <p>You could edit your profile here.</p> 
        </blockquote> 

       <table width="80%"> 
        <tr> 
         <td>Last Name: </td> 
         <td><input type="text" name="lname" value='{{ $user -> lname}}' size="20"><br> 
          {{ ($errors->has('lname')) ? $errors->first('lname') : '' }} <br> </td> 
        </tr> 

        <tr> 
         <td>First Name: </td> 
         <td><input type="text" name="fname" value='{{ $user -> fname}}' size="20"><br> 
          {{ ($errors->has('fname1')) ? $errors->first('fname') : '' }} <br> </td>    
        </tr> 

        <tr> 
         <td>Middle Name: </td> 
         <td><input type="text" name="mname" value='{{ $user -> mname}}' size="20"><br> 
          {{ ($errors->has('mname')) ? $errors->first('mname') : '' }} <br> </td>     
        </tr>    

        <tr> 
         <td>Email Address: </td> 
         <td><input type="text" name="email" value='{{ $user -> email}}' size="20"> 
         <br> {{ ($errors->has('email')) ? $errors->first('email') : '' }} <br> </td>    
        </tr> 

        <tr>      
         <td> 

         <!-- <input type="hidden" name="_method" value="put">--> 
         <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
         <input type="submit" value="Update Profile" name = "submit" role="button" class="btn btn-warning" style="margin-top: 25px; margin-bottom: 7px;"> 
         <a href="/home" class="btn btn-default" role="button" style="margin-left: 5px; margin-top: 25px; margin-bottom: 7px;">Back</a> 

         </td> 
        </tr> 
       </table> 

      </form>  

Это мой editController

public function index() 

{ 

    $user = Auth::user(); 
    return view('user/profile', array('user' => $user)); 
} 

    public function edit(){ 
     //$user = User::find($id); 
     $user = Auth::user(); 
     // display the article to single page 
     return view('user/editProfile', array('user' => $user)); 

    } 

    public function update() 
    { 

     // Get the status 
      $user = Auth::user(); 

      $userf->fname = Input::get('fname'); 
      $userm->mname = Input::get('mname'); 
      $userl->lname = Input::get('lname'); 
      $usere->email = Input::get('email'); 

      $sql = "UPDATE users SET fname= ? mname= ? lname = ? email = ? WHERE id= ?"; 
      DB::update($sql, array($userf, $userm, $userl, $usere , $user)); 

      return Redirect::to('/home'); 

    } 

Это мои маршруты

Route::get('/home', '[email protected]'); 
Route::get('/editProfile', '[email protected]'); 
Route::post('/updating', '[email protected]'); 

Не могли бы вы помочь мне узнать, почему я получаю эту ошибку? Спасибо за помощь.

+0

Когда происходит ошибка? Когда вы показываете вид редактирования? Когда вы отправляете форму редактирования? И можете ли вы разместить точное содержание строки 144 с вашего контроллера? – Nerea

+0

Извините, забыли упомянуть об этом. Это было во время отправки формы редактирования. –

+0

Я не вижу, что вы объявляете $ userf, $ userm, $ userl, $ usere как объект в любом месте. – Nerea

ответ

0

Как я вижу, проблема в том, что вы используете $ userf, $ userm, $ userl, $ usere как объект, не объявляя сначала эти переменные как объект, поэтому когда вы делаете $userf->fname, вы получаете ошибку Creating default object from empty value.

Я думаю, что вам нужно всего лишь использовать объект $ user, чтобы присвоить новые свойства и сохранить его в базе данных.

Так что вы можете сделать

$user->fname = Input::get('fname'); 
$user->mname = Input::get('mname'); 
$user->lname = Input::get('lname'); 
$user->email = Input::get('email'); 

И тогда вы можете использовать Laravel ОРМ, чтобы сохранить данные $user->save();

0

Вы должны использовать $ request-> пользователь() возвращает экземпляр заверенного пользователя.

0

Я изменил мой контроллер и он работал: вот что я сделал:

public function update() 
{ 

    // Get the status 
     $user = Auth::user(); 

     $userf = Input::get('fname'); 
     $userm = Input::get('mname'); 
     $userl = Input::get('lname'); 
     $usere = Input::get('email'); 

     $save = DB::table('users') 
       ->where('id', $user->id) 
       ->update(array('fname' => $userf, 'mname'=>$userm, 'lname'=>$userl,'email'=>$usere)); 

     return redirect('/home');