За последние 24 часа нас посетили 64988 программистов и 5370 роботов. Сейчас ищут 3067 программистов ...

Проблемы с foreach

Тема в разделе "PHP для новичков", создана пользователем avalan4e, 31 июл 2016.

  1. avalan4e

    avalan4e Новичок

    С нами с:
    31 июл 2016
    Сообщения:
    5
    Симпатии:
    0
    Здравствуйте.
    Внутри foreach не отзывается echo, а переменная $type не меняет своего значения даже с использованием $GLOBALS['variable'] или global.
    PHP:
    1. $type = 0;
    2. $data = json_decode($_POST['jsonData']);
    3.  
    4. foreach ($data as $key=>$value) {
    5.     echo "string";
    6.     if ($value === 'some value') $type = 1;
    7.     if ($value === 'another value') $type = 1.5;
    8.     file_put_contents("TESTING_FOLDER/TESTING_FILE.txt", $type);
    9. }
    10.  
    11. echo $type;
    П. С. Совершенно не понимаю в чем дело. Буду рад помощи.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    поставь в строке 3
    PHP:
    1. var_export($data); die;
    и покажи, чего напечатает
     
  3. avalan4e

    avalan4e Новичок

    С нами с:
    31 июл 2016
    Сообщения:
    5
    Симпатии:
    0
    NULL
    При этом массив всё же обрабатывается и правильные данные пишутся в файл
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Если Null, значит не сработал json_decode.
     
  5. avalan4e

    avalan4e Новичок

    С нами с:
    31 июл 2016
    Сообщения:
    5
    Симпатии:
    0
    Как же тогда массив обрабатывает данные?
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    @avalan4e проверь что в var_export($data);

    https://secure.php.net/manual/ru/function.json-last-error.php
    Проверяй нет ли ошибок перед foreach или использование массива.

    https://secure.php.net/manual/ru/function.json-decode.php
    Но у тебя там не массив, а объект, чтобы был массив то по документации надо вторым аргументов функции передать true: json_decode($_POST['jsonData'], true);

    Лучше собрать все данные в переменную и за один раз записать file_put_contents() а не как ты делаешь каждый цикл вызов file_put_contents().

    Если несколько пользователей запустят скрипт, то файл TESTING_FOLDER/TESTING_FILE.txt можешь битый получить.
    Надо блокировки использовать, MySQL базу данных, отдельный файл каждому пользователю и т. д.
     
  7. avalan4e

    avalan4e Новичок

    С нами с:
    31 июл 2016
    Сообщения:
    5
    Симпатии:
    0
    @denis01 в var_export($data); NULL
    Ошибок перед foreach нет. Проверяю следующим образом:
    PHP:
    1. switch (json_last_error()) {
    2.         case JSON_ERROR_NONE:
    3.             echo ' - Ошибок нет';
    4.         break;
    5.         case JSON_ERROR_DEPTH:
    6.             echo ' - Достигнута максимальная глубина стека';
    7.         break;
    8.         case JSON_ERROR_STATE_MISMATCH:
    9.             echo ' - Некорректные разряды или не совпадение режимов';
    10.         break;
    11.         case JSON_ERROR_CTRL_CHAR:
    12.             echo ' - Некорректный управляющий символ';
    13.         break;
    14.         case JSON_ERROR_SYNTAX:
    15.             echo ' - Синтаксическая ошибка, не корректный JSON';
    16.         break;
    17.         case JSON_ERROR_UTF8:
    18.             echo ' - Некорректные символы UTF-8, возможно неверная кодировка';
    19.         break;
    20.         default:
    21.             echo ' - Неизвестная ошибка';
    22.         break;
    23.     }
    Пересылаю в .php следующий объект:
    Код (Javascript):
    1. data = "string";
    2. var formData = {
    3.                             "Имя": data  
    4.                         };
    5.                         alert($.toJSON(formData));
    6.                         $.ajax({
    7.                             url:'name.php',
    8.                             type:'POST',
    9.                             data:'jsonData=' + $.toJSON(formData)
    10.                         });
    Не могу понять, что не так. Ведь получается, что json_decode таки срабатывает без ошибок, но внутри лажа -- NULL
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    Посмотри что в $_POST, тоже через var_export()
     
  9. avalan4e

    avalan4e Новичок

    С нами с:
    31 июл 2016
    Сообщения:
    5
    Симпатии:
    0
    @denis01 Хмм, в $_POST похоже array ( ). Значит данные не упаковываются правильно на стороне jquery?
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    @avalan4e ага всё верно, в google chrome можно посмотреть в инструментах разработчика что там отсылается.

    Возможно проблема тут, данные должны быть правильно запакованы ещё раз,

    http://api.jquery.com/jquery.ajax/
    Лучше передавай как PlainObject или Array, как ты делаешь используя string, можно не правильно urlencode сделать.
     
    avalan4e нравится это.
  11. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.601
    Симпатии:
    423
    Адрес:
    РД, г. Махачкала.
    ну вот, человека научили делать отладку)))
     
    avalan4e и denis01 нравится это.