我正在使用 CodeIgniter 从数据库获取 JSON 项目并插入它们。我最初是按照 CodeIgniter 站点上的教程创建的,该站点使用表单将数据发送到数据库,并且工作正常。我正在尝试修改此代码,以便您可以通过将字段值放入 URL 字符串来写入数据库。因此,要获取数据,它是 http://www.mcbiscuit.com/index.php/robots/ 。这称为机器人 Controller 。
您还可以输入 http://www.mcbiscuit.com/robots/(Name)查看该机器人的数据库条目。我需要修复 set 方法,以便您可以使用像这样的 URL http://www.mcbiscuit.com/robots/create/(Name)/(StarsIn)/(Function)将包含这些详细信息的条目写入数据库,但无论我做什么,它都会为这些传递 NULL 值。如何让它正确插入记录?我已经阅读了有关使用 PHP 写入数据库以及 CodeIgniter API 调用等的所有内容,但我找不到解决方案。
Controller 代码:
<?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';
最佳答案
是的 robots/create
的路由不正确,应该是
$route['robots/create/(:any)/(:any)/(:any)'] = 'robots/create/$1/$2/$3';
这样 codeigniter 就知道 create/
之后的任何内容被视为 GET/方法参数。
但是您确实不应该使用 GET 参数来插入/更新/删除记录,因为例如我可以在某个网站上的某个位置发布链接/图片,并将重定向链接放置到您的 robots/create/some/idiotic/data
任何登录您网站并点击我的链接/图片的人都会将垃圾数据插入您的数据库。
Google 了解 CSRF 攻击,了解有关该攻击的更多信息以及如何防范它。
同时查看set_robots
方法,您正在尝试创建 $data
数组与
$this->input->post()
但你没有使用 POST 所以你的数组应该是:
$data = array(
'Name' => $name,
'StarsIn' => $starsIn,
'Function' => $function
);
关于php - 如何使用 CodeIgniter 的 URL 参数将项目插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37667944/