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

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

Имеется таблица на сайте, в которой перечислены данные взятые из таблицы MySQL (типа id, название, описание, дата добавления и т.д…). Все работает прекрасно. Но когда я хочу что-то удалить или изменить в этой таблице приходится это делать через phpmyadmin. Как мне это сделать непосредственно на сайте, напрямую?

Имя   | Описание       | Дата доб. | Удалить | Редактировать
------------------------------------------------------------
Слон  | Большой, серый | 30-12-06  | Удл.    | Ред.

Вообще, такой скрипт - неотъемлемая часть любой CMS. Ведь вся информация, как правило, хранится в базе данных. И когда мы через админку добавляем, удаляем, редактируем новости или статьи - фактически, мы добавляем, удаляем, редактируем записи в таблице.

<?php

if ( !isset( $_GET["action"] ) ) $_GET["action"] = "showlist"
 
switch ( $_GET["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;
  default:
    show_list();
}

// Функция выводит список всех записей в таблице БД
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><input type="submit" value="Сохранить"></td>';
  echo '<td><button type="button" onClick="history.back();">Отменить</button></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="'.$item['title'].'"></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td>Описание</td>';
  echo '<td><textarea name="description">'.$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();
}
 
?>

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

  1. Псилоциб:

    Спасибо огромное!!!
    Скрипт очень помог, только пока еще не получается реализовать редактирование, идет ошибка Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\proba.ru\www\pages\program.php on line 100
    Строка, на которую он ругается: $item = mysql_fetch_array( $res );
    а $res, в свою очередь - результат, который возвращает sql-запрос на выборку именно той строки, ID которой и заявлено.

  2. Жеха:

    Добрый день, скиньте плиз ссылку на рабочий пример кода.

    В ряде изменений исходного кода, вылезает таже ошибка, что и у предыдущего поста, только в другой строчке …

  3. admin:

    Жеха, это и есть рабочий пример. Картинка - реальный screenshot. Если что-то не получается, давайте обсудим это на форуме.

  4. Жеха:

    Спасибо за помощь, уже сделал … ;)

  5. Алексей:

    Спасибо, целый день ковырял сегодня различные коды, все такое глючное…
    Твой пример заслуживает внимания! Спасибо. Удачи

  6. Grycik:

    Огромнейшее спасибо, я 4 дня мучался с такой формой редактирования!!!

  7. Оля:

    что означает?
    action=editform&id=’.$item['id']

  8. Siriusal:

    Огромное спасибо!!! Я от счастья чуть не взлетел!

  9. Serfer:

    Спасибо)

Оставьте свой отзыв