简体   繁体   中英

NULL value is saving in database instead of user submitted info

I am new to laravel and I am facing following problem

My problem

Problem im facing is that whenever I submit the form after filling firstname lastname and phone, then everything going well except one thing that in my MYSQL database data is save as firstname: NULL lastname:NULL And phone:NULL instead of saving the data which i had enter.

I have a angularjs form in which is there fields like firstname lastname and phone.on submit it goes to submitContact() in controller:

submit.js:

 var addnew = angular.module('addnew',[]);

 // create angular controller
 addnew.controller('addContactController',            
 function($scope,$location,$window,$http) {


// function to submit the form after all validation has occurred            
$scope.submitContact = function() {

    $scope.addnew = {firstname:'', lastname:'',phone:''};

        $scope.addnew.firstname=$scope.firstname;
        $scope.addnew.lastname=$scope.lastname;
        $scope.addnew.phone=$scope.phone;


         $http.get("http://localhost:8000/index.php/user/addnew",{"firstname": $scope.firstname, "phone": $scope.phone, "lastname": $scope.lastname})
        .then(function mysuccess(response) {
            $scope.mycard = response.data;
            $scope.statuscode = response.status;
            $scope.statustext = response.statustext;
            $window.alert(JSON.stringify(response));
             console.log(response.data);
           });

};

});

http://localhost:8000/index.php/user/addnew this links to my laravel through routes.

my route.php:

 Route::get('/user/addnew', 'usercontroller@store');

my usercontroller.php

 public function store(Request $request)
{

  //contacts::create(Request::all());
  $user = new contacts;// contacts is my table name and my database is defined in .env file
  $user->firstname = Input::get('firstname');
  $user->lastname = Input::get('lastname');
  $user->phone = Input::get('phone');
  $user->save();
 //I Used print_r to see that weather my submitted data is coming in $user or not:
  print_r($user);

    echo "saved";
}

my contact.php:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class contacts extends Model
{
    protected $fillable =['firstname','lastname','phone'];
}

?>

Now, My problem

when i print_r $user then i got the error as my array is NOT catching my submitted data print_r ($user) output in console window:

[fillable:protected] => Array
    (
        [0] => firstname
        [1] => lastname
        [2] => phone
    )

[connection:protected] => 
[table:protected] => 
[primaryKey:protected] => id
[keyType:protected] => int
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
    (
        [firstname] => 
        [lastname] => 
        [phone] => 
        [updated_at] => 2016-10-07 03:46:34
        [created_at] => 2016-10-07 03:46:34
        [id] => 38
    )

[original:protected] => Array
    (
        [firstname] => 
        [lastname] => 
        [phone] => 
        [updated_at] => 2016-10-07 03:46:34
        [created_at] => 2016-10-07 03:46:34
        [id] => 38
    )

I want to know where I m making mistake and how can I correct that mistake.

Thanking you in anticipation.

Try this:

$user = new Contact();

Instead of this:

$user = new contacts;

Also, change class name to class Contact extends Model and a filename to a Contact.php .

Alternatively, since you're using $fillable you can create new row:

Contact::create($request->all());

https://laravel.com/docs/5.3/eloquent#mass-assignment

I think you should use POST instead of GET.

$http.post("http://localhost:8000/index.php/user/addnew",{"firstname": $scope.firstname, "phone": $scope.phone, "lastname": $scope.lastname})
    .then(function mysuccess(response) {
        $scope.mycard = response.data;
        $scope.statuscode = response.status;
        $scope.statustext = response.statustext;
        $window.alert(JSON.stringify(response));
         console.log(response.data);
       });

And

Route::post('/user/addnew', 'usercontroller@store');

And I noticed that you are posting to /index.php/user/addnew And your route is '/user/addnew' '/index.php/user/addnew' and '/user/addnew' are different. try posting to localhost:8000/user/addnew instead

To explain:

/user/addnew always refer to host:port/user/addnew

While user/addnew will just concatenate it to your current url

for example if you're currently at: localhost:8000/users/1

Clicking a link to user/addnew will bring you to localhost:8000/users/1/user/addnew while a link to /user/addnew will bring you to localhost:8000/user/addnew

EDIT:

Is this redundant?

$scope.addnew.firstname=$scope.firstname;
$scope.addnew.lastname=$scope.lastname;
$scope.addnew.phone=$scope.phone;

What you were sending is this:

{"firstname": $scope.firstname, "phone": $scope.phone, "lastname": $scope.lastname}

I think you can send this instead:

$scope.addnew

and again, you should use POST , not GET .

did you already update your http request to post? did you update the url?

Actually, I achived this by using $request->input('firstname'); $request->input('firstname'); $request->input('firstname'); , since, it was JSON thats why. Else, If I had been using Laravel blade file then I could have done it by above solutions.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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