【问题标题】:How do I validate non-required fields in CodeIgniter?如何验证 CodeIgniter 中的非必填字段?
【发布时间】:2013-08-05 01:41:33
【问题描述】:

我正在 CodeIgniter 中构建 API,但在验证 UPDATE 方法时遇到问题。我的表有 3 列(加上 id):

  • 名字
  • 姓氏
  • 城市

我希望客户端能够更新 3 列中的任何一个,并将验证规则(例如 min_length[1])应用于客户端想要更新的每一列。

问题是,如果客户端发布这个:

first_name=Foo&last_name=

它跳过验证last_name,因为 CodeIgniter 将其视为“空”并且我的验证不是“必需的”。但是当活动记录尝试UPDATE MySQL 中的记录时,它会将last_name 设置为""(空)。

我不希望这些字段是必需的,但如果设置了它们,它们应该有一个最小长度。

有什么想法吗?

【问题讨论】:

  • 将当前值从数据库传递到视图文件,并将它们作为默认值插入到 html 输入中。验证类在当前版本中有一个错误,最近我向 github 上的 CI Repository 发送了一个 PR,并在 v3.0 中修复了它。这是 SO 问题stackoverflow.com/questions/17771980/…
  • 请贴出更新数据库的代码
  • @HashemQolami 没有视图 - 这是一个输出 JSON 的 API。在验证错误时,它会简单地响应错误。
  • @dianuj 这只是 ActiveRecord 的 $this->db->where('id', $id)->update('table', $this->post()); 没什么花哨的
  • @TobiasFünke 所以只需在更新行之前检查变量是否为空。

标签: codeigniter


【解决方案1】:

试试这个,我为你的场景举一个例子,这些字段不是强制性的,第一次他们有存储在 db 中的值,第二次用户只是发送空白的任何必填字段只是取消设置索引您要存储在数据库中,因此以前的值将保留在数据库中

$first_name=$this->input->post("first_name");
$last_name=$this->input->post("last_name");
$city=$this->input->post("city");
$data = array(
               'first_name' => $first_name,
               'last_name' => $last_name,
               'city' => $city
            );

if(empty($last_name)){
unset($data['last_name'])
}
if(empty($city)){
unset($data['city'])
}
$this->db->where('id', $id);
$this->db->update('mytable', $data); 

希望有意义

【讨论】:

  • 实际上empty() 打破了'0'。请改用==='' 运算符。
  • 谢谢,但是由于内置验证中的一个怪癖,执行所有这些手动覆盖似乎有点愚蠢。必须有一种方法可以正确地做到这一点......
猜你喜欢
  • 2012-05-23
  • 2019-07-09
  • 2019-07-11
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 2020-02-27
  • 2019-04-19
相关资源
最近更新 更多