Codeigniter忽略更新数据库记录上的空数组项

康特罗维

大家好,我已经为此工作了几天,但我似乎无法使它起作用:(

这是情况。

我有一个“编辑个人资料”页面。顾名思义,您可以在该页面上编辑配置文件信息。

对于这里的示例,我正在尝试做。

数据库记录:

||-------||----------||-----------||
|| name  ||  surname ||   email   ||
||-------||----------||-----------||
||  Amy  ||   Nuts   || [email protected] ||
||-------||----------||-----------||

我有一个表格,可以使用户输入自己的数据并更改某些字段。

表单字段均具有与数据库字段对应的名称。

<input name="name" ......
<input name="surname" ......
<input name="email" .....

这都是非常合乎逻辑且容易的。

我遇到的问题是提交表单时。我使用HTML5构建我的网站,并在表单字段中使用占位符。我这样做是因为imo看起来不错,我可以尝试一下。当我只想更新姓氏时,其他字段保持为空。默认情况下,Codeigniter在发帖项目为空的情况下返回“ false”。

也许您可以看到我的问题。

当我将发布数据发送到模型并更新数据库记录时,它将从“名称”和“电子邮件”字段中删除数据并更新姓氏。

该数组如下所示:

array(
    "name"    =>
    "surname" => NEW
    "email"   =>
)

通过codeigniter的更新功能运行此命令后,数据库记录如下所示

||-------||----------||-----------||
|| name  ||  surname ||   email   ||
||-------||----------||-----------||
||       ||   NEW    ||           ||
||-------||----------||-----------||

我想知道的是,是否存在让Codeigniter忽略没有数据的数组项的可能性。

我希望你们能帮忙。我在这里茫然。

Zalaboza

在将其发送到数据库之前,请使用array_filter($ 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');

在所有情况下,您实际上应该始终在将数据提交到数据库之前对其进行验证;

只是一般的注意事项:

我建议您始终进行2层验证;

  1. 在控制器上验证表单(使用CI form_validation)
  2. 在模型上验证数据(也使用CI form_validation)

永远不要只相信您的控制器。我在CI中使用的最佳DRY方法是在模型中使用变量

models / demo_model.php

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; 或更新;你只是用

$this->is_valid($data,'update'); // dont set 2nd param if you are inserting and want all rules to apply;

这将验证您的所有请求;

还应注意,codeigniter form_validation也可用于修改提交的值;例如在密码字段上使用修剪规则或md5规则

很抱歉,我可能会延长我的回答时间太长,希望我回答了您的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Codeigniter更新数据库记录列表

来自分类Dev

Codeigniter更新记录-无法在数据库中更新

来自分类Dev

更新Codeigniter中的特定数据库记录

来自分类Dev

更新数据库记录

来自分类Dev

CodeIgniter更新数据库

来自分类Dev

在CodeIgniter中显示数据库记录

来自分类Dev

使用 Codeigniter 获取数据库记录

来自分类Dev

AngularJS从Laravel数据库中删除数组项

来自分类Dev

远程数据库的记录为空

来自分类Dev

远程数据库的记录为空

来自分类Dev

laravel更新数据库多个记录

来自分类Dev

错误的数据库记录正在更新

来自分类Dev

更新数据库中的记录

来自分类Dev

如何部分更新数据库记录?

来自分类Dev

使用Codeigniter更新mysql数据库

来自分类Dev

Codeigniter数据库更新问题

来自分类Dev

Codeigniter 更新数据库表

来自分类Dev

Codeigniter多维数组插入数据库

来自分类Dev

防止使用php将空数组记录提交到MYSQL数据库中

来自分类Dev

从会话数组数据更新数据库

来自分类Dev

数据库中的数组未更新

来自分类Dev

遍历POST数组并更新数据库

来自分类Dev

更新数组到SQL数据库

来自分类Dev

具有数据库记录的JQuery插件-Codeigniter

来自分类Dev

从Codeigniter中的数据库获取列记录

来自分类Dev

Codeigniter - 在表/列表中显示数据库记录

来自分类Dev

PHP - 更新/编辑数据库表中的数据/记录

来自分类Dev

Ajax使用codeigniter更新数据库中的数据

来自分类Dev

在codeIgniter中将数据数组插入到数据库中