@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,
        ) );
    }
}


?>
  • Вопрос задан
  • 276 просмотров
Пригласить эксперта
Ответы на вопрос 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) ?? [];
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы