AJAX форма отправляет информацию, PHP не выполняется

#javascript #php #jquery #mysql #ajax

#javascript #php #jquery #mysql #ajax

Вопрос:

у меня была проблема с этой точной формой несколько дней назад и была исправлена с помощью другого PHP благодаря вам, ребята. Теперь я изменил одну вещь в форме, и она больше не работает. Я предупредил все переменные, отправляемые через AJAX, и они являются правильными значениями, которые мне нужны. Вот код для HTML-формы:

  <?php
        include('php/connect.php');

        $chquery = "SELECT * FROM rooms";
        $chresult = mysqli_query($conn, $chquery);

        while($chrow = mysqli_fetch_array($chresult)){
            echo "<div class='edit_roomRow'>";
            echo "<h1> Rum " . $chrow['Roomnumber'] . "</h1>";
            echo "<form>";
            echo "Rumsnummer:<br> <input id='c-roomnumber' type='text' value = '" . $chrow['Roomnumber'] . "'><br>";
            echo "Beskrivning:<br> <input id='c-description' type='text' value = '" . $chrow['Description'] . "'>";
            echo "</form>";
            echo "<br>";
            *update* echo "<div class='btn btn-warning change-btn' data-value='". $chrow['ID'] . "' style='float: right; margin-top: 100px;'>Ändra</div>";
            echo "</div>";
            echo "<hr/>";
        }

        mysqli_free_result($chresult);

        mysqli_close($conn);

 ?>
  

AJAX здесь:

 <script type="text/javascript">
    $(".change-btn").click(function(){
        var id = $(this).attr("data-value");
        var description = $("#c-description").val();
        var roomnumber = $("#c-roomnumber").val();
        //Call to ajax
        $.ajax({
            method:"GET",
            url: "php/changepost.php",
            data:{ id: id, description: description, roomnumber: roomnumber },
            success: function(){
                $("#c-description").val("");
                $("#c-roomnumber").val("");
                //Reload specific div with rooms, avoid full page reload
                $(".changerooms").load(location.href   " .changerooms");
            }
        })
    })
</script>
  

Я попытался изменить переменные в php и т.д.

 <?php
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    include('connect.php');

    if(isset($_GET['id'])){
        $stmt = mysqli_prepare($conn, "UPDATE rooms SET Roomnumber = ?, Description = ?, WHERE ID = ?");
        mysqli_stmt_bind_param($stmt, "isi", $_GET['roomnumber'], $_GET['description'], $_GET['id']);
        mysqli_stmt_execute($stmt);
    }

    mysqli_close($conn);

?>
  

База данных настроена следующим образом:

 ID | Description | Roomnumber| Cleaned | Cleaner | Time
  

Последние три здесь неуместны, но на рисунке я показываю полную настройку базы данных. Я могу добавлять новые сообщения и т.д. с теми же значениями, но когда дело доходит до изменения, что-то не так с этим кодом. Надеюсь, кто-нибудь сможет мне с этим помочь 🙂

Комментарии:

1. Вы знаете, что PHP-скрипт ожидает, $_GET['roomid'] но вы не отправляете это в параметре AJAX data , верно? Вы отправляете только id , description и roomnumber .

2. Я отправляю номер комнаты, и PHP ожидает $_GET[‘номер комнаты’] в качестве значения для столбца roomid в базе данных

3. Я имею в виду, посмотрите на строку if(isset($_GET['roomid'])){ ….

4. Вы знаете, что PHP-скрипт никогда ничего не возвращает, а просто истекает время ожидания.

5. Теперь изменил его на $ _GET[‘id’], чтобы он проверял, есть ли у выбранной записи идентификатор. По-прежнему не работает

Ответ №1:

Вы повторно используете одни и те же идентификаторы в каждом DIV, вам нужно использовать классы вместо этого. Затем используйте функции обхода DOM, чтобы получить значение ввода в том же DIV, что и кнопка, на которую нажал пользователь.

Для этого потребуется переместить </div> для .edit_roomRow DIV в после .change-btn DIV, чтобы он был в том же DIV, что и форма.

PHP:

 <?php
include('php/connect.php');

$chquery = "SELECT * FROM rooms";
$chresult = mysqli_query($conn, $chquery);

while($chrow = mysqli_fetch_array($chresult)){
    echo "<div class='edit_roomRow'>";
    echo "<h1> Rum " . $chrow['Roomnumber'] . "</h1>";
    echo "<form>";
    echo "Rumsnummer:<br> <input class='c-roomnumber' type='text' value = '" . $chrow['Roomnumber'] . "'><br>";
    echo "Beskrivning:<br> <input class='c-description' type='text' value = '" . $chrow['Description'] . "'>";
    echo "</form>";
    echo "<br>";
    echo "<div class='btn btn-warning change-btn' data-value='". $chrow['ID'] . "' style='float: right; margin-top: 100px;'>Ändra</div>";
    echo "</div>";
    echo "<hr/>";
}

mysqli_free_result($chresult);

mysqli_close($conn);

?>
  

JS:

 $(".change-btn").click(function(){
    var div = $(this).closest(".edit_roomRow");
    var id = $(this).attr("data-value");
    var description = div.find(".c-description").val();
    var roomnumber = div.find(".c-roomnumber").val();
    //Call to ajax
    $.ajax({
        method:"GET",
        url: "php/changepost.php",
        data:{ id: id, description: description, roomnumber: roomnumber },
        success: function(){
            div.find(".c-description").val("");
            div.find(".c-roomnumber").val("");
            //Reload specific div with rooms, avoid full page reload
            $(".changerooms").load(location.href   " .changerooms");
        }
    })
})
  

Комментарии:

1. Не знаю почему, но значения становятся «неопределенными», и post сбрасывается вообще без значения в БД

2. Я неправильно прочитал ваш HTML. По какой-то причине у вас есть change-btn вне DIV.

3. Можете ли вы переместить ее внутрь .edit_roomRow DIV, или мне нужно добавить другой контейнер в HTML?

4. Я могу попробовать переместить ее внутрь, я понял, что в этом проблема. Значит, .closest не может выполнять поиск за пределами div?

5. Конечно, нет. Определение .closest() заключается в поиске ближайшего окружающего элемента.