Почему форма с сайта не отправляется в базу данных?
У меня на сайте есть форма, скрипт отправления формы в бд, но почему то он не работает, помогите пж. html
<form action="post.php" method="POST" class="form">
<div class="input-wrap">
<p class="phone-on-form" >Номер<br> телефона</p>
<input class="input" type="phone" placeholder="+380 Номер телфона" name="tel">
</div>
<p class="call-to-action">Шаг №1: Выберите удобный вам мессенджер</p>
<div class="buttons">
<button type="submit" data-submit class="btn-ms facebook">
<img src="img/lgt-icon-facebook.svg" class="icon"></img>
<p>Messenger</p>
</button>
<button type="submit" data-submit class="btn-tg telegramm">
<img src="img/lgt-icon-telegram.svg" class="icon"></img>
<p>Telegramm</p>
</button>
<button type="submit" data-submit class="btn-vb viber">
<img src="img/lgt-icon-viber.svg" class="icon"></img>
<p>Viber</p>
</button>
</div>
</form>
js
$(function () {
$('.btn-ms').on('click', function(event) {
event.preventDefault();
var url = $(this).data('target');
location.href = 'messenger.com';
});
$('.btn-tg').on('click', function(event) {
event.preventDefault();
var url = $(this).data('target');
location.href = 'tmet';
});
$('.btn-vb').on('click', function(event) {
event.preventDefault();
var url = $(this).data('target');
location.href = 'viber';
});
});
php
<?php
if (isset($_POST['num'])){
// Переменные с формы
$name = $_POST['num'];
// Параметры для подключения
$db_host = "localhost";
$db_user = "login"; // Логин БД
$db_password = "pass"; // Пароль БД
$db_base = 'name'; // Имя БД
$db_table = "tablename"; // Имя Таблицы БД
// Подключение к базе данных
$mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);
// Если есть ошибка соединения, выводим её и убиваем подключение
if ($mysqli->connect_error) {
die('Ошибка : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
$result = $mysqli->query("INSERT INTO ".$db_table." (num) VALUES ('$num')");
if ($result == true){
echo "Информация занесена в базу данных";
}else{
echo "Информация не занесена в базу данных";
}
}
?>
за ранее спасибо
Ответы (1 шт):
Дело в том, что вы не вызываете свой PHP-скрипт.
Да, он у вас прописан в атрибуте action формы, но ни одна из кнопок на самом деле не отправляет форму. Каждая из ваших кнопок выполняет перенаправление, которое вы задаёте в JS-функции, а собственно отправки формы не происходит, ибо
event.preventDefault();
То есть буквально: «Предупредить выполнение события по умолчанию».
У вас есть выбор: заменить кнопки, например, на радиокнопки, а по отправке формы сначала писать в БД, а потом обычным PHP'шным header("location: ...") перенаправить туда, куда вам нужно (так бы делал я); или же оставить всё как есть, но в JS-функции ещё AJAX'ом дёрнуть ваш PHP-скрипт (считаю это решение переусложнённым).
Если что-то непонятно, спрашивайте в комментариях, обновлю ответ.
UPDATE: Примерное решение на радиокнопках
Код примерный, сразу говорю (бэкенд особо не проверял — накидал примерно, ибо я бы делал на PDO). Там есть мои комментарии, они в квадратных скобках и с пометкой A. P.. Да, и ещё я несколько улучшил код, если что-то непонятно, снова пишите в комментарии.
HTML
<form action="post.php" method="POST" class="form">
<div class="input-wrap">
<label for="num" class="phone-on-form" >Номер<br> телефона</label>
<!-- [Тип для телефонов — tel, а не phone — A. P.] -->
<!-- [У вас в PHP переменная называется num, поэтому здесь name тоже должен быть num. Ну или наоборот, но поскольку тип tel, пусть будет num — A. P.] -->
<!-- [Ещё можно добавить шаблон валидации телефона, погуглите атрибут pattern — A. P.] -->
<input class="input" type="tel" placeholder="+380 Номер телефона" id="num" name="num">
</div>
<!-- [Немножко наведём красоту по доступности для слепых — A. P.] -->
<p id="messenger-type" class="call-to-action">Шаг №1: Выберите удобный вам мессенджер</p>
<div class="buttons" role="group" aria-labelledby="messenger-type">
<label>
<input type="radio" name="messenger" value="Facebook">
<img src="img/lgt-icon-facebook.svg" class="icon"></img>
<p>Messenger</p>
</label>
<label>
<input type="radio" name="messenger" value="Telegram">
<img src="img/lgt-icon-telegram.svg" class="icon"></img>
<p>Telegram</p>
</label>
<label>
<input type="radio" name="messenger" value="Viber">
<img src="img/lgt-icon-viber.svg" class="icon"></img>
<p>Viber</p>
</label>
</div>
<p><button type="submit" id="go" name="go">Отправить</button></p>
</form>
PHP
<?php
// [Я не очень понимаю, зачем эта проверка — A. P.]
if (isset($_POST['num'])){
// [Переменные переопределять не будем, у вас там путаница — A. P.]
// Параметры для подключения
$db_host = "localhost";
$db_user = "login"; // Логин БД
$db_password = "pass"; // Пароль БД
$db_base = 'name'; // Имя БД
$db_table = "tablename"; // Имя Таблицы БД
// Подключение к базе данных
$mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);
// [Честно, я бы советовал вам применять PDO: во-первых, это красиво ©, а во-вторых, можно было бы поймать исключение, а не делать вот эти вещи — A. P.]
// Если есть ошибка соединения, выводим её и убиваем подключение
if ($mysqli->connect_error) {
die('Ошибка : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
// [Давайте подготовим запрос, чтобы к вам никто не пролез с SQL-инъекцией — A. P.]
$result = $mysqli->prepare(sprintf("INSERT INTO %s (num) VALUES (?)"), $db_table);
$result->bind_param("s", $_POST['num']);
$result->execute();
// [Поскольку мы хотим сделать редирект, уберём echo. По-хорошему, такие ошибки надо логировать в файл — A. P.]
// [А вот теперь возьмём значения радиокнопок из формы и определим, куда перенаправлять — A. P.]
$redirect = [
'Facebook' => 'https://messenger.com',
'Telegram' => 'https://t.me',
'Viber' => 'https://some.url.to.viber' // [Понятия не имею, какой у него URL — A. P.]
];
header(sprintf('location: %s', $redirect[$_POST['messenger']]));
}