ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

Разработка отдельных фрагментов сайтов, консультации по вопросам верстки веб-страниц и веб-программирования.

Редактирование и удаление категорий и книг

Редактирование и удаление категорий и книг

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

Однако с навигацией администратора связаны некоторые отличия. Для него выводятся особые опции, связанные с тем, что зарегистрирована переменная сеанса admin_user. Например на рассмотренной ранее странице show_cat.php будут заметны отличия в меню опций.

Вывод сценария show_cat.php для администратора отличается от вывода для рядового посетителя

На этой странице администратору предоставляются две дополнительные опции: Меню администратора и Изменить категорию. Кроме того, в правом верхнем углу вместо кнопки вызова покупательской тележки мы видим кнопку Выход.

Все это реализуется с помощью следующего фрагмента кода:

if(isset($_SESSION['admin_user']))
{
echo "<ul>";
echo"<li>". display_button('index.php', 'continue', 'Продолжить покупки')."</li>";
echo"<li>". display_button('admin.php', 'admin-menu', 'Меню администрирования')."</li>";
echo"<li>".display_button("edit_category_form.php?catid=$catid",
'edit-category', 'Редактировать категорию')."</li>";
echo "</ul>";
}

Когда администратор выполняет щелчок по кнопке Изменить категорию запускается сценарий edit_category_form.php.

Сценарий edit_category_form.php дает администратору возможность редактировать информацию о категории или удалять ее

Сценарий edit_category_form.php дает администратору возможность редактировать информацию о категории или удалять ее

<?php

// Включить библиотеки функций для этого приложения
require_once('book_sc_fns.php');
session_start();
$pagename = "Редактирование сведений о категории";
$keywords= "";
$description="Интернет-магазин ABC-Book. Книги традиционные и на электронных носителях";
do_html_header($pagename, $keywords, $description);
echo "<section class=blok>";
echo "<div class=col1>";
echo "<header>";
echo "<h5>Меню администратора</h5>";
echo "</header>";
echo "<nav>";
if (check_admin_user())
display_admin_menu();
else
echo 'У вас нет прав для доступа на страницу администрирования.';
echo "</nav>";
echo "</div>";
echo "<div class=col2>";
echo "<header>";
echo "<h2>$pagename</h2>";
echo "</header>";
echo "<div class=login>";
if (check_admin_user())
{
if ($catname = get_category_name($_GET['catid']))
{
$catid = $_GET['catid'];
$cat = compact('catname', 'catid');
display_category_form($cat);
}
else
echo 'Невозможно получить сведения о категории.<br />';
}
else
echo 'Вам не разрешен доступ на эту страницу.';
echo "</div>";
echo "</div>";
echo"</section>";
do_html_footer();

?>

Функция display_category_form() из библиотеки

Такие же опции присутствуют и сценарии show_book.php.

if( check_admin_user() )
{
display_button("edit_book_form.php?isbn=$isbn",
'edit-item', 'Редактировать элемент');
display_button('admin.php', 'admin-menu', 'Меню администрирования');
display_button($target, 'continue', 'Продолжить');
}

Вывод сценария show_book.php для администратора отличается от вывода для рядового посетителя

Когда администратор выполняет щелчок на кнопке Редактировать книгу, запускается сценарий edit_book_form.php

Сценарий edit_book_form.php дает администратору возможность редактировать информацию о книге или удалять ее

Сценарий edit_book_form.php дает администратору возможность редактировать информацию о книге или удалять ее

<?php

// Включить библиотеки функций для этого приложения
require_once('book_sc_fns.php');
session_start();
$pagename = "Редактирование сведений о книге";
$keywords= "";
$description="Интернет-магазин ABC-Book. Книги традиционные и на электронных носителях";
do_html_header($pagename, $keywords, $description);
echo "<section class=blok>";
echo "<div class=col1>";
echo "<header>";
echo "<h5>Меню администратора</h5>";
echo "</header>";
echo "<nav>";
if (check_admin_user())
display_admin_menu();
else
echo 'У вас нет прав для доступа на страницу администрирования.';
echo "</nav>";
echo "</div>";
echo "<div class=col2>";
echo "<header>";
echo "<h2>$pagename</h2>";
echo "</header>";
echo "<div class=login>";
if (check_admin_user())
{
if ($book = get_book_details($_GET['isbn']))
{
display_book_form($book);
}
else
echo 'Невозможно получить сведения о книге.<br />';
}
else
echo 'Вам не разрешен доступ в область администратора.';
echo "</div>";
echo "</div>";
echo"</section>";
do_html_footer();

?>

Фактически это та же форма, что ранее использовалась для извлечения данных связанных с книгой. Просто мы встроили в нее возможность передачи и отображения существующих сведений о книге. То же самое было выполнено и для просмотра формы категорий.

