За последние 24 часа нас посетили 22675 программистов и 1208 роботов. Сейчас ищут 752 программиста ...

Требования для $_POST

Тема в разделе "Прочие вопросы по PHP", создана пользователем KingdaKa, 27 ноя 2021.

  1. KingdaKa

    KingdaKa Новичок

    С нами с:
    7 сен 2021
    Сообщения:
    87
    Симпатии:
    16
    Отправляю с помощью fetch POST-ом данные PHP-скрипту. В переменной $_POST пусто, но скрипт выполняется точно и данные передаются точно, потому что принимаются через php://input.
    Пробовал разные headers, в частности content-type, всё копировал из заголовка, который посылается браузером обычной <form> - не помогает.
    В чем причина и, если всё-таки данные можно принять в $_POST, каким условиям они должны удовлетворять?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.825
    Симпатии:
    738
    Адрес:
    Татарстан
    Разделом не ошиблись?
    Для начала - покажите код, каким отправляете запрос
     
  3. KingdaKa

    KingdaKa Новичок

    С нами с:
    7 сен 2021
    Сообщения:
    87
    Симпатии:
    16
    Нет, не ошибся.

    Код (Javascript):
    1.     fetch('comments.php',
    2.              {
    3.                 method: 'POST',
    4.                 credentials: 'same-origin',
    5.                 mode: 'cors',
    6.                 cache: 'no-cache',
    7.                 headers: {
    8.                     'Content-Type': 'application/x-www-form-urlencoded'
    9.                 },
    10.                 redirect: 'follow',
    11.                 referrerPolicy: 'no-referrer',
    12.                 body: 'test'
    13.             });
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Читайте описание параметра body.

    application/x-www-form-urlencoded – это вам не просто строка GET-параметров. Если хотите хардкодить тело, нужно писать как мин. test=
     
  5. KingdaKa

    KingdaKa Новичок

    С нами с:
    7 сен 2021
    Сообщения:
    87
    Симпатии:
    16
    С таким параметром отсылает post-методом стандартная html-форма. Но неважно, что там будет, я пробовал всё -
    multipart/form-data; application/json; text/html; text/plain...
    В $_POST ничего не приходит.
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    Очевидно, потому, что PHP не может "расшифровать" то, что отправляете.
    Ознакомьтесь внимательно: Fetch (javascript.ru)
    Ещё чуток подробного описания: ajax - PHP "php://input" vs $_POST - Stack Overflow
     
  7. KingdaKa

    KingdaKa Новичок

    С нами с:
    7 сен 2021
    Сообщения:
    87
    Симпатии:
    16
    Ничего нового, увы, для меня нет, особенно по первой ссылке (я сейчас очень интенсивно ботаю JS по хорошей литературе), но всё равно спасибо :)

    Принимать сырые данные - не вопрос, я их легко распаршу, тут мне не привыкать :)
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    :eek: Очевидно, все же тема не для этого раздела.

    Content-Type должен соответствовать формату тела. Смысл что-то искать в $_POST при application/json; text/html; text/plain? Даже если пых при таких заголовках распарсит вам тело, это все на тоненького. Я вам показал абсолютно корректный пример тела для передачи параметра test с пустым значением в url-кодировке. Если не работает, значит имеет место опечатка в заголовке или еще какая-то элементарная ошибка.