[英]empty function return false when it should return true codeigniter
我正在建立一個送貨網站。
如果您有一個帳戶,關於交貨詳細信息,您有兩種選擇:
我正在進行以下驗證:
用戶已登錄? 如果是,請驗證他是否輸入了一些新的交貨詳細信息(我正在使用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.