пустая функция возвращает false, когда должна вернуть true codeigniter - PullRequest
0 голосов
/ 08 мая 2018

Я создаю веб-сайт доставки.

Если у вас есть учетная запись, для деталей доставки у вас есть 2 варианта:

  1. Используйте сведения о доставке учетной записи (вы заполняете их, когдаВы регистрируетесь),
  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__);
            }
        }

Ответы [ 4 ]

0 голосов
/ 08 мая 2018

Вы столкнулись с этой проблемой, потому что вы инициализируете массив перед проверкой на empty () .

$data_pos = array(
    'telephone' => $this->input->post('phone_pos'),
    'address' => $this->input->post('address_pos'),
    'details' => $this->input->post('details')
);
0 голосов
/ 08 мая 2018

Проблема в том, что вы заполняете массив данными, которые они ввели, даже если они не вводят никаких данных. Ключ будет в массиве с пустым значением, поэтому в массиве будет содержимое ...

$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){
0 голосов
/ 08 мая 2018

Это потому, что он никогда не будет пустым, если вы просто объявите массив с ключами, определенными в предыдущих строках.

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

Этот массив не пуст, даже если входные значения равны NULL. Вы просто создаете ключи телефона, адреса и реквизиты, чтобы ... не пусто.

0 голосов
/ 08 мая 2018

используйте array_filter для проверки пустого значения или нет

замени свой код

if (пусто ($ data_pos) == false) {

до

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

если вы хотите проверить, 3 поля не должны быть пустыми, добавьте значение, подобное этому,

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