Форма PHP (иногда) подает пустые записи в MySQL

Я пробовал создать простую регистрационную форму (я новичок в PHP). Форма иногда работает, но в большинстве случаев она просто отправляет пустые записи в базу данных MySQL. Ниже приведен код:

У меня такая форма:

<form action = "#" method = "post">
        <h2 class = "sub-heading-agileits">Participant 1</h2>
        <div class = "main-flex-w3ls-sectns">
            <div class = "field-agileinfo-spc form-w3-agile-text1">
                <input type = "text" name = "name1" placeholder = "Full Name" required = "">
            </div>
            <div class = "field-agileinfo-spc form-w3-agile-text1">
                <select class = "form-control" name = "year1">
                                    <option>Year</option>
                                    <option value = "1st Year">1st Year</option>
                                    <option value = "2nd Year">2nd Year</option>
                                    <option value = "3rd Year">3rd Year</option>
                                </select>
            </div>
        </div>
        <div class = "main-flex-w3ls-sectns">
            <div class = "field-agileinfo-spc form-w3-agile-text2">
                <input type = "text" name = "phone1" placeholder = "Phone Number" required = "">
            </div>
            <div class = "field-agileinfo-spc form-w3-agile-text2">
                <input type = "text" name = "college1" placeholder = "College" required = "">
            </div>
        </div>
        <div class = "field-agileinfo-spc form-w3-agile-text">
            <input type = "email" name = "email1" placeholder = "Email" required = "">
        </div>
        <h2 class = "sub-heading-agileits">Participant 2</h2>
        <div class = "main-flex-w3ls-sectns">
            <div class = "field-agileinfo-spc form-w3-agile-text1">
                <input type = "text" name = "name2" placeholder = "Full Name">
            </div>
            <div class = "field-agileinfo-spc form-w3-agile-text1">
                <select class = "form-control" name = "year2">
                                    <option>Year</option>
                                    <option value = "1st Year">1st Year</option>
                                    <option value = "2nd Year">2nd Year</option>
                                    <option value = "3rd Year">3rd Year</option>
                                </select>
            </div>
        </div>
        <div class = "main-flex-w3ls-sectns">
            <div class = "field-agileinfo-spc form-w3-agile-text2">
                <input type = "text" name = "phone2" placeholder = "Phone Number">
            </div>
            <div class = "field-agileinfo-spc form-w3-agile-text2">
                <input type = "text" name = "college2" placeholder = "College">
            </div>
        </div>
        <div class = "field-agileinfo-spc form-w3-agile-text">
            <input type = "email" name = "email2" placeholder = "Email">
        </div>
        <div class = "clear"></div>
        <input type = "submit" value = "Submit">
        <input type = "reset" value = "Clear Form">
        <div class = "clear"></div>
    </form>

Прошу прощения за длинный код формы.

Это PHP-код для отправки данных в базу данных:

$servername = "localhost";
$username = "fic";
$password = "fic201718";
$dbname = "fic201718";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$name1 = $_POST['name1'];
$year1 = $_POST['year1'];
$phone1 = $_POST['phone1'];
$college1 = $_POST['college1'];
$email1 = $_POST['email1'];
$name2 = $_POST['name2'];
$year2 = $_POST['year2'];
$phone2 = $_POST['phone2'];
$college2 = $_POST['college2'];
$email2 = $_POST['email2'];
$sql = "INSERT INTO identitytheft (Participant1Name,Participant1Year,Participant1Phone,Participant1College,Participant1eMail,Participant2Name,Participant2Year,Participant2Phone,Participant2College,Participant2eMail) VALUES ('$name1','$year1','$phone1','$college1','$email1','$name2','$year2','$phone2','$college2','$email2')";
$conn->query($sql);
if (!empty($_POST['name1'])) {
    echo ("<script type=\"text/javascript\"> alert('Successfully Registered'); </script>");
}

Однако форма иногда вставляет в базу абсолютно пустые данные. Хотя иногда это срабатывает.

Я заметил одну вещь: я не получаю пустых строк, если в ответах нет специальных символов. Мои столбцы установлены на utf8_unicode_ci (все столбцы). Может здесь что-то не так? Пожалуйста помоги?

