Файл printer.php, который вносит апдейт в бд.
<?php
require_once('db.php');
if(isset($_POST['printer']))
{
global $link;
$form_id = (int)$_POST['form_id'];
$adress_register = strip_tags(trim($_POST['adress_register']));
$SQL = "UPDATE Users SET adress_register='$adress_register' WHERE id='$form_id'";
$result = mysqli_query($link, $SQL);
}
?>
Ajax, который отправляет к нему данные из формы:
$('button[name="printer"]').on('click', function() {
let $btn = $(this);
let id = $btn.closest('input').find('input[name="form_id"]').val(); // получаем id
let adress = $btn.closest('input').find('input[name="adress_register"]').val(); // получаем адрес с инпута
// формируем данные
let data = {
form_id: id,
adress_register: adress,
};
$.ajax({
type: "POST",
url: "printer.php",
data: data,
}).done(function() {
alert("Данные сохранены");
});
return false;
});
Сама форма:
<form name="printer" method="post" action="printer.php">
<table border="0">
<input type="hidden" name="form_id" value="<?=$users['id']?>">
<tr><td>Имя</td><td><?=htmlspecialchars($users['name'], ENT_QUOTES)?></td></tr>
<tr><td>Фамилия</td><td><?=htmlspecialchars($users['surname'], ENT_QUOTES)?></td></tr>
<tr><td>Отчество</td><td><?=htmlspecialchars($users['second_name'], ENT_QUOTES)?></td></tr>
<tr><td>Телефон</td><td><?=htmlspecialchars($users['phone'], ENT_QUOTES)?></td></tr>
<tr><td>Дата рождения</td><td><?=htmlspecialchars($users['birth_date'], ENT_QUOTES)?></td></tr>
<tr><td>Адрес</td><td><input class="form-control" type="text" name="adress_register" value="<?=htmlspecialchars($users['adress_register'], ENT_QUOTES)?>"</td></tr>
<tr><td>Комментарий</td><td><?=htmlspecialchars($users['comment'], ENT_QUOTES)?></td></tr>
<tr><td>Сумма</td><td><?=htmlspecialchars($users['sum'], ENT_QUOTES)?></td></tr>
<td><button type="submit" formmethod="post" name="printer" class="btn btn-xs btn-warning mb-3">Сохранить</button></td>
</table>
</body>
</form>
Без ajax всё работает. Где именно я ошибся в запросе?
Так как в адресе точно будут пробелы и ещё бог весть что, то:
Исправьте в printer.php
:
// vvvvvvvvv
$adress_register = strip_tags(trim(urldecode($_POST['adress_register'])));
В Ajax запросе:
let data = {
form_id: id,
// vvvvvvvvvvvvvvvvvv
adress_register: encodeURIComponent(adress),
};
Рабочий вариант в моём случае, когда данные выводятся в цикле - вешать событие не на кнопку, а на форму:
$(function () {
$('.user_form').on('submit', function (e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "printer.php",
data: $(this).closest('form').serialize(),
success: function() {
alert("Данные сохранены");
}
});
});
});
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок