Intereting Posts
Каковы причины различных форм фигурных скобок? Обновление версии Sagepay 2.22 до 3.00 – обновление PHP до шифрования AES Запрос диапазона дат MySQL Как передать массив в качестве значения в запрос soapclient PHP? Отладка PHP с помощью Eclipse? PHP & Codeigniter – как передать параметры модели? Добавить значения в один массив после функции разрыва .ajax () не будет завершен до тех пор, пока предыдущий вызов .ajax () не будет завершен? Поиск существующей электронной почты и имени пользователя в базе данных Как отправить электронную почту с помощью PHP с помощью пакета PEAR Mail со вложением Как переадресовать массив с помощью несекретных цифровых клавиш smarty работает в среде xampp, но не в среде Ubuntu apache. Зачем? Ассоциация Doctrine 2 без ограничений внешнего ключа Создание PDF-файлов с использованием TCPDF, поддерживающих все языки, в особенности CJK Как я могу выполнить блок кода ровно один раз в PHP?

Проблемы с методом POST в PHP

Проблема:

Неопределенные переменные POST после отправки формы.

Исследования и устранение неполадок:

  • Прочитайте множество вопросов здесь, почти все были связаны с отсутствием тега имени в поле формы. Все мои поля имеют тег и идентификатор.
  • Настроил мой PHP.ini, чтобы $ HTTP_RAW_POST_DATA установил -1
  • Последующие руководства по PHP.net и W3SChools

В этот момент я проиграл. Данные просто отказываются публиковать, все возвращается неопределенно. Ниже приведены HTML, PHP и два скриншота, показывающие проблему.

Я использую встроенный сервер PHPStorm в Windows.

signup.html

<div class="text-center col-md-4 col-md-offset-4"> <form id="user_signup" class="form-horizontal signInFields" action="../php/register.php" method="POST"> <input type="text" id="first_name" name="first_name" placeholder="First Name"> <input type="text" id="last_name" name="last_name" placeholder="Last Name"> <input type="email" id="user_email" name="user_email" placeholder="Email"> <input type="text" id="user_id" name="user_id" placeholder="User ID"> <input type="password" id="user_password" name="user_password" placeholder="Password"> <input type="password" id="confirm_password" name="confirm_password" placeholder="Confirm Password"> <button id="btn_signup" type="submit" name="signup_button">Sign Me Up!</button> </form> 

register.php

 // Variables from the sign-up form POST action $first_name = $_POST["first_name"]; $last_name = $_POST["last_name"]; $user_email = $_POST["user_email"]; $user_id = $_POST["user_id"]; $user_password = $_POST["user_password"]; $confirm_password = $_POST["confirm_password"]; // Add a new user to the database $conn = new mysqli($servername, $username, $password); $testQuery = mysql_insert($first_name,$last_name,$user_email,$user_id,$user_password); if($conn->query($testQuery) === TRUE){ echo "New Record Created Successfully!"; } else { echo "Error: " . $testQuery . "<br>" . $conn->error; } $conn->close(); 

Форма с заполненными полями введите описание изображения здесь

Результат после представления: введите описание изображения здесь

На данный момент я озадачен. Насколько я могу судить по W3Schools, PHP.net и различным вопросам здесь, я правильно настроил его. Однако что-то явно не работает. Любая помощь будет очень признательна.

Редактировать:

Вы используете встроенный веб-сервер PHPStorm , который имеет некоторые проблемы прямо сейчас, особенно с запросами POST, например WEB-17317 . Вы также можете обратиться к этому ответу в этом отношении.

И это может быть причиной того, что вы не смогли обработать свою форму.

Следовательно, лучшим решением было бы настроить ваш PHPStorm для использования вашего локального веб-сервера XAMPP в вашем случае для вашего текущего проекта. Для этого выполните следующие шаги:

  1. Настройте виртуальные хосты локального сервера с текущей директорией проекта как корневой каталог
  2. Убедитесь, что вы получили доступ к файлам проекта после вашей настройки на вышеуказанном шаге. Например: http://localhost/signup.html должен быть доступен через браузер.
  3. Теперь в PHPStorm перейдите в Run -> Edit Configuration и выберите каждый файл и настройте URL для каждого файла, как показано ниже . Например, для файла signup.html используется http://localhost/signup.html .
    • Вам не нужно устанавливать URL-адрес (шаг 3) для всех файлов в вашем проекте. Просто сделайте это для файла по умолчанию (start) – например, index.html или login.html или signup.html. Все остальные файлы, связанные с <a> или action="register.php" в формах, будут автоматически подаваться с локальным сервером.

Запустить - Изменить конфигурацию - Снимок экрана

Теперь вы можете использовать зеленую кнопку в PHPStorm для запуска ваших файлов HTML / PHP, и она откроет эти файлы в вашем браузере с URL-адресом, который вы настроили на шаге 1. И вы должны иметь возможность обрабатывать ваши формы без каких-либо проблем.


Но если ваша проблема вызвана некоторыми другими причинами, пожалуйста, рассмотрите следующие пункты:

  • Поля формы должны иметь атрибут имени , например «name = 'first_name» `в файле signup.html .
  • echo $_SERVER["REQUEST_METHOD"] == "POST" печатает 1 при записи в файле register.php, что означает, что ваша форма отправляется успешно.
  • Значение post_max_size в вашем php.ini устанавливается в формате #M , например 10M , любой другой формат, такой как 10MB , недействителен. Обратитесь к php.net .
  • Проверьте, если echo file_get_contents("php://input"); отображает данные в формате: first_name=John&last_name=Doe .... Обратитесь к php.net .
  • Убедитесь, что var_dump($_POST) отображает данные формы в массиве.