Когда в базу данных вставляются пустые данные, каждое ли это значение пустое или некоторые из значений? Совет для вас: имена ваших переменных должны совпадать с именами столбцов базы данных. Это помогает убедиться, что все выстроено в линию.

Vim Diesel 20.03.2018 19:22

Эй, каждый столбец пуст. Это не просто конкретный столбец. В базу данных ничего не вводится.

Vidul Talwar 20.03.2018 19:33

Возможный дубликат Форма PHP отправляет пустые данные в mySQL

Charles 20.03.2018 19:57

Эй, это единственная форма, связанная с единственной таблицей в базе данных.

Vidul Talwar 20.03.2018 20:00

Никогда не рекомендуется вставлять данные в базу данных без предварительной проверки данных. В php вы должны хотя бы использовать mysqli_escape_stringphp.net/manual/en/function.mysqli-escape-string.php. Если бы вы проверяли свои данные перед отправкой, вы также могли бы обнаруживать и ловить пустые формы.

wlh 20.03.2018 21:41

Эй, проверка формы выполняется с использованием javascript. Я почти уверен, что пустые формы не отправляются.

Vidul Talwar 21.03.2018 02:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
73
2

Ответы 2

Если ваши переменные POST не пусты и данные, которые вы видите, соответствуют вашим ожиданиям, то это не ваша форма и больше всего похожа на ваш запрос. Используйте var_dump, чтобы проверить свои переменные сообщения после отправки формы.

var_dump($_POST);

Первое, что я отмечу, это то, что ваш текущий подход восприимчив к SQL-инъекции, поэтому вы захотите очистить свой код. Посмотрите подготовленные статьи http://php.net/manual/en/mysqli.quickstart.prepared-statements.php.

Я очищу ваш текущий запрос, он должен сработать для вас. Очевидно, у меня нет настройки вашей базы данных, поэтому я могу ее протестировать. Вам не нужно форматировать его, как я, и я обычно не форматирую его таким образом, если я не отлаживаю - это помогает выровнять имена столбцов со значениями.

<?php
$servername = "localhost";
$username = "fic";
$password = "fic201718";
$dbname = "fic201718";

$conn = new mysqli($servername, $username, $password, $dbname);

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

$name1 = $_POST['name1'];
$year1 = $_POST['year1'];
$phone1 = $_POST['phone1'];
$college1 = $_POST['college1'];
$email1 = $_POST['email1'];
$name2 = $_POST['name2'];
$year2 = $_POST['year2'];
$phone2 = $_POST['phone2'];
$college2 = $_POST['college2'];
$email2 = $_POST['email2'];

$sql = "INSERT INTO identitytheft (
    Participant1Name,
    Participant1Year,
    Participant1Phone,
    Participant1College,
    Participant1eMail,
    Participant2Name,
    Participant2Year,
    Participant2Phone,
    Participant2College,
    Participant2eMail)
    VALUES (
    '".$name1."',
    '".$year1."',
    '".$phone1."',
    '".$college1."',
    '".$email1."',
    '".$name2."',
    '".$year2."',
    '".$phone2."',
    '".$college2."',
    '".$email2."'
)";
$conn->query($sql);
if (!empty($_POST['name1'])) {
    echo ("<script type=\"text/javascript\"> alert('Successfully Registered'); </script>");
}
?>

Эй, я только начал учиться - скоро я перейду к части защиты данных от SQL-инъекций.

Vidul Talwar 20.03.2018 19:36

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

Vidul Talwar 20.03.2018 19:37

Эй, не повезло. Некоторые ответы все еще остаются пустыми. Я заметил одну вещь: я не получаю пустых строк, если в ответах нет специальных символов. Мои столбцы установлены на utf8_unicode_ci (все столбцы). Может здесь что-то не так?

Vidul Talwar 20.03.2018 19:56

Какой тип данных установлен? варчар? int? - более чем вероятно, что это не имеет ничего общего с сопоставлением

Vim Diesel 20.03.2018 20:12

Тип данных установлен на varchar (255) для всех столбцов.

Vidul Talwar 20.03.2018 20:30
if (!empty($varname) && !empty($varname)){
  sql statements over here within php code
}

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

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