Я пробовал создать простую регистрационную форму (я новичок в 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 (все столбцы). Может здесь что-то не так? Пожалуйста помоги?
Эй, каждый столбец пуст. Это не просто конкретный столбец. В базу данных ничего не вводится.
Возможный дубликат Форма PHP отправляет пустые данные в mySQL
Эй, это единственная форма, связанная с единственной таблицей в базе данных.
Никогда не рекомендуется вставлять данные в базу данных без предварительной проверки данных. В php вы должны хотя бы использовать mysqli_escape_stringphp.net/manual/en/function.mysqli-escape-string.php. Если бы вы проверяли свои данные перед отправкой, вы также могли бы обнаруживать и ловить пустые формы.
Эй, проверка формы выполняется с использованием javascript. Я почти уверен, что пустые формы не отправляются.






Если ваши переменные 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-инъекций.
Спасибо за помощь, проверим код и сообщим, решает ли он проблему. Кроме того, лучше отформатировать код, подобный вашему. Я буду делать это всякий раз, когда буду писать какой-либо код в будущем.
Эй, не повезло. Некоторые ответы все еще остаются пустыми. Я заметил одну вещь: я не получаю пустых строк, если в ответах нет специальных символов. Мои столбцы установлены на utf8_unicode_ci (все столбцы). Может здесь что-то не так?
Какой тип данных установлен? варчар? int? - более чем вероятно, что это не имеет ничего общего с сопоставлением
Тип данных установлен на varchar (255) для всех столбцов.
if (!empty($varname) && !empty($varname)){
sql statements over here within php code
}
вы можете добавить этот аналогичный тип кода, так как он работает только тогда, когда поля ввода не пусты и не отправляет непустые данные в вашу базу данных
Когда в базу данных вставляются пустые данные, каждое ли это значение пустое или некоторые из значений? Совет для вас: имена ваших переменных должны совпадать с именами столбцов базы данных. Это помогает убедиться, что все выстроено в линию.