@yDaniil

Как сохранить данные из формы в БД?

Учу PHP с нуля, первая неделя) Сейчас пытаюсь организовать форму обратной связи. Форма на bootstrap, отправка данных из формы используя ajax для дальнейшей обработки в файл save_data.php, оттуда подключение к БД и сохранение данных в нее. Все работает кроме сохранения данных, пожалуйста подскажите, где ошибка?

<!DOCTYPE html>
<html lang="ru">
<head>
	<meta charset="UTF-8">
	<title>Форма обратной связи</title>
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
	<div class="container">
		<h1>Связь с нами</h1>
		<form>
			<input type="email" id="email" name="email" placeholder="Введите ваш Email" class="form-control"><br>
			<input type="text" id="name" name="name" placeholder="Введите имя" class="form-control"><br>
			<input type="phone" id="phone" name="phone" placeholder="Введите телефон" class="form-control"><br>
			<textarea name="message" id="message" placeholder="Ваше сообщение" class="form-control"></textarea><br>
			<button type="button" id="Send" class="btn btn-success">Отправить</button>
		</form>
		<div id="Error"></div>
	</div>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
	<script src="js/Mail.js"></script>
</body>
</html>


$("#Send").on("click", function(){
	var email = $("#email").val().trim();
	var name = $("#name").val().trim();
	var phone = $("#phone").val().trim();
	var message = $("#message").val().trim();

	if(email.length < 4){

		$("#Error").text("Неверный email");
		return false;
	}else if(name.length < 2){
		$("#Error").text("Имя не менее 2 символов");
		return false;
	}else if(phone == ""){
		$("#Error").text("Введите телефон");
		return false;
	}else if(message.length < 10){
		$("#Error").text("Текст сообщения не менее 10 символов");
		return false;
	}

	$("Error").text("");
	$.ajax({
		url: 'php/save_data.php',
		type: 'Post',
		cache: false,
		data: {'name':name,'email':email,'phone':phone,'message':message},
		dataType: 'html',
		beforeSend: function() {
			$("#Send").prop("disabled",true)
		},
		success: function(data) {
			alert(data);
		$("#Send").prop("disabled",false)
			
		}
	})
});


<?php
	echo "Сообщение отправлено!";

	// получаем данные от js
		$email = $_Post['email'];
		$name = $_Post['name'];
		$phone = $_Post['phone'];
		$message = $_Post['message'];

	// параметры подключения
	$host = 'localhost';
        $database = 'test';
        $user = 'root';
        $password = '';

	// создаем подключение
	$link = mysqli_connect($host, $user, $password, $database);
		if (!$link) {
		    echo "Ошибка: Невозможно установить соединение с MySQL." . PHP_EOL;
		    echo "Код ошибки errno: " . mysqli_connect_errno() . PHP_EOL;
		    echo "Текст ошибки error: " . mysqli_connect_error() . PHP_EOL;
		    exit;
	}

	echo "Соединение с MySQL установлено!" . PHP_EOL;
	echo "Информация о сервере: " . mysqli_get_host_info($link) . PHP_EOL;
	 
	// выполняем операции с базой данных
	     
	$query = "INSERT INTO 'message' ('name', 'email', 'phone', 'message')
	VALUES('{$name}', '{$email}', '{$phone}', '{$message}')";

	 if(mysqli_query($link, $query))
            {
                  echo "Запись добавлена!";
             }
	// закрываем подключение
	mysqli_close($link);

?>
  • Вопрос задан
  • 928 просмотров
Решения вопроса 1
dimsog
@dimsog
Переносил код с PHP 4 на 7.4...
$query = "INSERT INTO 'message' ('name', 'email', 'phone', 'message')
  VALUES('{$name}', '{$email}', '{$phone}', '{$message}')";

У вас как минимум в запросе ошибка.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
Судя по коду, у тебя здесь три вопроса.
1. Как вывести форму?
2. У меня есть форма, как передать ее содержимое на сервер аяксом и получить значения в РНР ?
3. У меня есть несколько переменных в РНР, как их записать в БД
Никогда больше так не делай.
Первые два вопроса не имеют никакого отношения к третьему и засорять свой вопрос ими не надо.

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

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

<?php
require 'mysqli.php';
$query = "INSERT INTO message (name, email, phone, message) VALUES(?,?,?,?)";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("ssss", $name, $email, $phone, $message);
$stmt->execute();
echo "Запись добавлена!";

И все у тебя вставляется без проблем.
Ответ написан
MichaelAniskin
@MichaelAniskin
Немного в себе
1 открываем отладчик в браузере смотрим что и куда передаётся в сеть.
1.0 ничего не передает открываем консоль и ищем ошибку в ява скрипт
2 если все передается норм открываем лог MySQL запросов и смотрим что скрипты передают в СУБД.
2.0 нет запроса в СУБД. Отлаживаем ПХП.
3 Вставляем запрос напрямую через myadmin и смотрим что пишет.
3.0 никаких ошибок и не работает. Берем в руки бубен...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