Надеюсь, это поможет вам. Не стесняйтесь комментировать.

Попробуй это

register.php

 <?php $errors = []; $fields = [ 'first_name', 'last_name', 'user_email', 'user_id', 'user_password', 'confirm_password', ]; $data = []; if( !empty( $_POST ) ) { foreach ($fields as $field) { if( isset( $_POST[$field] ) ) { $data[$field] = $_POST[$field]; } else { //empty field handling $errors[$field] = $field.' required!'; } } } if( empty($errors) ) { // Add a new user to the database $conn = new mysqli($servername, $username, $password); $testQuery = mysql_insert ( $data['first_name'], $data['last_name'], $data['user_email'], $data['user_id'], $data['user_password'] ); if($conn->query($testQuery) === TRUE) { echo "New Record Created Successfully!"; } else { echo "Error: " . $testQuery . "<br>" . $conn->error; } $conn->close(); } 

signup.php

 <?php require('path/to/register.php'); ?> <form id="user_signup" class="form-horizontal signInFields" action="" method="post"> <input type="text" id="first_name" name="first_name" placeholder="First Name"> <input type="text" id="last_name" name="last_name" placeholder="Last Name"> <input type="email" id="user_email" name="user_email" placeholder="Email"> <input type="text" id="user_id" name="user_id" placeholder="User ID"> <input type="password" id="user_password" name="user_password" placeholder="Password"> <input type="password" id="confirm_password" name="confirm_password" placeholder="Confirm Password"> <button id="btn_signup" type="submit" name="signup_button">Sign Me Up!</button> </form> 

ПРИМЕЧАНИЕ СТОРОНЫ (если вы новичок)

  • Используйте метод = «post» вместо метода = «POST» (только стандарты)

  • Вы не проверяете поля ввода (опасные)

Вы можете использовать кнопку типа ввода вместо кнопки, которую вы используете, в этом случае вы можете отправлять данные с помощью ajax.

Я скопировал вашу форму и (часть) вашего файла register.php и не имел никаких проблем. Данные опубликованы как ожидалось. Я боролся с чем-то подобным раньше, и это оказалось странной проблемой переадресации, поэтому мои данные POST были потеряны к моменту, когда они попали на мой контроллер. К сожалению, я могу предложить только несколько предложений по его отладке.

Я хотел бы упомянуть, что как только вы выясните свою проблему POST, вам нужно будет посмотреть на материал взаимодействия с базой данных … вы создаете объект mysqli , но вызываете функцию mysql_insert (функцию, которую я никогда не видел и не могу " t найти на php.net, поэтому я склонен думать, что ничего не собирается делать). Быстрый поиск приведет вас ко многим подробным руководствам и пошаговым инструкциям о том, как использовать mysqli , поэтому я буду откладывать их, а не пытаться объяснить все здесь (так как вы все равно пытаетесь решить проблему POST).

1] Вам не нужно использовать PDO; mysqli является прекрасным и полностью приемлемым, если вы используете его правильно ( вот некоторые сведения об обоих из php.net напрямую ).

2] Я никогда не видел стандарта, который указывает использование строчной «почты» вместо «POST» в <form> , но хотел бы иметь ссылку на него!

3] <input type="submit" value="text"> и <button type="submit">text</button> функционально такие же, как и в, обе будут отправлять форму без проблем. Есть некоторые различия между ними (возможность динамически устанавливать «значение» вместо того, что-то вроде «innerHTML» для текста , например, но это еще одна проблема.

Что касается дальнейших усилий по отладке … В register.php , как упоминалось в «Орионах», мне любопытно, что возвращает отчет $_SERVER['REQUEST_METHOD'] . В начале этого файла попробуйте die($_SERVER['REQUEST_METHOD']) и посмотрите, что он говорит. Если он говорит «POST», вы на правильном пути. Если вы выполните var_dump($_POST); в начале этого файла, со смертью / выходом после этого, что вы видите?


Было 2 экземпляра, где перенаправление лишало меня моих переменных POST, вызванных mod_rewrites, как я помню. Один из них перенаправлял запросы от mydomain.com на www.mydomain.com , и поскольку action моей формы было явно mydomain.com , все было потеряно. Другой проблемой был mod_rewrite, который был либо добавлением, либо снятием трейлинга / с запросов (я не помню, какой), но это также имело тот же базовый результат. Если у вас есть файл .htaccess , проверьте, чтобы убедиться, что ничего гнусного или не получено.

Другие вещи для проверки:

a] В вашем php.ini убедитесь, что variables_order имеет «P» в ней где-то ( ссылка )

b] Также в вашем php.ini убедитесь, что post_max_size – это что-то разумное; Я сомневаюсь, что это проблема, поскольку вы не загружаете файл, но если он был настроен на что-то очень маленькое, я могу себе представить, что это может быть проблема

c] Если вы отправляете с http страницы на страницу https , иногда это будет лишать данные POST (это может быть специфично для сервера, поскольку я чувствую, что видел эту работу иногда, а не другие)

d] Вы получили file_get_contents("php://input"); как было предложено в другом месте? Он содержал ваши данные (будет выглядеть примерно так: key1=value1&key2=value2 ) или он был слишком пустым?

e] Если вы создаете другую форму на другой странице и отправляете ее в другой файл, заполняется ли массив $ _POST?