空函数 return false 当它应该 return true codeigniter
empty function return false when it should return true codeigniter
我正在建立一个送货网站。
如果您有一个帐户,您有 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')
);
我正在建立一个送货网站。
如果您有一个帐户,您有 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')
);