Search code examples
phpdatabaselaravellaravel-5store

Laravel5.8 I cannot store data to my sql server


I am setting up user profile page, but I cannot insert data into mysql server.

I cannot figure it out and solve this issue.

I have index.blade.php in my profile folder, and from index page, going to create.blade.php .

When I enter the submit button, my page redirects to index.blade.php, but in mysql server, nothing is recorded.

web.php

Route::prefix('user')->group(function(){
    Route::resource('profile', 'UserController');
});

create.blade.php

<form action="{{route('profile.store')}}" method="POST">@csrf

                    <ul class="information">
                        <li>Name :<br>
                            <input type="text" class="name" name="name">
                        </li><br>
                        <li>Gender :<br>
                            <div class="gender">
                                <select name="gender" id="" name="gender">
                                    <option class="option" value="" selected="selected">Select Gender</option>
                                    <option value="male" >Male</option> 
                                    <option value="female" class="selected">Female</option> 
                                    <option value="any">Any</option> 
                                </select>       
                            </div>
                        </li>   
                        <li>Country :<br>
                            <div class="country">
                                <select name="country" id="" name="country">
                                    <option value="" selected="selected">Select Country</option> 
                                    <option value="United States" class="selected">United States</option> 
                                    <option value="United Kingdom">United Kingdom</option>      
                                </select>
                            </div>    
                        </li><br>
                        <li>Birthday :<br>
                            <input type="text" class="birthday" id="bod" name="bod">
                        </li><br>
                        <li>User Description :<br>
                            <textarea name="description" id="" cols="60" rows="10"></textarea></li>
                    </ul>
                    <button type="submit" class="saveBtn">Save</button>
                </div>
            </form>
            </div>

UserController.php

public function index()
    {
        return view('profile.index');
    }

    public function create()
    {
        return view('profile.create');
    }

public function store(Request $request) {

        $user_id = auth()->user()->id;

        Profile::where('user_id',$user_id)->update([
            'name'=>request('name'),
            'gender'=>request('gender'),
            'country'=>request('country'),
            'bod'=>request('bod'),
            'description'=>request('description')
        ]);

        return redirect()->route('profile.index');
    }

Profile.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Profile extends Model
{
    protected $fillable = [
        'user_id','name', 'gender', 'country', 'bod', 'description'
    ];
}

Solution

  • If you need to update an existing record:

    $user_id = auth()->user()->id;
    
    $update = Profile::where('user_id',$user_id)->update([
                    'name'=>$request->name,
                    'gender'=>$request->gender,
                    'country'=>$request->country,
                    'bod'=>$request->bod,
                    'description'=>$request->description
                ]);
    
        if($update){
            return redirect()->route('profile.index');
        }else{
            //do something if fails
        }
    

    But if you need a add a new profile then:

    $create= Profile::create([
                        'user_id'=>auth()->user()->id,
                        'name'=>$request->name,
                        'gender'=>$request->gender,
                        'country'=>$request->country,
                        'bod'=>$request->bod,
                        'description'=>$request->description
                    ]);
    
            if($create){
                return redirect()->route('profile.index');
            }else{
                //do something if fails
            }