Добавление и удаление строк таблицы БД

30.06.2010

Теги: MySQLPHPWeb-разработка

Большинство современных сайтов работают на какой-нибудь 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.

Поиск: MySQL • PHP • Web-разработка

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.