#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. обновили код, и кнопка не отображается. Последняя строка — это просто флажок.