是否还有其他选项可以使用CodeIgniter在数据库中插入数据?

时间:2017-10-10 10:41:55

标签: php codeigniter

我有一个包含30多个字段的表单。我知道如何使用CodeIgniter在数据库中提交数据。我只是想知道在没有编写整个输入邮政编码的情况下提交数据还有其他选择。我的意思是检查以下代码。它看起来很大。

$reg_dat = array(
    'surname' => $this->input->post('surname'),
    'name' => $this->input->post('firstname'),
    'age' => $this->input->post('age'),
    'school' =>$this->input->post('school'),
    'course' =>$this->input->post('course'),
    'email' => $this->input->post('email')

    'a' => $this->input->post('a'),
    'b' => $this->input->post('b'),
    'c' => $this->input->post('c'),
    'd' =>$this->input->post('d'),
    'e' =>$this->input->post('e'),
    'f' => $this->input->post('f')

    'g' => $this->input->post('g'),
    'h' => $this->input->post('h'),
    'i' => $this->input->post('i'),
    'j' =>$this->input->post('j'),
    'k' =>$this->input->post('k'),
    'l' => $this->input->post('l')

     and so on..
);

还有其他选项可以在小代码中制作上述代码吗?

4 个答案:

答案 0 :(得分:1)

$all_data = $_POST;

上面提到的行将使用与您在问题中提到的列名相同的键创建一个数组,因此您无需在帖子中显示如此多的行。

OR

$all_data = $this->input->post(NULL, TRUE);  // returns all POST items with XSS filter. This is secure way.

然后要在DB中插入所有数据,我们在Codeigniter中的语法是:

$this->db->insert('table_name',$all_data);  // Write this in your model.

所以在table_name中将插入所有数据。

答案 1 :(得分:1)

虽然使用所有$_POST元素可以很快,但最好将要插入的元素列入白名单。

$whitelist = array('a', 'b', 'c', 'd' ...);

$reg_dat = array();

foreach($key => $value in $whitelist){
    $reg_dat[$value] = $this->input->post($value);
}

在安全性方面,确保您在插入之前使用XSS过滤器以及您可能希望对这些元素执行的任何其他验证。另外,请确保您的数据库驱动程序是mysqli,pdo或其他一些比mysql更安全的驱动程序。

根据您对$_POST键不符合数据库列的以下评论,您可以执行以下操作。

$whitelist = array();
$whitelist['a'] = 'database_column_for_a';
$whitelist['b'] = 'database_column_for_b';

$reg_dat = array();

foreach($postKey => $databaseColumn in $whitelist){
    $reg_dat[$databaseColumn] = $this->input->post($postKey);
}

答案 2 :(得分:0)

如果您有POST字段名称和MySQL列名称完全相同,那么就这样做

$reg_dat = $_POST

将该数组输入DB

答案 3 :(得分:0)

简单地做:

Child

这就是全部。您将获得包含所有帖子输入字段的$reg_dat = $this->input->post(); 数组,您可以直接将其插入Codeigniter中。

  

注意:对于“使用”,这会直接确保您的输入名称和列名称必须相同。

$reg_dat

$this->db->insert('table_name',$reg_dat);

get