Функция display_book_form() из библиотеки admin_fns.php — имеет двойное назначение вывода формы вставки и редактирования информации о книге

<?php
function display_book_form($book = '')
// Отображает форму для книги.
// Эта форма во многом подобна форме для категорий.
// Форма может применяться для вставки и редактирования информации о книге.
// Для вставки передавать параметр не нужно. В результате $edit
// получит значение false и форма вызовет сценарий insert_book.php.
// Для обновления данных следует передать массив, содержащий данные о книге.
// Форма отобразит предыдущие данные и кнопку, приводящую к вызову update_book.php.
// Кроме того, добавляется кнопка удаления книги.
{
// Если передается существующая книга, перейти в "режим редактирования"
$edit = is_array($book);

// Большая часть формы представляет собой простой HTML-код
// с небольшими вставками PHP-кода.
?>
<form method='post'
action="<?php echo $edit?'edit_book.php':'insert_book.php';?>">
<table border="0">
<tr>
<td>ISBN:</td>
<td><input type='text' name='isbn'
value="<?php echo $edit?$book['isbn']:''; ?>"></td>
</tr>
<tr>
<td>Название:</td>
<td><input type='text' name='title'
value="<?php echo $edit?$book['title']:''; ?>"></td>
</tr>
<tr>
<td>Автор:</td>
<td><input type='text' name='author'
value="<?php echo $edit?$book['author']:''; ?>"></td>
</tr>
<tr>
<td>Категория:</td>
<td><select name='catid'>
<?php
// Прочитать из базы данных список возможных категорий
$cat_array=get_categories();
foreach ($cat_array as $thiscat)
{
echo '<option value="';
echo $thiscat['catid'];
echo '"'
;
// Если книга существует, поместить ее в текущую категорию
if ($edit && $thiscat['catid'] == $book['catid'])
echo ' selected';
echo '>';
echo $thiscat['catname'];
echo "</option>\n";
}
?>
</select>
</td>
</tr>
<tr>
<td>Цена:</td>
<td><input type='text' name='price'
value="<?php echo $edit?$book['price']:''; ?>"></td>
</tr>
<tr>
<td>Описание:</td>
<td><textarea rows='3' cols='50'
name='description'>
<?php echo $edit?$book['description']:''; ?>
</textarea></td>
</tr>
<tr>
<td> </td>
<td <?php if (!$edit) ?> >
<?php
if ($edit)
// Если был обновлен номер ISBN, для поиска книги
// в базе данных понадобится старый номер ISBN
echo '<input type="hidden" name="oldisbn"
value="'.$book['isbn'].'">'
;
?>
<input type='submit'
value="<?php echo $edit?'Обновить':'Добавить'; ?> книгу">
</form></td>
<?php
if ($edit)
{
echo '<td>';
echo '<form method="post" action="delete_book.php">';
echo '<input type="hidden" name="isbn"
value="'.$book['isbn'].'">'
;
echo '<input type="submit"
value="Удалить книгу">'
;
echo '</form></td>';
}
?>
</td>
</tr>
</table>
</form>
<?php
}

?>

Если передается массив, содержащий данные о книге, форма переводится в режим редактирования, а поля заполняются существующими данными:

<input type='text' name='price'
value="<?php echo $edit?$book['price']:''; ?>">

На форме редактирования мы видим две кнопки: одна для обновления информации о книге, а вторая для удаления книги целиком. С этими кнопками связаны сценарии edit_book.php и delete_book.php, которые соответствующим образом обновляют базу данных.

Сценарий edit_book.php — вносит изменения информации о книге

<?php

// Включить библиотеки функций для этого приложения
require_once('book_sc_fns.php');
session_start();
$pagename = "Обновление сведений о книге";
$keywords= "";
$description="Обновление сведений о книге";
do_html_header($pagename, $keywords, $description);
echo "<section class=blok>";
echo "<div class=col1>";
echo "<header>";
echo "<h5>Меню администратора</h5>";
echo "</header>";
echo "<nav>";
if (check_admin_user())
display_admin_menu();
else
echo 'У вас нет прав для доступа на страницу администрирования.';
echo "</nav>";
echo "</div>";
echo "<div class=col2>";
echo "<header>";
echo "<h2>$pagename</h2>";
echo "</header>";
echo "<article>";
if (check_admin_user())
{
if (filled_out($_POST))
{
$oldisbn = $_POST['oldisbn'];
$isbn = $_POST['isbn'];
$title = $_POST['title'];
$author = $_POST['author'];
$catid = $_POST['catid'];
$price = $_POST['price'];
$description = $_POST['description'];

if(update_book($oldisbn, $isbn, $title, $author, $catid,
$price, $description))
echo 'Сведения о книге обновлены.<br />';
else
echo 'Невозможно обновить сведения о книге.<br />';
}
else
echo 'Вы ввели не все данные. Пожалуйста, повторите попытку.';
}
else
echo 'Вам не разрешен доступ на эту страницу.';
echo "<article>";
echo "</div>";
echo"</section>";
do_html_footer();

