Неопределенный индекс Ajax в PHP Передается как данные:

Как поживаешь? Я не могу понять, почему в моем коде появляется ошибка неопределенного индекса. Я просмотрел большинство сообщений на этом сайте и попытался добавить dataType, круглые скобки, используя метод сериализации и т. д.

<!DOCTYPE html>  <html>
<head>
  <!--Import Google Icon Font-->
  <link href = "https://fonts.googleapis.com/icon?family=Material+Icons" rel = "stylesheet">
  <!--Import materialize.css-->
  <link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/css/materialize.min.css">
  <link rel = "stylesheet" href = "styles/styles.css" />

  <!--Let browser know website is optimized for mobile-->
  <meta name = "viewport" content = "width=device-width, initial-scale=1.0"/>
</head>

<body>
<div class = "container">
    <h1 class = "center-align">Welcome to the Black Archives</h1>
    <p id = "introparagraph">Thank you for visitng us today. We look forward to serving you. Please take the time to complete the following form. You're contact information will be stored in our system. This information will be used to keep you informed about upcoming events and exhibits. You will also receive a copy of our next newsletter. We will only use your information for museum-related purposes. Your information will not be sold or distributed to another party. For questions related to this form, please stop by the main office.</p>
    <div class = "myForm">
        <div class = "row">
            <form class = "col s12" action = "register.php" id = "registerForm" method = "POST">
                <div class = "row">
                    <div class = "input-field col s5">
                        <input placeholder = "First Name" id = "fname" name = "fname" type = "text" class = "validate">
                        <label class = "labelText" for = "fname">First Name</label>
                    </div>
                    <div class = "input-field col s2">
                        <input placeholder = "Middle Initial" id = "mi" name = "mi" type = "text" class = "validate">
                        <label class = "labelText" for = "mi">Middle Initial</label>
                    </div>
                    <div class = "input-field col s5">
                        <input placeholder = "Last Name" id = "lname" name = "lname" type = "text" class = "validate">
                        <label class = "labelText" for = "lname">Last Name</label>
                    </div>
                </div>
                <div class = "row">
                    <div class = "input-field col s6">
                        <input placeholder = "Address" id = "address" name = "address" type = "text" class = "validate">
                        <label class = "labelText" for = "address">Address</label>
                    </div>
                    <div class = "input-field col s6">
                        <input placeholder = "Address 2" id = "address2" name = "address2" type = "text" class = "validate">
                        <label class = "labelText" for = "address2">Address 2</label>
                    </div>
                </div>
                <div class = "row">
                    <div class = "input-field col s5">
                        <input placeholder = "City" id = "city" name = "city" type = "text" class = "validate">
                        <label class = "labelText" for = "city">City</label>
                    </div>
                    <div class = "input-field col s2">
                        <input placeholder = "State" id = "state" name = "state" type = "text" class = "validate">
                        <label class = "labelText" for = "state">State</label>
                    </div>
                    <div class = "input-field col s5">
                        <input placeholder = "Postal Code" id = "zipcode" name = "zipocode" type = "text" class = "validate">
                        <label class = "labelText" for = "zipcode">Postal Code</label>
                    </div>
                </div>
                <div class = "row">
                    <div class = "input-field col s6">
                        <input placeholder = "Email" id = "email" name = "email" type = "email" class = "validate">
                        <label class = "labelText" for = "email">Email Address</label>
                    </div>
                    <div class = "input-field col s6">
                        <input placeholder = "Phone" id = "phone" name = "phone" type = "tel" class = "validate">
                        <label class = "labelText" for = "phone">Phone</label>
                    </div>
                </div>
                <div class = "row right-align">
                      <button class = "btn waves-effect waves-light btn-large" type = "submit" name = "register" id = "submitBtn">Submit<i class = "material-icons right">send</i></button>
                </div>
            </form>
        </div>
    </div>
</div>

  <script src = "js/scripts.js"></script>
  <script src = "https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/js/materialize.min.js"></script>
