【问题标题】:Codeigniter Select JSON, Insert JSONCodeigniter 选择 JSON,插入 JSON
【发布时间】:2015-06-22 14:28:46
【问题描述】:

我有非常简单的用户数据库:user_id、user_name、user_email

我的模型是这样的:

class Users extends CI_Model {
private $table;
private $table_fields;
private $table_fields_join;

function __construct() {
    parent::__construct();

    $this->table = 'users';
    $this->table_fields = array(
            $this->table.'.user_id',
            $this->table.'.user_name',
            $this->table.'.user_email'
    );
    $this->table_fields_join = array();
}

function select(){
    $this->db->select(implode(', ', array_merge($this->table_fields, $this->table_fields_join)));
    $this->db->from($this->table);

    $query = $this->db->get();

    if($query->num_rows() > 0){
        return $query->result();
    } else {
        return false;
    }
}

function insert($data) {
    $data = array(
       'user_name'  => $data['user_name'],
       'user_email' => $data['user_email']
    );

    $this->db->insert($this->table, $data);
}

我的控制器:

class Users extends CI_Controller { 

function __construct(){
   parent::__construct();
   $this->load->model('users');
}
public function select(){
$data['query'] = $this->users->select(); 
$data = json_encode($data['query']);
echo $data;
}
public function insert($json){
  $data = json_decode($json);
  $this->users->insert($data);
  }
}

这是我的routing.php:

$route['default_controller'] = 'Welcome';
$route['users'] = 'users/select';
$route['users/insert/:(any)'] = 'users/insert';

我希望 127.0.0.1/users/select 给 json。 示例:[{"user_name":"user1","user_email":"user@user.de"}]

这个 JSON 插入我的表:127.0.0.1/users/insert/[{"user_name":"user1","user_email":"user@user.de"}]

但我的代码不起作用。 :-(

【问题讨论】:

  • 究竟是什么错误?你能发布错误日志吗?
  • 错误?没有错误。代码不起作用。我认为路由是错误的。因为我将 select 函数重命名为 index 和 default_controller = Users,所以该 select 起作用了。

标签: json codeigniter select insert routing


【解决方案1】:

你想返回json对象作为响应,所以需要在响应头中设置json类型。如给定here

public function select(){
  $data['query'] = $this->users->select(); 
  $this->output
    ->set_content_type('application/json')
    ->set_output(json_encode($data['query']));
}

插入部分需要如下编码。所以你可以使用这个生成的 url 来调用你的插入。

site_url('usres/insert/'.urlencode('[{"user_name":"user1","user_email":"user@user.de"}]'));

您的插入路线应为

$route['users/insert/:(any)'] = 'users/insert/$1';

你的插入方法应该更新为

public function insert($json){
  $json = urldecode($json);
  $data = json_decode($json);
  $this->users->insert($data);
  }
}

【讨论】:

  • 路由不工作。 $route['default_controller'] = 'welcome' 没问题。如果我将选择函数重命名为索引,并将 Welcome 更改为 Users $route['default_controller'] = 'users' 那么选择就可以了。但是 $route['users/select'] = 'users/select';和 $route['users/insert/:(any)'] = 'users/insert/$1';不管用。我的 .htaccess 文件是: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteRule ^(.*)$ index.php?$1 [L] 我改变了 config.php: $config['index_page'] = '';
  • 删除.htaccess文件并尝试使用index.php/users
  • 你加了 $config['index_page']='index.php' 回来了吗?
  • 我已经测试过了,但是没有用。首先我没有使用htaccess这个项目并且没有改变$config['index_page']='index.php'。
  • 问题已解决。我发现了这个:arifulhaque.com/… 我的问题是 AllowOverride None 到 AllowOverride All。
猜你喜欢
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
相关资源
最近更新 更多