在我的数据库中,它是一个表: tab_companies 和一列 company_phone (大整数),其中defalut值设置为NULL。
如果某人填写表格并将电话号码字段留空,则Code Igniter应该向数据库添加NULL值,但我总是将值设为'0'。
public function add_company()
{
$data = array(
'company_short-name' => $this->input->post('company_short-name'),
'company_full-name' => $this->input->post('company_full-name'),
'company_phone' => $this->input->post('company_phone'),
'company_address' => $this->input->post('company_address'),
);
return $this->db->insert('tab_companies', $data);
}
我做错了什么?
答案 0 :(得分:4)
你可以这样做,把它设置为NULL
,以防它是空的,如:
$company_phone = $this->input->post('company_phone');
...
'company_phone' => (!empty($company_phone)) ? $company_phone : NULL,
...
答案 1 :(得分:2)
elif tokens[i].isdigit():
val = int(tokens[i])
while i+1 < len(tokens) and tokens[i+1].isdigit():
i += 1
val = (val * 10) + int(tokens[i])
values.append(val)
答案 2 :(得分:1)
基于上面的Sudhir的回答,我创建了一个小帮助函数来简化我的帮助文件:
function nullAllowedInput($name, $post = TRUE)
{
if($post)
return (empty($_POST["$name"])) ? NULL : get_instance()->input->post("$name", TRUE);
return (empty($_GET["$name"])) ? NULL : get_instance()->input->get("$name", TRUE);
}
必要时从控制器呼叫:
// POST
// load the helper file here or via autoload.php
$data = [
'name' => nullAllowedInput('name'),
'phone' => nullAllowedInput('phone')
];
答案 3 :(得分:0)
我刚刚找到了自动解决方案。您只需通过覆盖CI_Input
方法来扩展post()
类。
在MY_Input
中创建一个/application/core/MY_Input.php
类
class MY_Input extends CI_Input {
public function post($index = NULL, $xss_clean = NULL)
{
$value= $this->_fetch_from_array($_POST, $index, $xss_clean);
return $value === '' ? null : $value;
}
}
从现在开始,每个空的POST
值都将转换为NULL
。
答案 4 :(得分:0)
此线程提供信息:https://forum.codeigniter.com/thread-72905.html
我所做的是尝试直接在 post()
函数中修复数据。所以我复制了原来的函数,在 MY_Input.php 中扩展了它,并使用这个函数将空字符串 '' 递归地转换为 NULL(以防你通过表单提交一个数组)。它运行良好,imo 应该在 codeigniter 中。
private function convertEmptyStrToNull($variable_to_fix)
{
if (is_array($variable_to_fix))
{
foreach ($variable_to_fix as $key => $item)
{
$fixed_variable[$key] = $this->convertEmptyStrToNull($item);
}
}
else
{
$fixed_variable = ($variable_to_fix === '') ? NULL : $variable_to_fix; // NOTE: change to a random number to debug, else can't see in log empty ''
}
return $fixed_variable;
}
然后在 post()
中通过 this 传递值而不是返回 return $this->_fetch_from_array($_POST, $index, $xss_clean);
public function post($index = NULL, $xss_clean = FALSE)
{
// Check if a field has been provided. It's for post() without any argument
if ($index === NULL AND ! empty($_POST))
{
$post = array();
// Loop through the full _POST array and return it
foreach (array_keys($_POST) as $key)
{
$key_value = $this->_fetch_from_array($_POST, $key, $xss_clean);
$post[$key] = $this->convertEmptyStrToNull($key_value);
}
return $post;
}
// IF A FIELD HAS BEEN PROVIDED (ex: post('name))
$post_value = $this->_fetch_from_array($_POST, $index, $xss_clean);
return $this->convertEmptyStrToNull($post_value);
}
注意:您当然可以在每个输入上手动修复它,但由于这是我第二次浪费时间,我想找到一个全局解决方案。