<script type = "text/javascript">
    $(document).ready(function () {
        $(".input-field>label").css("color", "black");

        $("#submitBtn").on('click', function () {
            var fname = $("#fname").val();
            var mi = $("#mi").val();
            var lname = $("#lname").val();
            var address = $("#address").val();
            var address2 = $("#address2").val();
            var city = $("#city").val();
            var state = $("#state").val();
            var zipcode = $("#zipcode").val();
            var email = $("#email").val();
            var phone = $("#phone").val();

            console.info(phone);

            if (fname == "") {
                $('#fname').css("backgroundColor", "#f7e7e1");
            }
            else if (lname == "") {
                $('#lname').css("backgroundColor", "#f7e7e1");
            }
            else {
                $.ajax({
                    url: 'register.php',
                    method: 'POST',
                    data: { data: $('#registerForm').serialize() },
                    success: function (response) {
                        console.info("Hello World!!!");
                    },
                    dataType: 'text'
                });
            }
        });
    });
</script>
</body>

А вот документ PHP ниже. При передаче данных и наблюдении за ними с помощью инструмента отладки браузера он показывает регистр: без данных.

<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "museum";

    if (isset($_POST['register'])) {        
        $conn = new mysqli($servername, $username, $password, $dbname);

        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }

        $fname = $_POST['fname'];
        $mi = $_POST['mi'];
        $lname = $_POST['lname'];
        $address = $_POST['address'];
        $address2 = $_POST['address2'];
        $city = $_POST['city'];
        $state = $_POST['state'];
        $zipcode = $_POST['zipcode'];
        $email = $_POST['email'];
        $phone = $_POST['phone'];

        $sql = "INSERT INTO guest (fname, mi, lname, address1, address2, city, state, zipcode, email, phone) VALUES ('$fname', '$mi', '$lname', '$address', '$address2', '$city', '$state', '$zipcode', '$email', '$phone')";

        if ($conn->query($sql) === TRUE) {
            echo "New record created successfully";
        } else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }

        $conn->close();
    }
?>

Итак, где взять неопределенный индекс?

Magnus Eriksson 06.05.2018 17:38
Предупреждение: вы открыты для SQL-инъекции и действительно следует использовать Подготовленные заявления вместо объединения ваших запросов. Тем более, что вы вообще не избегаете пользовательского ввода!
Magnus Eriksson 06.05.2018 17:38

в вашем запросе ajax нет поля регистрации. попробуйте добавить его в запрос, например, $ .ajax (..., data: {register: 'register', ...})

xanadev 06.05.2018 17:41

Более простой способ - добавить идентификатор в вашу форму и добавить атрибут name = "" в поля ввода. Затем, когда вы собираетесь публиковать их с помощью Ajax, все, что вам нужно сделать, это: data: $('#the-form-id').serialize(). Нет необходимости определять все поля в JS.

Magnus Eriksson 06.05.2018 17:44

zip - это int в вашей базе данных?

Jonny 06.05.2018 18:00

Я получаю неопределенную ошибку при переходе на страницу register.php. Все загружается нормально, и он устанавливает соединение с базой данных и выполняет функцию «успеха» JavaScript, но данные не передаются на страницу register.php. Это пусто.

Theo Greer 06.05.2018 22:02

Спасибо, Магнус, я сейчас занимаюсь этим.

Theo Greer 06.05.2018 22:04

Нет, Джонни, zip - это варчар

Theo Greer 06.05.2018 22:08

@Magnus, я пытался использовать serialize () ранее, и это не сработало, но я не добавил имена в каждое из полей ввода. Я изменил код, но все равно получаю ту же ошибку. Я думаю, что xanadev на правильном пути, но я не совсем понимаю, где это должно происходить. Я прохожу регистрацию, но она пуста.

Theo Greer 06.05.2018 22:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
10
228
1

Ответы 1

An easier way would be to add an ID to your form and add the name = "" attribute to your input fields. Then, when you're going to post them with Ajax, all you need to do is: data: $('#the-form-id').serialize(). No need to define all the fields in JS. – Magnus Eriksson 6 hours ago

Это сработало, пришлось удалить инициализации переменных и добавить атрибут имени к каждому из входов. Потом программа заработала как положено.

Другие вопросы по теме