Как я могу обновить любую строку, а не только верхнюю строку с кнопкой обновления на каждой стороне в PHP и AJAX - PullRequest
0 голосов
/ 04 ноября 2018

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

Это код для 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";
}
?>

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

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

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

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

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

   <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);
                }
            });
        });
    });
0 голосов
/ 04 ноября 2018

Все ваши элементы ввода строк имеют одинаковый атрибут 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...