Как я могу обновить любую строку, а не только верхнюю, с помощью кнопки обновления с каждой стороны в PHP и AJAX

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

Это код для index.php

<html>
<head>
    <title>Test</title>
    <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
    <center>
    <h3>UPDATE DATA</h3>

    <?php
    $run = 0;
    $conn = new mysqli('localhost', '', '', '');
    $sql = "SELECT * FROM moderator";
    $result = $conn->query($sql);
    while ( $row=mysqli_fetch_assoc($result)) {
        $run = $run + 1;
       ?>
       <div>

       ID<input type = "text" id = "id" value = "<?php echo $row['id']; ?>">;
       Moderator<input type = "text" id = "mod" value = "<?php echo $row['name']; ?>">;         
       Category<input type = "text" id = "ctgr" value = "<?php echo $row['category']; ?>">;

       <button type = "submit" id = "update" rel = "<?php echo $run; ?>">UPDATE</button>
       </div>
       <?php
    }?> 

    </center>
    <script>
        $(document).ready(function(){
            $("#update").click(function(){
                var name=$("#mod").val();
                var ctgr=$("#ctgr").val();
                var id=$("#id").val();
                $.ajax({
                    url:'update.php',
                    method:'POST',
                    data:{
                        name:name,
                        ctgr:ctgr,
                        id:id
                    },
                    success:function(response){
                        alert(response);
                    }
                });
            });
        });
    </script>
</body>

Это код для update.php

<?php

$conn = new mysqli('localhost', '', '', '');
$name=$_POST["name"];
$ctgr=$_POST["ctgr"];
$id=$_POST["id"];
$sql = "UPDATE moderator set name='$name', category='$ctgr' where id='$id'";
if ($conn->query($sql)===TRUE){
    echo "DATA updated";
}
?>

Вы, наверное, видите, что я пытаюсь создать отдельную переменную для каждой строки, но не могу понять. К сожалению, код тоже очень запутанный.

Я удалил информацию о базе данных, но строки отображаются, когда вводятся учетные данные.

Каждый из ваших входов формы будет иметь один и тот же идентификатор, который неверен. У каждого элемента должен быть свой идентификатор. Лучший способ справиться с этим - дать каждому input свой уникальный идентификатор, а затем передать весь запрос формы через ваш AJAX. Затем в своем PHP вы можете перебрать значения для своего оператора обновления.

fyroc 04.11.2018 03:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
132
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Все элементы ввода ваших строк имеют одинаковый атрибут id

Подобно id первых строк элементы подобны id, mod, ctgr

Также id элементов вторых строк - id, mod ctgr

Jquery находит первый элемент, если там несколько элементов с одинаковым идентификатором

Вы можете создать уникальный идентификатор, добавив к нему уникальную инкрементную переменную $ run как

ID<input type = "text" id = "id"+<?php echo $run; ?> value = "<?php echo $row['id']; ?>">; Moderator<input type = "text" id = "mod"+<?php echo $run; ?> value = "<?php echo $row['name']; ?>">; Category<input type = "text" id = "ctgr"+<?php echo $run; ?> value = "<?php echo $row['category']; ?>">; <button type = "submit" id = "update" rel = "<?php echo $run; ?>" onclick = "updatetodb(  <?php echo $run; ?>);“  >UPDATE</button>

Затем создайте функцию javascript с именем updatetodb с одним аргументом и определите строку по этому аргументу как

function updatetodb(var run) {
var id=$('#id' +run).value;

Большое спасибо!! На самом деле это то, что я изначально пытался сделать, поэтому спасибо за помощь

thomas29s 05.11.2018 06:05
Ответ принят как подходящий

Это связано с тем, что у вас дублированы идентификаторы ввода, у вас должен быть только один идентификатор с тем же значением в html, это действительно так, вы не получите ошибки, но у вас будут проблемы с javascript, когда вы попытаетесь получить доступ к этим идентификаторам , вы получите только первый.

Чтобы исправить это, вы можете удалить идентификатор и поместить его как класс:

   <div>

   ID<input type = "text" class = "id" value = "<?php echo $row['id']; ?>">;
   Moderator<input type = "text" class = "mod" value = "<?php echo $row['name']; ?>">;         
   Category<input type = "text" class = "ctgr" value = "<?php echo $row['category']; ?>">;

   <button type = "submit" class = "update" rel = "<?php echo $run; ?>">UPDATE</button>
   </div>

и используйте этот JS:

    $(document).ready(function(){
        $(".update").click(function(){
            var container = $(this).closest('div'); // parent div
            var name = container.find('.mod').val();
            var ctgr = container.find('.ctgr').val();
            var id = container.find('.id').val();
            $.ajax({
                url:'update.php',
                method:'POST',
                data:{
                    name:name,
                    ctgr:ctgr,
                    id:id
                },
                success:function(response){
                    alert(response);
                }
            });
        });
    });

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