Значение NULL сохраняется в базе данных вместо предоставленной пользователем информации

#mysql #angularjs #laravel

#mysql #angularjs #laravel

Вопрос:

Я новичок в laravel и сталкиваюсь со следующей проблемой

Моя проблема

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я отправляю форму после заполнения firstname lastname и phone, тогда все идет хорошо, за исключением одного, что в моей базе данных MYSQL данные сохраняются как firstname: NULL lastname: NULL и phone: NULL вместо сохранения данных, которые я ввел.

У меня есть форма angularjs, в которой есть такие поля, как firstname lastname и phone. при отправке он переходит в submitContact() в контроллере:

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 это связано с моим laravel через маршруты.

мой route.php:

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

мой 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";
}
  

мой contact.php:

 <?php

namespace App;

use IlluminateDatabaseEloquentModel;

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

?>
  

Теперь моя проблема

когда я печатаю $ user, я получаю сообщение об ошибке, так как мой массив НЕ улавливает вывод моих отправленных данных print_r ($user) в окне консоли:

 [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
    )
  

Я хочу знать, где я допускаю ошибку и как я могу исправить эту ошибку.

Благодарю вас в ожидании.

Комментарии:

1. Не могли бы вы сказать мне, каков результат dd($request-> all());

2. Я тоже пробовал это, но дело в том, что он сохраняет только Null как значение всего поля в таблице контактов моей базы данных.

3. Вы получаете ответ на запрос?, Когда вы выполняете dd($request-> all()), вы можете увидеть запрос в консоли вашего браузера.

4. Пожалуйста, сообщите нам, каков ответ на dd($request-> all());

5. Я получаю пустой массив, когда возвращаю запрос $, и в окне журнала консоли он показывает весь внутренний скрипт

Ответ №1:

Попробуйте это:

 $user = new Contact();
  

Вместо этого:

 $user = new contacts;
  

Кроме того, измените имя класса на class Contact extends Model , а имя файла на Contact.php .

В качестве альтернативы, поскольку вы используете $fillable , вы можете создать новую строку:

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

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

Комментарии:

1. Спасибо за ваш ответ, но он не работает.. Я также попробовал Contact::create($request-> all()); но его сохранение только NULL в качестве значения в базе данных

2. Измените имя класса и имя файла. Вы получаете какие-либо ошибки?

Ответ №2:

Я думаю, вам следует использовать POST вместо 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);
       });
  

И

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

И я заметил, что вы отправляете в /index.php/user/addnew
И ваш маршрут отличается '/user/addnew'
'/index.php/user/addnew' и '/user/addnew' отличается.
попробуйте опубликовать localhost:8000/user/addnew вместо

Чтобы объяснить:

/user/addnew всегда обращайтесь к host:port/user/addnew

While user/addnew просто объединит его с вашим текущим URL

например, если вы в настоящее время: localhost:8000/users/1

Нажатие на ссылку user/addnew приведет вас к localhost:8000/users/1/user/addnew , а ссылка на /user/addnew приведет вас к localhost:8000/user/addnew

Редактировать:

Это избыточно?

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

То, что вы отправляли, это:

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

Я думаю, вы можете отправить это вместо:

$scope.addnew

и опять же, вы должны использовать POST, а не GET .

вы уже обновили свой http-запрос на post? вы обновили URL-адрес?

Комментарии:

1. На случай, если вы не поняли мое объяснение xD: webmasters.stackexchange.com/questions/56840 /…

2. Было бы здорово, если бы вы могли объяснить мне, как отправлять данные JSON со стороны angularjs и как получить те же данные на стороне laravel, чтобы их можно было сохранить в таблице mysql. Благодарю вас в ожидании

3. Я обновил свой ответ, возможно, ваш запрос работает, но я думаю, что ваш $request равен NULL, потому что это запрос GET. Запросы GET предназначены для извлечения данных, а не для ввода данных. хотя, мое второе предположение заключается в том, что ваши $scope.firstname, $scope.phone и $scope.lastname пусты. попробуйте console.log($scope.addnew) после установки его атрибутов. Таким образом, мы можем увидеть, действительно ли в нем есть данные.

4. Спасибо за ваш ответ и указание на мою ошибку.. Я видел еще одну вещь, которую я отправляю в json-данные в Laravel.. laravel не может получить этот json, и именно поэтому он выдает null в качестве значения в таблице.. Как я могу получить данные json в контроллере laravel ..??

5. если вы dd($request-> all()); и он возвращает НУЛЕВОЙ или нулевой массив. Тогда проблема связана с интерфейсом. попробуйте войти в систему как на стороне laravel, так и на стороне angular, чтобы увидеть, где происходит ошибка.

Ответ №3:

На самом деле, я достиг этого, используя $request->input('firstname'); $request->input('firstname'); $request->input('firstname'); , поскольку, это был JSON вот почему. Иначе, если бы я использовал блейд-файл Laravel, я мог бы сделать это с помощью вышеуказанных решений.