尝试使用$ this-> input-> post()在数据库中插入数据时出现问题 - Codeigniter

时间:2015-10-14 13:37:58

标签: php mysql codeigniter

I m trying use "$this->input->post();" of Codeigniter to do not need specify each field in my form. But i在尝试插入数据库时​​遇到麻烦。

看看我的控制器:

public function cadastrar(){
        $var = $this->input->post(null, TRUE);
        $this->load->model('m_clientes');
        $this->m_clientes->inserir($var);
}

我的控制器在这里简化了,因为我知道如何在codeigniter中处理数据库。 这篇文章的结果是:

  Array ( [nome] => Raphael [sobrenome] => Schubert [cpf] => 893.528.432-89 [rg] => 4529875231908472 [telefone] => (53) 2980-5792 [celular] => (53) 9 2180-7529 [rua] => Israel de Almeida [numero] => 859 [cep] => 88.312-000 [bairro] => São Vicente [cidade] => ITAJAÍ [estado] => Santa Catarina [email] => rfswdp@gmail.com [tipo] => pf [cnpj] => 34.827.481/2834-78 [inscricaoestadual] => 34120489032814930128 [razaosocial] => Teste [nomefantasia] => Disney [dataaberturaempresa] => 10/21/15 [proprietario] => Marcos Aurelio )

我正式使用这种方式插入:

$data = array(
'user_name' => $this->input->post('user_name',TRUE);
'user_phone' => $this->input->post('user_phone',TRUE);
'user_role' => $this->input->post('user_role',TRUE);
);
$this->name_of_model->inserir($data);

并且有效......

但我试图只使用$ this-> input-> post();从表单获取所有字段。因为我的实际应用程序将有数百个字段,我试图不写每一行。

所以我的模型实际上是:

   public function inserir($var){
        if($var!=NULL):
            print_r($var);
            $this->db->insert('tb_usuarios',$var);
        endif;
    }

但我得到并且错误地说:

消息:未定义属性:Clientes :: $ db 和 消息:在null

上调用成员函数insert()

我的表名是:“tb_usuarios” 我更改了数据库中的所有字段以接受NULL,看看我是否得到一些字段名称错误...但是没有工作...

任何提示??

5 个答案:

答案 0 :(得分:1)

在此$var = $this->input->post(null, TRUE);,您使用nullnull无效输入名称。 name = ''

这将有效$this->input->post('user_name',TRUE);

cz它有input代码namename = 'user_name')。

  

我们在输入发布字段旁边使用,TRUE)来允许XSS保护

$var = $this->input->post(null, TRUE); 错了

尝试此操作时,会显示

  

消息:未定义属性:Clientes :: $ db和消息:在null 上调用成员函数insert()。

无法使用

public function cadastrar(){
        $var = $this->input->post(null, TRUE);//will never give valid response 
        $this->load->model('m_clientes');
        $this->m_clientes->inserir($var);
}

效果正常

public function cadastrar(){
        $this->load->model('m_clientes');
        $data = array(
        'user_name' => $this->input->post('user_name',TRUE);
        'user_phone' => $this->input->post('user_phone',TRUE);
        'user_role' => $this->input->post('user_role',TRUE);
        );
        $this->name_of_model->inserir($data);
        $this->load->model('m_clientes');
}

答案 1 :(得分:1)

无需捕获$var内的POST变量。你可以很好地在模型中看到POST变量。所以你需要在控制器中做的就是:

public function cadastrar(){
    $this->load->model('m_clientes');
    $this->m_clientes->inserir();
}

,在你的模型中:

public function inserir(){
    if( count($this->input->post()) > 0):
        $this->db->insert('tb_usuarios',$this->input->post());
    endif;
}

表单中的字段名称必须与表格中的列名称相对应。 消息 消息:调用成员函数insert()on null 表示您忘记加载数据库库,就像 remiheens 所说。

但我的建议是,对您的字段使用表单验证,这样您可以确保使用所需的每个字段完成所有必需的字段。虽然这可能需要分配编码,但是没有其他安全的方法来防止数据库操作上的错误。您无法信任用户正确插入数据,这就是您需要form validation的原因。

答案 2 :(得分:0)

这是因为您的数据库未加载到codeigniter实例中。 ($这 - >分贝) 只需尝试自动加载“数据库”库(config / autoload.php)或在模型中加载/连接数据库:

  

$这 - >负载>数据库();

不要忘记编辑config / database.php;)

答案 3 :(得分:0)

我每次处理数百个字段,但我基本上也验证了每个字段。我总是这样做:

$customer['name']     = $this->input->post('customer_name');
$customer['age']      = $this->input->post('customer_age');
$customer['country']  = $this->input->post('customer_country');
$customer['city']     = $this->input->post('customer_city');

// validations
if(isAgeValid($customer['age']) == FALSE)
{
   echo 'Hold on, your age...hmm check it out!';
   return;
}

$this->customers_model->add($customer);

处理插入的函数只有:

public function add($data)
{
    $data = $this->security->xss_clean($data);
    $this->db->insert('customers', $data);

    return $this->db->insert_id();
}

非常干净简单。现在,如果您不想验证这些字段,或者只是想验证其中一些字段并希望在没有验证的情况下插入其他字段,那么这就是我基于前面代码的目的:

// validations..
if(isAgeValid());

$customer = array();

foreach($_POST as $key => $value)
   $customer[$key] = $value;

$this->customers_model->add($customer);

答案 4 :(得分:-1)

$data = array(
'user_name' => $this->input->post('user_name');
'user_phone' => $this->input->post('user_phone');
'user_role' => $this->input->post('user_role');
);

$this->load->model('name_of_model');
$this->name_of_model->inserir($data);


Model:

public function inserir($data)
{
$this->db->insert('***', $data);
if ($this->db->affected_rows() > 0) {
        return true;
    }

 }