Добавление и удаление строк таблицы БД
30.06.2010
Теги: MySQL • PHP • Web-разработка
Большинство современных сайтов работают на какой-нибудь CMS. Вся информация, как правило, хранится в базе данных. Когда мы через админку добавляем, удаляем, редактируем новости или статьи — фактически, мы добавляем, удаляем, редактируем записи в таблице БД. Посмотрим, как мог бы выглядеть такой скрипт.
<?php $actions = array('showlist', 'addform', 'add', 'editform', 'update', 'delete'); $action = 'showlist'; if ( isset($_GET['action']) and in_array($_GET['action'], $actions) ) $action= $_GET['action']; switch ( $action ) { case 'showlist': // Список всех записей в таблице БД show_list(); break; case 'addform': // Форма для добавления новой записи get_add_item_form(); break; case 'add': // Добавить новую запись в таблицу БД add_item(); break; case 'editform': // Форма для редактирования записи get_edit_item_form(); break; case 'update': // Обновить запись в таблице БД update_item(); break; case 'delete': // Удалить запись в таблице БД delete_item(); break; } // Функция выводит список всех записей в таблице БД function show_list() { $query = "SELECT `id`, `title`, `description` FROM `items` WHERE 1"; $res = mysql_query( $query ); echo '<h2>Список</h2>'; echo '<table border="1" cellpadding="2" cellspacing="0">'; echo '<tr><th>ID</th><th>Наименование</th><th>Описание</th><th>Ред.</th><th>Удл.</th></tr>'; while ( $item = mysql_fetch_array( $res ) ) { echo '<tr>'; echo '<td>'.$item['id'].'</td>'; echo '<td>'.$item['title'].'</td>'; echo '<td>'.$item['description'].'</td>'; echo '<td><a href="'.$_SERVER['PHP_SELF'].'?action=editform&id='.$item['id'].'">Ред.</a></td>'; echo '<td><a href="'.$_SERVER['PHP_SELF'].'?action=delete&id='.$item['id'].'">Удл.</a></td>'; echo '</tr>'; } echo '</table>'; echo '<p><a href="'.$_SERVER['PHP_SELF'].'?action=addform">Добавить</a></p>'; } // Функция формирует форму для добавления записи в таблице БД function get_add_item_form() { echo '<h2>Добавить</h2>'; echo '<form name="addform" action="'.$_SERVER['PHP_SELF'].'?action=add" method="post">'; echo '<table>'; echo '<tr>'; echo '<td>Наименование</td>'; echo '<td><input type="text" name="title" value="" /></td>'; echo '</tr>'; echo '<tr>'; echo '<td>Описание</td>'; echo '<td><textarea name="description"></textarea></td>'; echo '</tr>'; echo '<tr>'; echo '<td></td>'; echo '<td><input type="submit" value="Сохранить"></td>'; echo '</tr>'; echo '</table>'; echo '</form>'; } // Функция добавляет новую запись в таблицу БД function add_item() { $title = mysql_escape_string( $_POST['title'] ); $description = mysql_escape_string( $_POST['description'] ); $query = "INSERT INTO items (title, description) VALUES ('".$title."', '".$description."');"; mysql_query ( $query ); header( 'Location: '.$_SERVER['PHP_SELF'] ); die(); } // Функция формирует форму для редактирования записи в таблице БД function get_edit_item_form() { echo '<h2>Редактировать</h2>'; $query = "SELECT `title`, `description` FROM items WHERE `id`=".$_GET['id']; $res = mysql_query( $query ); $item = mysql_fetch_array( $res ); echo '<form name="editform" action="'.$_SERVER['PHP_SELF'].'?action=update&id='.$_GET['id'].'" method="POST">'; echo '<table>'; echo '<tr>'; echo '<td>Наименование</td>'; echo '<td><input type="text" name="title" value="'.htmlspecialchars($item['title']).'"></td>'; echo '</tr>'; echo '<tr>'; echo '<td>Описание</td>'; echo '<td><textarea name="description">'.htmlspecialchars($item['description']).'</textarea></td>'; echo '</tr>'; echo '<tr>'; echo '<td><input type="submit" value="Сохранить"></td>'; echo '<td><button type="button" onClick="history.back();">Отменить</button></td>'; echo '</tr>'; echo '</table>'; echo '</form>'; } // Функция обновляет запись в таблице БД function update_item() { $title = mysql_escape_string( $_POST['title'] ); $description = mysql_escape_string( $_POST['description'] ); $query = "UPDATE `items` SET `title`='".$title."', `description`='".$description."' WHERE `id`=".$_GET['id']; mysql_query ( $query ); header( 'Location: '.$_SERVER['PHP_SELF'] ); die(); } // Функция удаляет запись в таблице БД function delete_item() { $query = "DELETE FROM `items` WHERE `id`=".$_GET['id']; mysql_query ( $query ); header( 'Location: '.$_SERVER['PHP_SELF'] ); die(); } ?>
Выбор и удаление нескольких записей
При создании админки часто встает задача выбора или удаления сразу нескольких записей из базы данных. Для этого обычно создается HTML-форма с набором флажков:
<input type="checkbox" name="item[]" value="15" /> <input type="checkbox" name="item[]" value="17" /> <input type="checkbox" name="item[]" value="22" /> <input type="checkbox" name="item[]" value="25" /> <input type="checkbox" name="item[]" value="32" />
Скрипт, формирующий список элементов checkbox формы, и удаляющий выбранные записи может выглядеть так:
<?php echo '<h2>Список</h2>'; echo '<form action="'.$_SERVER['PHP_SELF'].'" method="POST">'; $query = "SELECT `id`, `title` FROM `items` WHERE 1"; $res = mysql_query( $query ); echo '<table border="1">';; echo '<tr><th>ID</th><th>Наименование</th><th>Удл.</th></tr>'; while ( $item = mysql_fetch_array( $res ) ) { echo '<tr>'; echo '<td>'.$item['id'].'</td>'; echo '<td>'.$item['title'].'</td>'; echo '<td><input type="checkbox" name="item[]" value="'.$item['id'].'" /></td>'; echo '</tr>'; } echo '</table>'; echo '<input type="submit" name="submitForm" value="Удалить отмеченные" />'; echo '</form>'; if ( isset ( $_POST['item'] ) ) { $ids = implode( ',', $_POST['item'] ); $query = 'DELETE FROM `items` WHERE `id` IN ('.$ids.')'; mysql_query( $query ); header( 'Location: '.$_SERVER['PHP_SELF'] ); } ?>
Массив $_POST['item'] содержит ID всех отмеченных checkbox-ов (не отмеченные на сервер не передаются). Запрос к БД на удаление выглядит так:
DELETE FROM `items` WHERE `id` IN (6,9,11,12);
Если стоит задача не удаления записей, а их выборки, то вместо оператора DELETE следует использовать оператор SELECT.
- Блог на Laravel 7, часть 17. Временная зона для пользователей, деплой на хостинг TimeWeb
- Блог на Laravel 7, часть 16. Роль нового пользователя, сообщение админу о новом посте
- Блог на Laravel 7, часть 15. Восстановление постов, slug для категории, поста и страницы
- Блог на Laravel 7, часть 14. Валидация данных и права доступа при загрузке изображений
- Блог на Laravel 7, часть 13. Загрузка и ресайз изображений для категорий и постов блога
- Блог на Laravel 7, часть 12. Доп.страницы сайта в панели управления и в публичной части
- Блог на Laravel 7, часть 11. Панель управления — назначение ролей и прав для пользователей
Поиск: MySQL • PHP • Web-разработка