我
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] => [email protected] [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,看看我是否得到了一些字段名称错误...但不起作用...
有什么建议吗??
无需捕获内部的 POST var
$var
。您可以很好地看到模型内部的 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;
}
表单中的字段名称必须与表中的列名称相对应。 消息 Message: Call to a member function insert() on null 意味着您忘记加载数据库库,就像 remiheens 所说的那样。
但我的建议是,对您的字段使用表单验证,这样您就可以确保所有必需的字段都使用每个字段所需的数据格式完成。尽管这可能需要分配编码,但没有其他安全方法可以避免数据库操作错误。您无法信任用户正确插入数据,这就是您需要表单验证的原因。
在这里
$var = $this->input->post(null, TRUE);
你使用null
。 null
不是有效的输入名称。 name = ''
这会起作用
$this->input->post('user_name',TRUE);
因为它有
input
标签name
(name = 'user_name'
)。
我们在输入帖子字段旁边使用
来允许 XSS 保护,TRUE)
$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');
}
这是因为您的数据库未加载到 codeigniter 实例中。 ($this->db) 只需尝试自动加载“数据库”库(config/autoload.php)或在模型中加载/连接数据库:
$this->加载->数据库();
不要忘记编辑您的 config/database.php ;)
我每次都会处理数百个字段,但我基本上也会验证每个字段。我总是这样做:
$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);
$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;
}
}