Удаление записей через PHP без перезагрузки страницы (с использованием AJAX)

Я пытаюсь удалить некоторые записи из таблицы базы данных через PHP без перезагрузки страницы (с использованием AJAX). Сначала я печатаю всю информацию в таблице, а затем пользователь может щелкнуть кнопку delete, которая удалит запись. Однако у меня возникают проблемы с передачей записи id методу AJAX.

ListProducts.php

create connection
...
$result = mysqli_query($conn, $sql);

echo "<table border = '1' style = 'border-collapse:collapse;'>";
echo "<tr><th>UserID</th><th>Username</th><th>Action</th></tr>";

if (mysqli_num_rows($result)>0){
    while ($row = mysqli_fetch_assoc($result)){
        echo "<tr><td>".$row['id']."</td><td>".$row['username']."</td><td><input type = 'submit' onclick = 'delete_record()' value = 'Delete' id = '".$row['id']."'></td></tr>";
    }
}

Затем на той же странице есть функция AJAX. Я дал каждому полю input соответствующий идентификатор и пытаюсь выбрать его с помощью jQuery.

function delete_rekord(){
    var id = "Default";
    $(document).ready(function(){
        $("input").click(function(){
            id = $(this).attr('id');
        });
    });
    alert(id); //Test; will print DEFAULT
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function (){
        if (this.readyState == 4 && this.status == 200){
            alert("Deleted user with ID: " + this.responseText);
        }
    }
    xhttp.open("GET", "delete.php?id = "+id, true);
    xhttp.send();
}

На delete.php я просто удаляю запись и печатаю идентификатор удаленной записи, который я собираю в этой функции, как responseText и распечатываю сообщение. Я поставил тестовый alert(id) и кажется, что значение var id равно остается по умолчанию, как я его инициализирую. Так что ошибка должна быть в том, как я получаю идентификатор через jQuery. Есть идеи, как это решить?
Спасибо

Вы не можете получить значение идентификатора из функции готовности документа. То есть всегда показывать значение ПО УМОЛЧАНИЮ.

rawathemant 25.06.2018 15:18

Вы должны подготовить оставшийся код внутри документа.

rawathemant 25.06.2018 15:18

Я отредактировал ваш вопрос, теперь проверьте работает он или нет?

rawathemant 25.06.2018 15:21
function delete_rekord(){ var id = "Default"; $(document).ready(function(){ $("input").click(function(){ id = $(this).attr('id'); }); }); - это беспорядок - по сути, у вас есть один обработчик событий внутри другого. Вы понимаете, что делает этот код? Я подозреваю, что нет. Либо используйте встроенные обработчики событий, либо используйте ненавязчивые обработчики событий в стиле jQuery. Не смешивайте и не сопоставляйте и, конечно же, не помещайте оба элемента в один и тот же элемент для обработки одного и того же события - это очень сбивает с толку. Также вам может показаться, что jQuery $ .ajax проще в использовании, чем собственный XHR.
ADyson 25.06.2018 15:24

@rawathemant относительно вашего (в настоящее время ожидающего) редактирования: вам не следует редактировать вопрос с целью демонстрации потенциального решения - таким образом никто не сможет увидеть исходную проблему, а текст вопроса не имеет смысла. Если вы думаете, что можете это исправить, скопируйте код в Отвечать, измените его, чтобы он работал, а затем отправьте ответ. Также таким образом вы можете получить положительные голоса / принятие ответов и т. д. Я думаю, что на самом деле у вас уже достаточно репутации, и вы все равно должны это понимать. Пожалуйста, отмените свою правку. Спасибо.

ADyson 25.06.2018 15:27

@ADyson невозможно отозвать отредактировать.

rawathemant 25.06.2018 15:38

@rawathemant В этом случае я предлагаю вам изменить свое редактирование таким образом, чтобы оно вернуло код в исходное состояние, и укажите это в своем комментарии к редактированию, чтобы рецензенты поняли. Возможно, вы можете оставить какие-то незначительные улучшения в формулировке вопроса, или в форматировании кода, или в чем-то еще, если вы можете это придумать.

ADyson 25.06.2018 15:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
52
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

передайте $ row ['id'] в вашу функцию javascript, как показано ниже. В вашем html измените код, как показано ниже

<input type = 'submit' onclick = 'delete_record(".$row['id'].")' value = 'Delete' id = '".$row['id']."'>

В вашем javascript измените функцию следующим образом

function delete_rekord(rowid){

   var id = rowid;

Надеюсь, это поможет тебе

Так очевидно, спасибо. Но мне кажется, что мне нужно перезагрузить страницу, чтобы увидеть изменения (в распечатанной таблице). Я что-то не так сделал с AJAX?

Bendemann 25.06.2018 15:36

ваш ajax имеет дело только с удалением записи без отправки / обновления страницы. чтобы обработать таблицу с удаленными записями, необходимо обновить страницу. ИЛИ вы можете скрыть соответствующую строку таблицы после вызова ajax, чтобы она выглядела так, как будто запись была удалена из таблицы.

sree 25.06.2018 15:40

Вы должны вставить переменную id в функцию удаления.

echo "<tr><td>".$row['id']."</td><td>".$row['username']."</td><td><input type='submit' onclick='delete_record(".$row['id']."); return false;' value = 'Delete' id = '".$row['id']."'></td></tr>";`

в твоем js

function delete_record(id){ // also rename it to delete_record your fn name was delete_rekord
  alert(id); //Test; will print the correct ID
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function (){
    if (this.readyState == 4 && this.status == 200){
        alert("Deleted user with ID: " + this.responseText);
    }
  }
  xhttp.open("GET", "delete.php?id = "+id, true);
  xhttp.send();
}

Передайте значение Id как параметр функции

<input type ='submit' onclick = 'delete_record(".$row['id'].")' value = 'Delete' id = '".$row['id']."'>

function delete_record(id){
    alert(id);
}

Другие вопросы по теме