Database Codeigniter忽略更新数据库记录上的空数组项
嘿,伙计们,我已经为此工作了几天,但我似乎无法让它工作:( 情况是这样的 我有一个“编辑个人资料”页面。 在该页面上,您可以(顾名思义)编辑配置文件信息 这里的例子就是我要做的 数据库记录:Database Codeigniter忽略更新数据库记录上的空数组项,database,forms,codeigniter,post,record,Database,Forms,Codeigniter,Post,Record,嘿,伙计们,我已经为此工作了几天,但我似乎无法让它工作:( 情况是这样的 我有一个“编辑个人资料”页面。 在该页面上,您可以(顾名思义)编辑配置文件信息 这里的例子就是我要做的 数据库记录: ||-------||----------||-----------|| || name || surname || email || ||-------||----------||-----------|| || Amy || Nuts || an@no.com || ||----
||-------||----------||-----------||
|| name || surname || email ||
||-------||----------||-----------||
|| Amy || Nuts || an@no.com ||
||-------||----------||-----------||
我有一个表单,允许用户输入自己的数据并更改某些字段
表单字段都有与数据库字段对应的名称
<input name="name" ......
<input name="surname" ......
<input name="email" .....
在通过codeigniter的更新函数运行此命令之后,数据库记录如下所示
||-------||----------||-----------||
|| name || surname || email ||
||-------||----------||-----------||
|| || NEW || ||
||-------||----------||-----------||
我想知道的是,是否有可能让codeigniter忽略没有数据的数组项
我希望你们能帮忙。
我在这里不知所措。在发送到数据库之前,使用数组过滤器($data)删除所有空字段
此外,您似乎没有验证数据以进行更新
能否在模型中显示代码以存储更新
范例
$data['name']=$this->input->post('name');
$data['lastname']=$this->input->post('lastname');
$data=array_filter($data); //will remove empty keys
Or
if($this->input->post('name')) $data['name']=$this->input->post('name');
if($this->input->post('lastname')) $data['name']=$this->input->post('lastname');
在所有情况下,您都应该在将数据提交到数据库之前验证数据
仅作一般说明:
我建议您始终有两层验证
public $validate =array(
['field' => 'login','label' => 'lang:user_login','rules' => 'trim|required|min_length[5]|max_length[100]|xss_clean'],
['field' => 'password','label' => 'lang:user_password','rules' => 'trim|required|min_length[5]|max_length[35]|xss_clean']);
function is_valid($data,$mode=null){
if(!$this->validate || empty($data) )return false; //nothing to validate !
$config=array();
//if updating then its normal that some variables will be missing
//so lets apply rules for only data we going to update; to make sure its xss_clean, not exceed database size, trim, etc;;
if($mode = 'update'){
foreach($this->validate as $rule)if( ! empty( $data[ $rule['field'] ] )$config[]=$rule
}else{
$config = $this->validate
}
$this->form_validation->reset_validation();
$this->form_validation->set_data($data); #we are not using $_post;
$this->form_validation->set_rules($config);
return ($this->form_validation->run() === TRUE)
}
现在,在使用$this->db->insert;或update;之前的每个数据库调用中,只要使用
$this->is_valid($data,'update'); // dont set 2nd param if you are inserting and want all rules to apply;
这将验证您的所有请求
还请注意,codeigniter form_验证也可用于修改提交的值;
例如,在密码字段上使用修剪规则或md5规则
很抱歉,我的回答太长了,我希望我回答了您的问题。我使用codeigniter:)内置的表单验证,而且我的XSS筛选在codeigniter配置中始终处于启用状态。我非常同意你应该在把数据发送到数据库之前验证数据。在过去,当我不知道如何做时,我在这方面遇到了一些问题;)我从中学到:P但是谢谢你的回复。我会尽快试一试!在我的基本核心模型中使用一些代码更新了答案,以自动验证我对数据库的所有查询;很棒的编辑。我将把这个页面放在我的收藏夹中:)谢谢again@Zalaboza:我刚看过你的答案,我面临着同样的问题,我正在使用存储过程更新数据库记录。为了更新字段,我传递了字段数组。使用代码时,未执行更新查询。
$this->is_valid($data,'update'); // dont set 2nd param if you are inserting and want all rules to apply;