我正在使用CodeIgniter从数据库中获取JSON项目并插入它们。我最初是按照CodeIgniter网站上的教程创建的,该网站使用表单将数据发送到数据库,并且工作正常。我正在尝试修改此代码,以便您可以通过将字段值放在URL字符串中来写入数据库。因此,要获取数据,它是http://www.mcbiscuit.com/index.php/robots/。这称为机器人控制器。
您还可以放置http://www.mcbiscuit.com/robots/(Name)以查看该机器人的数据库条目。我需要修复set方法,以便您可以使用像这个http://www.mcbiscuit.com/robots/create/(Name)/(StarsIn)/(Function)这样的URL来将包含这些详细信息的条目写入数据库,但无论我做什么,它都会为这些传递NULL值。如何正确插入记录?我已经阅读了有关使用PHP写入数据库以及CodeIgniter API调用等的所有内容,但我无法找到解决方案。
控制器代码:
<?php
class Robots extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('robot_model');
$this->load->helper('url_helper');
}
public function index()
{
header('Content-type: application/json');
echo json_encode($this->robot_model->get_robots(), JSON_PRETTY_PRINT);
//$data['Robots'] = $this->robot_model->get_robots();
//$data['title'] = 'Robots';
$this->load->view('robots/index');
}
public function view($name = NULL)
{
header('Content-type: application/json');
echo json_encode($this->robot_model->get_robots($name), JSON_PRETTY_PRINT);
$this->load->view('robots/view');
}
public function create($name, $starsIn, $function)
{
$this->robot_model->set_robots($name, $starsIn, $function);
$this->load->view('robots/success');
}
}
型号代码:
<?php
class Robot_model extends CI_Model {
public function __construct()
{
$this->load->database();
}
public function get_robots($name = FALSE)
{
if ($name === FALSE)
{
$query = $this->db->get('Robots');
return $query->result_array();
}
$query = $this->db->get_where('Robots', array('Name' => $name));
return $query->row_array();
}
public function set_robots($name, $starsIn, $function)
{
//$data = parse_str($_SERVER['QUERY_STRING'], $_GET);
$data = array(
'Name' => $this->input->post('name'),
'StarsIn' => $this->input->post('starsIn'),
'Function' => $this->input->post('function')
);
var_dump($data);
return $this->db->set('Robots', $data);
}
}
路由代码,因为我不确定这是否正确:
$route['robots/create'] = 'robots/create';
$route['robots/(:any)'] = 'robots/view/$1';
$route['robots'] = 'robots';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';
答案 0 :(得分:2)
是robots/create
的路由不正确,应该是
$route['robots/create/(:any)/(:any)/(:any)'] = 'robots/create/$1/$2/$3';
这样,codeigniter知道create/
之后的任何内容都被视为GET /方法参数。
但你真的不应该使用GET参数来插入/更新/删除记录,因为例如我可以在某个网站的某个地方发布链接/图片,并将重定向链接发送到robots/create/some/idiotic/data
和任何登录您网站点击我的链接/图片的人都会将垃圾数据插入您的数据库。
谷歌进行CSRF攻击以了解有关它的更多信息以及如何防范它。
同时查看set_robots
方法,您正尝试使用创建$data
数组
$this->input->post()
但您没有使用POST,因此您的数组应该只是:
$data = array(
'Name' => $name,
'StarsIn' => $starsIn,
'Function' => $function
);