Удалить из начальной загрузки дату, заполненную данными из mysql, преобразованными в массив json

#php #mysql #json #database #twitter-bootstrap

#php #mysql #json #База данных #twitter-bootstrap

Вопрос:

Не уверен, усложняю ли я себе жизнь, но вот следующий код. Чего я хочу добиться, так это когда пользователь нажимает флажок и нажимается кнопка удаления, запись удаляется. Запись хранится в базе данных mysql. Я извлек данные с помощью php и преобразовал в массив json.

Таблица начальной загрузки

 <div class="col col-xs-6 text-right">
                <?php include 'modals/adduser.php';
                ?>
                <button type="button" class="btn btn-primary btn-create" data-toggle="modal" data-target="#mymodal">New User</button>
<button type="button" class="btn btn-danger" id="btn-delete">Delete User</button>
              </div>
            </div>
          </div>
                <div class="panel-body">

                    <table id="userstable" data-toggle="table" data-url="tables/userstable.php"   data-show-refresh="true" data-show-toggle="true" data-show-columns="true" data-search="true" data-select-item-name="toolbar1" data-pagination="true" data-sort-name="name" data-sort-order="desc">
                        <thead>
                        <tr>
                            <th data-field="state" data-checkbox="true">checkbox</th>
                            <th data-field="uname"  data-sortable="true">Username</th>                
                            <th data-field="userName" data-sortable="true">Full Name</th>
                            <th data-field="userEmail"  data-sortable="true">Email Address</th>
                            <th data-field="userRole" data-sortable="true">User Level</th>
                        </tr>
                        </thead>

                    </table>
  

Файл, который извлекает данные для таблицы.

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

    $result = mysqli_query($connection, "SELECT uname, userName, userEmail, userRole FROM users");

    $json_array = array();

    while($row = mysqli_fetch_assoc($result))
    {
            $json_array[] = $row;
    }

echo json_encode($json_array);

?>
  

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

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

1. Если вы хотите передать ответ echo json_encode() , вам нужно использовать вызов ajax для извлечения данных из вашей базы данных. Кроме того, я не вижу <body></body> в вашей таблице.

2. Это PHP и HTML-код в разных файлах?

3. Вы заполняете таблицу какой-либо функцией ajax / javascript? Потому что я не вижу никаких данных в таблице, только заголовки. Если да, вам просто нужно получить значение флажка (идентификатор для ссылки на пользователя) и передать его так же, как вы делаете при получении данных (json), но вместо оператора SELECT «УДАЛИТЬ ИЗ таблицы, ГДЕ id = $id». Также я вряд ли рекомендую вам использовать PDO вместо этого, чтобы предотвратить внедрение SQL

4. @Franco Я не скопировал всю свою страницу сюда, так как это заняло бы много места. Я показал, как моя таблица начальной загрузки создается в одном файле, затем ниже приведен отдельный файл, который получает данные для отображения в таблице. Это задается URL-адресом данных в самой таблице.

Ответ №1:

Этот ответ основан на следующих предположениях:

  • Ваш HTML и PHP-код находятся на одной странице.
  • uname столбец уникален для users таблицы, т.Е. Этот столбец не содержит повторяющихся значений.

Вместо json_encode ввода массива просто выполните цикл по результирующему набору и отобразите каждую строку в отдельной строке таблицы, плюс одну последнюю строку таблицы в качестве заполнителя для кнопки ввода удаления. Кроме того, оберните все <tbody> с помощью a form и сделайте checkbox входной элемент таким:

 <td><input type="checkbox" name="users[]" value="<?php echo $row['uname']; ?>" /></td>
  

Таким образом, после отправки формы $_POST['users'] будет содержаться массив uname s, который вы хотите удалить. В целом, ваш код должен быть таким:

 // your code

<table id="userstable" data-toggle="table" data-url="tables/userstable.php" data-show-refresh="true" data-show-toggle="true" data-show-columns="true" data-search="true" data-select-item-name="toolbar1" data-pagination="true" data-sort-name="name" data-sort-order="desc">
    <thead>
    <tr>
        <th data-field="state" data-checkbox="true">checkbox</th>
        <th data-field="uname"  data-sortable="true">Username</th>                
        <th data-field="userName" data-sortable="true">Full Name</th>
        <th data-field="userEmail"  data-sortable="true">Email Address</th>
        <th data-field="userRole" data-sortable="true">User Level</th>
    </tr>
    </thead>

    <tbody>
        <form action="yourPage.php" method="post">
        <?php
            include'../connect.php';
            $result = mysqli_query($connection, "SELECT uname, userName, userEmail, userRole FROM users");
            while($row = mysqli_fetch_assoc($result)){
                ?>
                <tr>
                    <td><input type="checkbox" name="users[]" value="<?php echo $row['uname']; ?>" /></td>
                    <td><?php echo $row['uname']; ?></td>
                    <td><?php echo $row['userName']; ?></td>
                    <td><?php echo $row['userEmail']; ?></td>
                    <td><?php echo $row['userRole']; ?></td>
                </tr>
               <?php
            }
        ?>
        <tr colspan="5"><td><input type="submit" name="submit" value="delete" /></td></tr>
        </form>
    </tbody>
</table>

// your code
  

Примечание: Не забудьте изменить action="yourPage.php" свою страницу.

И после отправки формы обработайте / удалите их следующим образом:

 if(isset($_POST['submit'])){
    foreach($_POST['users'] as $uname){

        // perform delete operation based on the $uname

    }
}
  

Если вы хотите увидеть полную структуру массива, выполните var_dump($_POST);

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

1. Спасибо за ваш ответ @Rajdeep Paul. Таблица и данные базы данных повторно загружаются в отдельные файлы. Могу ли я, как вы говорите, просто содержать таблицу в форме, а затем иметь кнопку удаления в верхней части таблицы. Я полагаю, в вашем примере выше есть кнопка удаления в каждой строке таблицы?

2. @MartinToye Нет, для всей таблицы есть только одна кнопка удаления. Что вы будете делать здесь, вы отметили строки, которые хотите удалить, и нажали кнопку удаления. После отправки формы вы можете удалить каждую из отмеченных строк с помощью foreach цикла. Протестируйте свое приложение с помощью приведенных фрагментов кода, надеюсь, это решит вашу проблему. Кстати, есть ли какая-то конкретная причина, по которой вы разделили HTML и PHP-код в разных файлах?

3. Извините, еще один вопрос, прежде чем попробовать его. Будет ли это работать с нумерацией страниц.

4. @MartinToye Да, это также будет работать с нумерацией страниц.

5. обновили код, и кнопка не отображается. Последняя строка — это просто флажок.