空函数 return false 当它应该 return true codeigniter

empty function return false when it should return true codeigniter

我正在建立一个送货网站。

如果您有一个帐户,您有 2 个选择的交货详细信息:

  1. 使用帐户送货详细信息(注册时填写),
  2. 使用不同的送货详细信息(您在购物车中完成)

我正在进行这些验证:

用户已登录?如果是,请验证他是否输入了一些新的交付详细信息(我正在使用 POST 来获取值,并且我正在用它们制作一个数组 - $data_pos)。如果他输入了,那么 empty($data_pos) 将是 false,用他的名字(来自账户)和总价创建一个新数组并将订单插入数据库。

如果用户未登录,他将需要完成详细信息才能继续。

问题是,即使$data_pos(他可以完成覆盖账户发货明细的发货明细)是否为空,功能empty总是继续false 所以即使他什么都没输入,它也会说他输入了一些东西。

注意:这是我为 print_r 数组和 die.Just 调试目的而创建的函数。

echo '<pre>';
      print_r($data);
die();

型号:

        if($this->session->userdata('logged_in')){
            $data_pos = array(
                'telephone' => $this->input->post('phone_pos'),
                'address' => $this->input->post('address_pos'),
                'details' => $this->input->post('details'),
            );
            if(empty($data_pos) == false){
                $data = array(
                    'client_name' => $this->session->userdata('email'),
                    'telephone' => $this->input->post('phone_pos'),
                    'address' => $this->input->post('address_pos'),
                    'details' => $this->input->post('details'),
                    'price' => $this->cart->total(),
                );
                echo '<pre>';
                    print_r($data_pos);
                    echo 'second array is not empty';
                die("\n".'die in '. __FILE__ . ' at line '. __LINE__);
            }else{
                $data = array(
                    'client_name' => $this->session->userdata('email'),
                    'telephone' => $this->session->userdata('phone'),
                    'address' => $this->session->userdata('address'),
                    'details' => $this->input->post('details'),
                    'price' => $this->cart->total(),
                );
                echo '<pre>';
                    print_r($data);
                    echo 'i take informations from account beacuse the second array is empty';
                die("\n".'die in '. __FILE__ . ' at line '. __LINE__);
            }
        }

使用array_filter检查是否为空值

替换您的代码

if(empty($data_pos) == false){

if(array_filter($data_pos)){
    // true
}else{
    // false
}

如果你想检查 3 个字段不应该是空值,像这样添加,

if(count(array_filter($data_pos)) == 3){

问题是您正在用他们输入的详细信息填充数组,即使他们没有输入任何数据。键将在数组中,值为空,因此数组中将有内容...

$data_pos = array(
    'telephone' => $this->input->post('phone_pos'),
    'address' => $this->input->post('address_pos'),
    'details' => $this->input->post('details'),
);
if(empty($data_pos) == false){

您可以做到的一种方法是过滤输入以删除空白值

$data_pos = array(
    'telephone' => $this->input->post('phone_pos'),
    'address' => $this->input->post('address_pos'),
    'details' => $this->input->post('details'),
);
$data_pos = array_filter($data_pos);
if(empty($data_pos) == false){

这是因为如果您只声明一个数组,其中包含在前面几行中定义的键,它永远不会为空。

        $data_pos = array(
            'telephone' => $this->input->post('phone_pos'),
            'address' => $this->input->post('address_pos'),
            'details' => $this->input->post('details'),
        );

即使输入为 NULL,此数组也不为空。您只需创建钥匙电话、地址和详细信息,所以...不是空的。

您遇到此问题是因为您在检查 empty().

之前初始化数组
$data_pos = array(
    'telephone' => $this->input->post('phone_pos'),
    'address' => $this->input->post('address_pos'),
    'details' => $this->input->post('details')
);