簡體   English   中英

空函數應返回true時返回false

[英]empty function return false when it should return true codeigniter

我正在建立一個送貨網站。

如果您有一個帳戶,關於交貨詳細信息,您有兩種選擇:

  1. 使用帳戶發送詳細信息(在注冊時完成),
  2. 使用不同的交貨詳細信息(您可以在購物車中完成)

我正在進行以下驗證:

用戶已登錄? 如果是,請驗證他是否輸入了一些新的交貨詳細信息(我正在使用POST來獲取值,並且正在使用它們創建一個數組- $data_pos )。如果他輸入了,那么empty($data_pos)將為false ,一個帶有他的名字(來自帳戶)和總價格的新數組,並將訂單插入數據庫。

如果用戶未登錄,則需要完成詳細信息才能繼續。

問題是,即使$data_pos (交付細節,他可以完成覆蓋帳戶交貨詳情)是空的,或者不是,功能empty總是對false所以即使他進入什么,它會說,他進入事。

注意:這是我為print_r數組和die制作的函數。僅用於調試目的。

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')
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM