简体   繁体   English

使用HTML表单Laravel更新数据库

[英]Update Database using Html Form Laravel

I am trying to edit the profile of the user but I'm getting this error: 我正在尝试编辑用户的个人资料,但出现此错误:

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

This is my edit.blade.php 这是我的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>      

This is my editController 这是我的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');

    }

This is my routes 这是我的路线

Route::get('/home', 'editController@index');
Route::get('/editProfile', 'editController@edit');
Route::post('/updating', 'editController@update');

Could you help me found out why I'm getting this error? 您能帮我找出为什么出现此错误的原因吗? Thanks for the help 谢谢您的帮助

So as I can see, the problem is that you are using $userf,$userm,$userl,$usere as object without declaring first these variables like object so when you do $userf->fname you get the error Creating default object from empty value . 因此,正如我所看到的,问题是您使用$ userf,$ userm,$ userl,$ usere作为对象,而没有先声明这些变量(例如object),所以当您执行$userf->fname ,会出现错误, Creating default object from empty value

I think that you only need yo use $user object to asign the new properties and save it to database. 我认为您只需要使用$ user对象分配新属性并将其保存到数据库。

So you can do 所以你可以做

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

And then you can use Laravel ORM to save the data $user->save(); 然后可以使用Laravel ORM保存数据$user->save(); ;。

您应该使用$ request-> user()返回经过身份验证的用户的实例。

I modified my controller and it worked: here's what I did: 我修改了控制器,它起作用了:这是我做的:

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');

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM