我正在建立一个交付网站。
如果您有帐户,有关递送详细信息,您有2个选项:
我正在进行这些验证:
用户已登录?如果是,请验证他是否输入了一些新的投放详细信息(我使用POST
来获取值并使用它们制作数组 - $data_pos
)。如果他输入了,所以empty($data_pos)
将是false
,使用他的名字(来自帐户)和总价格创建一个新数组,然后在数据库中插入订单。
如果用户未登录,则需要完成详细信息以继续。
问题在于,即使$data_pos
(他可以完成以覆盖帐户投放详细信息的投放详情)为空,但empty
函数始终为false
所以,即使他什么也没有进入,也会说他输了一些东西。
注意:这是我对print_r
一个数组和死的函数。只是调试目的。
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__);
}
}
答案 0 :(得分:3)
使用array_filter
检查空值
替换你的代码
if(empty($ data_pos)== false){
到
if(array_filter($data_pos)){
// true
}else{
// false
}
如果要检查3个字段不应为空值,请添加如下,
if(count(array_filter($data_pos)) == 3){
答案 1 :(得分: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){
答案 2 :(得分:2)
那是因为如果你只是声明一个带有前一行中定义的键的数组,那么它永远不会是空的。
$data_pos = array(
'telephone' => $this->input->post('phone_pos'),
'address' => $this->input->post('address_pos'),
'details' => $this->input->post('details'),
);
即使输入为NULL,此数组也不为空。您只需创建按键电话,地址和详细信息,以便......不为空。
答案 3 :(得分:-1)
您遇到此问题,因为在检查 empty()之前初始化数组。
$data_pos = array(
'telephone' => $this->input->post('phone_pos'),
'address' => $this->input->post('address_pos'),
'details' => $this->input->post('details')
);