Отправка формы POST в JQuery / AJAX и PHP - PullRequest
0 голосов
/ 21 сентября 2019

Я немного новичок в работе с отправками форм в JQuery / AJAX и PHP, поэтому я пытался следовать некоторым учебникам в Интернете и столкнулся с несколькими проблемами.

Я пытаюсьсоздать форму, которая обрабатывает представления через PHP.Вот что у меня есть для моего файла index.html.

<body>

    <h1>Food Preference</h1>

    <p>Please let us know what types of foods you would like to see on the menu.</p>

    <form id="food-form">
        <label for="appetizer">Appetizer</label>
        <input type="text" id="appetizer" required>

        <label for="entree">Entree</label>
        <input name="entree" type="entree" id="entree" required>

        <label for="dessert">Dessert</label>
        <textarea name="dessert" id="dessert" required></textarea>

        <button id="submit_button" type="submit">Send</button>

        <p id="form_content">
        </p>
    </form>

А вот мой файл index.js

 jQuery.ajax({
        url: "handler.php",
        data: "appetizer=" + $("#appetizer").val() +
              "&entree=" + $("#entree").val() +
              "&dessert=" + $("#dessert").val(),
              type: "POST",
              success: function(data) {
                  $("#form_content").html(data);
              },
              error: function() {}
    });

А вот handler.php

<?php

class runForm {
public function handle_food_form($request) {

    if(opinion($_POST["appetizer"], $_POST["entree"], $_POST["dessert"])) {
        print "<p class='success'>Thank you for your opinion.</p>";

        return array('post_id' => $new_post_id );
    }
 }
}

runForm();
?>

Не похоже, что мое подчинение сохраняет где-либо, или, если это так, я не уверен, как его найти.Кто-нибудь может дать какие-нибудь указатели на то, что я могу делать неправильно?

Мне интересно, правильна ли эта строка в handler.php, поскольку я не определил "мнение".

if(opinion($_POST["appetizer"], $_POST["entree"], $_POST["dessert"]))

Ответы [ 2 ]

0 голосов
/ 21 сентября 2019

У вас много проблем в этом фрагменте кода, и вы должны сначала проверить ошибки, которые показывает вам PHP, и сначала попытаться их устранить.

Файл PHP (handler.php)

  1. opinion() функция не определена.
  2. runForm() - это не функция, это имя класса, если вы хотите вызвать функцию handle_food_form(), вы можете сделать ее статическойи вызовите его так: runForm::handle_food_form();
  3. Окончательная версия вашего PHP-файла должна выглядеть примерно так:

    <?php
    
    
    class RunForm {
    
        public static function opinion($appetizer, $entree, $dessert)
        {
            // do your logic here and return true or false
            return true;
        }
    
        public static function handle_food_form() {
    
            if (!isset($_POST["appetizer"])) $_POST["appetizer"] = null;
            if (!isset($_POST["appeentreetizer"])) $_POST["entree"] = null;
            if (!isset($_POST["dessert"])) $_POST["dessert"] = null;
    
            if(SELF::opinion($_POST["appetizer"], $_POST["entree"], $_POST["dessert"])) {
                $htmlMsg =  "<p class='success'>Thank you for your opinion.</p>";
                /*
                    $con is a MySQLI object
                    $con->query("insert into table ........");
                    $new_post_id = $con->insert_id;
                */
    
                return array('post_id' => $new_post_id, 'htmlMsg' => $htmlMsg );
            } else {
                return array('post_id' => null , 'htmlMsg' => "");
            }
        }
    }
    
    echo RunForm::handle_food_form()['htmlMsg'];
    

На стороне клиента

Вы должны использовать encodeURIComponent() для кодирования параметров URL-адреса, чтобы предотвратить повреждение этого URL-адреса, например, dessert=cheesecake&pancake, или передать объект параметров в качестве данных ajaxФункция и JQuery будет делать кодирование для вас внутренне

jQuery.ajax({
    url: "handler.php",
    data: {
              appetizer: $("#appetizer").val(),
              entree: $("#entree").val(),
              dessert: $("#dessert").val()
           },
      type: "POST",
      success: function(data) {
              $("#form_content").html(data);
          },
      error: function() {}
});
0 голосов
/ 21 сентября 2019

Разделите переменные запятыми.В jQuery.ajax сделайте как:

 jQuery.ajax({
        url: "handler.php",
        data: "appetizer=" + $("#appetizer").val(),
              "entree=" + $("#entree").val(),
              "dessert=" + $("#dessert").val(),
              type: "POST",
              success: function(data) {
                  $("#form_content").html(data);
              },
              error: function() {}
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...