POST-запрос к PHP не получает никаких данных при использовании формы вместо углового http-клиента - PullRequest
1 голос
/ 15 мая 2019

Я использую угловой http-клиент для взаимодействия с базой данных, и все работает, но когда я пытаюсь POST-данные к той же ссылке, используя форму, я получаю, что данные не определены.

Я пытался кодировать, декодировать значения, поскольку я знаю, что перед выполнением любого запроса POST и отправкой данных мне нужно выполнить метод angular.toJSON, но это не сработало.

Это мой index.php, где я получаю запрос POST из формы.

if (empty($action)) {
    if ((($_SERVER['REQUEST_METHOD'] == 'POST')) && 
             (strpos($_SERVER['CONTENT_TYPE'], 'application/json') !== false)) {

        $input = json_decode(file_get_contents('php://input'), true);

        $action = isset($input['action']) ? $input['action'] : null;
        $subject = isset($input['subject']) ? $input['subject'] : null;
        $data = isset($input['data']) ? $input['data'] : null;
    }

case 'createNote':
        // if I die() here, it prints the die()
        if(!empty($data)) {
            // if I die() here, $data is undefined.
            $data = json_decode($data);

            $user = $data[0];
            $comment = $data[1];
            $film_id = $data[2];
            $lastupdated = date("Y-m-d H:i:s");


            $sql = "INSERT INTO nfc_note (user, film_id, comment, lastupdated) 
                    VALUES (:user, :film_id, :comment, :lastupdated)";
        }
        break;

Моя форма, которую я использую для отправки POST-запроса

<form action="index.php" method="POST">
    <input type="hidden" name="action" value="create">
    <input type="hidden" name="subject" value="note">
    <input type="hidden" name="data" value="<?php echo "['username','content', 1]"; ?>">

    <input type="submit" value="Submit">
</form>

Как упомянуто выше, это работает, когда я использую http angular и параметры передачи как это:

this.createNote = function (data) {

    var defer = $q.defer(),
    data = {
        action: "create",
        subject: "note",
        data: angular.toJson(data)
    };
    $http
        .post(urlBase, data)
        .success(function (response) {
            defer.resolve({
                data: response.data
            });
        })
        .error(function (error) {
            defer.reject(error);
        });

    return defer.promise;
};

Не работает при использовании формы. Любые предложения или ошибки, о которых я не знаю?

1 Ответ

2 голосов
/ 15 мая 2019

Ваш PHP-код ожидает данные в формате Json, но не получает его.Это потому, что HTML-форма отправляет данные POST как application/x-www-form-urlencoded.

. Для поддержки обоих форматов данных вам необходимо создать логику в коде PHP для определения любого формата.Формат данных упоминается в заголовке HTTP, где вы можете это проверить.Ищите Content-Type.Для данных POST, поступающих для вашей HTML-формы, это application/x-www-form-urlencoded, а для Json - application/json.

. Вы можете прочитать значения формы в PHP, используя $_POST[<form_parameter>].В вашем случае $_POST['data'].Чтобы сделать вашу HTML-форму немного проще, вы также можете разбить массив data на их собственные входные данные в форме.

См. Дополнительную информацию: https://www.smtpeter.com/en/documentation/json-vs-post

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...