是什么原因导致无法使用 AngularJS 和 Codeigniter 3 在 MySQL table 中插入数据?
What causes this failure to insert data in a MySQL table with AngularJS and Codeigniter 3?
我正在使用 Codeigniter 3.1.8 和 AngularJS v1 开发 博客应用程序。 7.8.
应用程序的仪表板是 "pure" Codeigniter,具有模型、控制器和视图,而前端由 AngularJS 管理和显示的 JSON 组成。
我无法通过 AngularJS.
从前端添加 post 评论
我的 AngularJS 控制器如下所示:
// Post comment
.controller('PostCommentController', ['$scope', '$http', '$routeParams',
function($scope, $http, $routeParams) {
const slug = $routeParams.slug;
$http.get('api/' + slug).then(function(response) {
let post_id = response.data.post.id
$scope.newComment = {
slug: $routeParams.slug,
post_id: post_id,
name: $scope.name,
email: $scope.email,
comment: $scope.comment
};
$scope.createComment = function(){
console.log($scope.newComment);
$http.post('api/comments/create/' + post_id, $scope.newComment);
};
});
}])
我的 Codeigniter Comments 控制器(在 API 内):
class Comments extends CI_Controller {
public function __construct()
{
parent::__construct();
}
public function create($post_slug){
$data = json_decode(file_get_contents('php://input'), TRUE);
$this->Comments_model->create_comment($post_id);
}
}
在 Comments_model 模型中我有:
public function create_comment($post_id) {
$data = [
'post_id' => $post_id,
'name' => $this->input->post('name'),
'email' => $this->input->post('email'),
'comment' => $this->input->post('comment'),
'aproved' => 0,
'created_at' => date('Y-m-d H:i:s')
];
return $this->db->insert('comments', $data);
}
console.log($scope.newComment);
行,在 createComment
函数内 returns 具有所有必需的对象 "details":
{
comment: "Test Angular",
email: "razvan_zamfir80@yahoo.com",
name: "Razvan Zamfir",
post_id: "67",
slug: "who-loves-a-butterfly"
}
然而,我得到一个 url 的 Failed to load resource: the server responded with a status of 500 (Internal Server Error)
错误:api/comments/create/67
并且 MySQL 插入语句看起来像这样(我在浏览器中看到它在url /api/comments/create/67):
INSERT INTO `comments` (`post_id`, `name`, `email`, `comment`, `aproved`, `created_at`) VALUES (NULL, NULL, NULL, NULL, 0, '2019-10-31 22:06:01')
我的错误在哪里?
您需要修改Comments_model::create_comment方法:
public function create_comment($commentData) {
$data = [
'post_id' => $commentData['post_id'],
'name' => $commentData['name'],
'email' => $commentData['email'],
'comment' => $commentData['comment'],
'aproved' => 0,
'created_at' => date('Y-m-d H:i:s')
];
return $this->db->insert('comments', $data);
}
并在控制器中使用 $data:
调用它
public function create($post_slug){
//also you can use $data = json_decode($this->input->raw_input_stream, TRUE);
$data = json_decode(file_get_contents('php://input'), TRUE);
$this->Comments_model->create_comment($data);
}
我正在使用 Codeigniter 3.1.8 和 AngularJS v1 开发 博客应用程序。 7.8.
应用程序的仪表板是 "pure" Codeigniter,具有模型、控制器和视图,而前端由 AngularJS 管理和显示的 JSON 组成。
我无法通过 AngularJS.
从前端添加 post 评论我的 AngularJS 控制器如下所示:
// Post comment
.controller('PostCommentController', ['$scope', '$http', '$routeParams',
function($scope, $http, $routeParams) {
const slug = $routeParams.slug;
$http.get('api/' + slug).then(function(response) {
let post_id = response.data.post.id
$scope.newComment = {
slug: $routeParams.slug,
post_id: post_id,
name: $scope.name,
email: $scope.email,
comment: $scope.comment
};
$scope.createComment = function(){
console.log($scope.newComment);
$http.post('api/comments/create/' + post_id, $scope.newComment);
};
});
}])
我的 Codeigniter Comments 控制器(在 API 内):
class Comments extends CI_Controller {
public function __construct()
{
parent::__construct();
}
public function create($post_slug){
$data = json_decode(file_get_contents('php://input'), TRUE);
$this->Comments_model->create_comment($post_id);
}
}
在 Comments_model 模型中我有:
public function create_comment($post_id) {
$data = [
'post_id' => $post_id,
'name' => $this->input->post('name'),
'email' => $this->input->post('email'),
'comment' => $this->input->post('comment'),
'aproved' => 0,
'created_at' => date('Y-m-d H:i:s')
];
return $this->db->insert('comments', $data);
}
console.log($scope.newComment);
行,在 createComment
函数内 returns 具有所有必需的对象 "details":
{
comment: "Test Angular",
email: "razvan_zamfir80@yahoo.com",
name: "Razvan Zamfir",
post_id: "67",
slug: "who-loves-a-butterfly"
}
然而,我得到一个 url 的 Failed to load resource: the server responded with a status of 500 (Internal Server Error)
错误:api/comments/create/67
并且 MySQL 插入语句看起来像这样(我在浏览器中看到它在url /api/comments/create/67):
INSERT INTO `comments` (`post_id`, `name`, `email`, `comment`, `aproved`, `created_at`) VALUES (NULL, NULL, NULL, NULL, 0, '2019-10-31 22:06:01')
我的错误在哪里?
您需要修改Comments_model::create_comment方法:
public function create_comment($commentData) {
$data = [
'post_id' => $commentData['post_id'],
'name' => $commentData['name'],
'email' => $commentData['email'],
'comment' => $commentData['comment'],
'aproved' => 0,
'created_at' => date('Y-m-d H:i:s')
];
return $this->db->insert('comments', $data);
}
并在控制器中使用 $data:
调用它public function create($post_slug){
//also you can use $data = json_decode($this->input->raw_input_stream, TRUE);
$data = json_decode(file_get_contents('php://input'), TRUE);
$this->Comments_model->create_comment($data);
}