?>

Сценарий delete_book.php — удаляет информацию о книге

<?php

// Включить библиотеки функций для этого приложения
require_once('book_sc_fns.php');
session_start();
$pagename = "Удаление книги";
$keywords= "";
$description="Удаление книги";
do_html_header($pagename, $keywords, $description);
echo "<section class=blok>";
echo "<div class=col1>";
echo "<header>";
echo "<h5>Меню администратора</h5>";
echo "</header>";
echo "<nav>";
if (check_admin_user())
display_admin_menu();
else
echo 'У вас нет прав для доступа на страницу администрирования.';
echo "</nav>";
echo "</div>";
echo "<div class=col2>";
echo "<header>";
echo "<h2>$pagename</h2>";
echo "</header>";
echo "<article>";
if (check_admin_user())
{
if (isset($_POST['isbn']))
{
$isbn = $_POST['isbn'];
if(delete_book($isbn))
echo 'Книга '.$isbn.' удалена.<br />';
else
echo 'Книга '.$isbn.' не может быть удалена.<br />';
}
else
echo 'Для удаления книги необходимо ввести ISBN. Пожалуйста, повторите попытку.<br />';
}
else
echo 'Вам не разрешен доступ на эту страницу.';
echo "<article>";
echo "</div>";
echo"</section>";
do_html_footer();

?>

Версии рассмотренных выше сценариев связанные с категориями, работают в основном идентично, за исключением одного момента. Когда администратор пытается удалить категорию, этого не произойдет, пока категория содержит книги. Это проверяется путем запроса в базу данных. В этом случае минимизируется вероятность ошибочного удаления. В нашей ситуации, если удалить категорию, которая содержит книги, эти книги станут висячими. Переход к ним будет невозможен, поскольку с данными книгами не связана ни одна категория.

Сценарий edit_category.php — вносит изменения информации о категории

<?php

// Включить библиотеки функций для этого приложения
require_once('book_sc_fns.php');
session_start();
$pagename = "Редактирование сведений о категории";
$keywords= "";
$description="Интернет-магазин ABC-Book. Книги традиционные и на электронных носителях";
do_html_header($pagename, $keywords, $description);
echo "<section class=blok>";
echo "<div class=col1>";
echo "<header>";
echo "<h5>Меню администратора</h5>";
echo "</header>";
echo "<nav>";
if (check_admin_user())
display_admin_menu();
else
echo 'У вас нет прав для доступа на страницу администрирования.';
echo "</nav>";
echo "</div>";
echo "<div class=col2>";
echo "<header>";
echo "<h2>$pagename</h2>";
echo "</header>";
echo "<article>";
if (check_admin_user())
{
if (filled_out($_POST))
{
if(update_category($_POST['catid'], $_POST['catname']))
echo 'Сведения о категории обновлены.<br />';
else
echo 'Невозможно обновить сведения о категории.<br />';
}
else
echo 'Вы ввели не все данные. Пожалуйста, повторите попытку.';
}
else
echo 'Вам не разрешен доступ на эту страницу.';
echo "<article>";
echo "</div>";
echo"</section>";
do_html_footer();
?>

Сценарий delete_category.php — удаляет информацию о категории

<?php

// Включить библиотеки функций для этого приложения
require_once('book_sc_fns.php');
session_start();
$pagename = "Удаление категории";
$keywords= "";
$description="Удаление категории";
do_html_header($pagename, $keywords, $description);
echo "<section class=blok>";
echo "<div class=col1>";
echo "<header>";
echo "<h5>Меню администратора</h5>";
echo "</header>";
echo "<nav>";
if (check_admin_user())
display_admin_menu();
else
echo 'У вас нет прав для доступа на страницу администрирования.';
echo "</nav>";
echo "</div>";
echo "<div class=col2>";
echo "<header>";
echo "<h2>$pagename</h2>";
echo "</header>";
echo "<article>";
if (check_admin_user())
{
if (isset($_POST['catid']))
{
if(delete_category($_POST['catid']))
echo 'Категория удалена.<br>';
else
echo 'Невозможно удалить категорию.<br>'
.'Скорее всего, категория не пуста.<br>';
}
else
echo 'Категория не указана. Пожалуйста, повторите попытку.<br>';
}
else
echo 'Вам не разрешен доступ на эту страницу.';
echo "<article>";
echo "</div>";
echo"</section>";
do_html_footer();

?>