Как исправить ошибку в ajax?

164
11 января 2020, 14:50

Файл 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 всё работает. Где именно я ошибся в запросе?

Answer 1

Так как в адресе точно будут пробелы и ещё бог весть что, то:

Исправьте в printer.php:

//                                 vvvvvvvvv
$adress_register = strip_tags(trim(urldecode($_POST['adress_register'])));

В Ajax запросе:

let data = {
    form_id: id,
    //               vvvvvvvvvvvvvvvvvv
    adress_register: encodeURIComponent(adress),
};
Answer 2

Рабочий вариант в моём случае, когда данные выводятся в цикле - вешать событие не на кнопку, а на форму:

$(function () {
    $('.user_form').on('submit', function (e) {
        e.preventDefault();
    $.ajax({
        type: "POST",
        url: "printer.php",
        data: $(this).closest('form').serialize(),
        success: function() {
            alert("Данные сохранены");
        }
    });
});
    });
READ ALSO
Редирект после отправки формы на полную форму

Редирект после отправки формы на полную форму

Имеется форма на главной странице сайта:

149
Не работает маршрутизация PHP MVC

Не работает маршрутизация PHP MVC

https://githubcom/xRomax/WorkLeader У меня есть шаблон admin

152
Почему не работает cURL в php

Почему не работает cURL в php

Код выглядит так:

158