CodeIgniter - 如何将表单中的值作为NULL而不是0发布

时间:2014-06-26 07:58:44

标签: php mysql database forms codeigniter

在我的数据库中,它是一个表: 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);   
}

我做错了什么?

5 个答案:

答案 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);
    }

注意:您当然可以在每个输入上手动修复它,但由于这是我第二次浪费时间,我想找到一个全局解决方案。