@kentos

Как исправить Invalid argument supplied for foreach()?

Здравствуйте, как исправить ошибку Invalid argument supplied for foreach()
В $data приходит NULL
<?php
$data = json_decode(file_get_contents('php://input') ,true);

var_dump($data);

foreach ($data as $value) {
    foreach ($value as $v) {
        $end = join(',', $v) . "\n";
        file_put_contents('file1.txt', $end . "\n", FILE_APPEND);

        $hotelTitle = $v["Hotel"];
        $foodBoard = $v["Board"];
        $accomodation = $v["Accomodation"];
        $priceHotel = $v["Price"];
        $monthTour = $v["Month"];
        $TourDate = $v["TourDate"];
        $night = $v["Nights"];

        $post_data = array(
            'post_title'    => $hotelTitle,
            'post_content'  => $hotelTitle,
            'post_status'   => 'publish',
            'post_author'   => 1,
            'post_type' => 'tour'
        );

        $post_id = wp_insert_post( $post_data );

        if( is_wp_error($post_id) ){
            echo $post_id->get_error_message();
        }
        else {
            update_post_meta($post_id, 'cost_value_key', $priceHotel);
            update_post_meta($post_id, 'hotel_value_key', $hotel);
            update_post_meta($post_id, 'lft_night_field', $night);
        };

        wp_insert_term( $foodBoard, 'lftfood', array(
            'description' => $foodBoard,
            'parent'      => 0,
            'slug'        => $foodBoard,
        ) );

        wp_insert_term( $accomodation, 'lftmonth', array(
            'description' => $accomodation,
            'parent'      => 0,
            'slug'        => $accomodation,
        ) );
    }
}


?>
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ответы на вопрос 3
@magarif
Программист
Если в $data NULL, то понятно почему ошибка, вам нужно понять, почему там нуль.
Посмотрите что приносит file_get_contents('php://input')

Что вы туда передаете? Возможно там некорректный JSON либо вообще ничего
Ответ написан
Uwe_Boll
@Uwe_Boll
Я Злой и Страшный Уве Болл в Разработке знаю Толк
заключи свой форыч в такое условие:
if(is_array($data)){
//сюда вставляй форыч 
}else{
echo "foreach() требует массив или объект! ";
}

подробнее написано тут
Ответ написан
abyrvalg
@abyrvalg
Скорее всего, json невалидный. Проверить это можно как-то так:
$data = json_decode('{qwe}', true);

if (JSON_ERROR_NONE !== json_last_error()) {
    throw new \RuntimeException(sprintf(
        'JSON parsing error: `%s`',
        json_last_error_msg()
    ));
}

var_export($data, false);


Если NULL в json - это допустимое значение, то можно сконвертировать его в пустой массив:
$data = json_decode('null', true) ?? [];
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 90 000 до 140 000 руб.
Babyblog.ru Москва
от 50 000 до 80 000 руб.
Aitarget Москва
от 100 000 руб.
19 апр. 2019, в 18:35
3000 руб./за проект
19 апр. 2019, в 18:01
2000 руб./за проект