Почему данные пользователя не добавляются в базу данных?

При нажатии кнопки "Сохранить" (тип button, не submit), выполняется проверка формы. Если все поля заполнены, данные формы должны отправляться в базу данных, иначе поля выделяются и появляется сообщение. Проверка выполняется правильно, но в базе данных ничего не появляется, хотя обращение к ней приходит, но но данные не сохраняются. В чем проблема?
registration.php
<form name="form" action="check_registration.php" method="post">
				<input type="text" name="name" class="reg_form" id="name" placeholder="ФИО" /><br />
				<input type="text" name="login" class="reg_form" id="login" placeholder="Логин" /><br />
				<input type="password" name="password" class="reg_form" id="password" placeholder="Пароль" /><br />
				<input type="text" name="dob" class="reg_form" id="dob" placeholder="Дата рождения" /><br />
				<select name="region" class="reg_form" id="region">
					<option disabled selected value="null">Регион</option>
					<option value="MO">Московская область</option>
					<option value="LO">Ленинградская область</option>
					<option value="RT">Республика Татарстан</option>
				</select><br />
				<input type="text" name="telephone" class="reg_form" id="telephone" placeholder="Телефон" /><br />
				<input type="email" name="email" class="reg_form" id="email" placeholder="Email" /><br />
				<input type="button" name="save" class="reg_form" id="save" value="Сохранить" />
			</form>

registration.js
$(document).ready(function() {
    $("#save").on("click", function() {
                let name = $("#name").val();
		let login = $("#login").val();
		let password = $("#password").val();
		let dob = $("#dob").val();
		let region = $("#region").val();
		let telephone = $("#telephone").val();
		let email = $("#email").val();
		let counter = 0;
		if (name == "" || name == " ") {
			$("#name").css("border-color", "red");
			counter++;
		};
		if (login == "" || login == " ") {
			$("#login").css("border-color", "red");
			counter++;
		};
		if (password == "" || password == " ") {
			$("#password").css("border-color", "red");
			counter++;
		};
		if (dob == "") {
			$("#dob").css("border-color", "red");
			counter++;
		}
		if (region == null) {
			$("#region").css("border-color", "red");
			counter++;
		};
		if (telephone == "" || telephone == "+7") {
			$("#telephone").css("border-color", "red");
			counter++;
		};
		if (email == "" || email == " ") {
			$("#email").css("border-color", "red");
			counter++;
		};
		if (counter == 0) {
			$("form[name='form']").submit();
		};
    });
});

check_registration.php
<?php
	$login = $_POST['login'];
	$name = $_POST['name'];
	$password = $_POST['password'];
	$dob = $_POST['dob'];
	$region = $_POST['region'];
	$telephone = $_POST['telephone'];
	$email = $_POST['email'];
	$password = md5($password."usyvi462");
	$mysql = new mysqli("localhost", "root", "root", "medixer");
	$mysql->query("SET NAMES 'utf8'");
	$mysql->query("INSERT INTO `users` (`login_user`, `name`, `password`, `dob`, `region`, `telephone`, `email`) VALUES('$login', '$name', '$password', '$dob', '$region', '$telephone', '$email')");
	$mysql->close();
	header("Location: index.php");
?>

*Если есть предложения с кнопкой submit, а не button, пожалуйста, главное, чтобы работала проверка формы и в следствии нахождения ошибки, отправка формы отменялась. Но лучше тип кнопки не менять, если это не является основной ошибкой!
**Я где-то читала, что .submit() может конфликтовать с method=""
  • Вопрос задан
  • 616 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Как нужно действовать (в принципе всегда):
1) Проверить что форма срабатывает и делает запрос: открываем консоль разработчика в браузере - нетворк, субмитим форму - смотрим что форма сделала запрос к серверу. Если не сделала - разбираемся в консоли какие ошибки со скриптами и все чиним.
2) В отсылаемом запросе смотрим данные, которые отправляет скрипт, а так же ответ сервера, на предмет ошибок. Если есть ошибки - исправляем.
3) Проверяем данные которые пришли на сервер, делаем var_dump($_POST), смотрим - то ли пришло на сервер. Если что-то не пришло - возвращаемся на фронт и ищем ошибку в хтмл разметке и форме.
4) Правильные данные сначала вставляем в отдельную переменную как строку запроса, а потом передаем ее на выполнение в $mysql->query(). Таким образом перед выполнением запроса можно тем же var_dump() вывести запрос и проверить его визуально на правильность, ну или вставить руками в бд через phpmyadmin или другой инструмент работы с бд. Посмотреть ошибки - исправить.
5) Во всех случаях нужно использовать подготовленные выражения. Код станет на 3 строчки длиннее, но на 90% качественнее.
Профит.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега PHP
♬♬
Так вставлять данные в БД нельзя. Нежелательно даже на локальном сервере в учебных целях. Это открытая дверь для SQL-инъекций. Лучше привязывать параметры, например так:
$mysql = new mysqli("localhost", "root", "root", "medixer");
$mysql->set_charset("utf8");

$stmt = $conn->prepare("INSERT INTO `users` (`login_user`, `name`, `password`, `dob`, `region`, `telephone`, `email`) VALUES (?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("sssssss", $login, $name, $password, $dob, $region, $telephone, $email);
$stmt->execute();

$mysql->close();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 нояб. 2024, в 15:52
3000 руб./за проект
25 нояб. 2024, в 15:43
1500 руб./за проект