Уроки Разработка системы управления сайтом - Часть 3
14 декабря 2015
1677
CMS, система управления сайтом, создание сайтов

Разработка системы управления сайтом - Часть 3

Сложность Рубрика PHP
Демонстрация » Скачать »

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

 

Для начала, давайте же все-таки вспомним и окунемся в прошлые части, где я начинал свое повествование. И так, в первой части (разработка системы управления сайтом - Часть 1), я разработал вход, а также выход и вывод логина администратора. Во второй части (разработка системы управления сайтом - Часть 2), мы уже подробно с Вами смогли ознакомиться с выводом всех администраторов, а также с такими возможностями, как добавление, удаление и редактирование администраторов. В самом начале второй части, в описании я говорил, что в следующей части мы создадим с Вами роли, которые будут выполнять свою определенную функциональную особенность и создавать возможности для взаимодействия и управления содержимым системы управления сайтом, в сокращении CMS и предоставлять возможность администраторам, менеджерам и пользователям, иметь права доступа, чтобы можно было их использовать на сайте, а также между друг другом. Данная гибкость, позволит нам с легкостью редактировать и настраивать на сайте всевозможные параметры и давать четкое соблюдение прав доступа.

 

Теперь, перейдем к нюансам, которые меня поставили в тупик и после рассмотрения письма, я наверно задумался дня на два, стоит ли выпускать подобный материал или все же как-нибудь потом, начать с нуля. В чем же все-таки дело? А дело в том, что данный метод структурного программирования на PHP уже давно устарел и пользуется спросом, только в небольших правках и то не везде. Давным давно уже преобладает ООП  - объектно-ориентированное программирование, которое полностью себя оправдывает и если уж начинать подобную тематику, то по всей вероятности, лучше с него. Но все же, при уважении к старому читателю, а возможно появятся и новые читатели, я решил продолжить написание подобной тематики, но перед этим, хотел бы от Вас получить комментарии, - "Стоит ли продолжать или лучше перейти на ООП PHP программирование?". Использовать в таком случае, я стану PDO, так как он более практичен и универсален. Кстати, если уже дальше стану продолжать данную тематику, то по всей вероятности, Вы увидите это на видео уроках, так как скоро у нас они появиться и намного будет проще и для Вас быстрее, понять суть и смысл каждого обучающего урока.

 

Первый шаг. MySQL. 

 

Переходим, непосредственно, к разработке новых двух таблиц admin_access - доступы и admin_role - роли. Для чего они нужны? Таблица admin_access - позволяет задавать доступы только менеджерам и пользователям, в плане ограничения возможности захода в систему управления сайтом. Таблица admin_role - позволяет задавать каждому свои роли, которые делятся на администратора, менеджеров и пользователей.

Как Вы уже могли заметить, что я написал администратор, а не администраторы. Да, Да! Именно администратор, потому что он будет управлять абсолютно всем и нет никакой возможности, чтобы его мог кто то удалить или заблокировать, так как, это такая роль, от которой всегда можно оттолкнуться. По поводу таблицы admin_profile, то в ней добавились еще три поля: name - имя, access - доступ, role - роль. Как Вы уже, наверно, могли понять, что данные таблицы связаны друг с другом, но об этом чуть позже. И так, давайте рассмотрим структуру, обзор и дамп каждой таблицы в частности.

 

Таблица admin_profile

 

Разработка системы управления сайтом

 

--
-- Структура таблицы `admin_profile`
--

CREATE TABLE IF NOT EXISTS `admin_profile` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `login` varchar(255) NOT NULL,
  `pass` varchar(255) DEFAULT NULL,
  `name` varchar(255) NOT NULL,
  `role` tinyint(1) NOT NULL,
  `access` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

--
-- Дамп данных таблицы `admin_profile`
--

INSERT INTO `admin_profile` (`id`, `login`, `pass`, `name`, `role`, `access`) VALUES
(1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Роман', 3, 1),
(2, 'manager', '1d0258c2440a8d19e716292b231e3190', 'Михаил', 2, 1),
(3, 'users', '9bc65c2abec141778ffaa729489f3e87', 'Александр', 1, 1);

 

 

Таблица admin_access

 

Разработка системы управления сайтом

 

--
-- Структура таблицы `admin_access`
--

CREATE TABLE IF NOT EXISTS `admin_access` (
  `id` tinyint(1) NOT NULL,
  `title` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `admin_access`
--

INSERT INTO `admin_access` (`id`, `title`) VALUES
(1, 'Да'),
(2, 'Нет');

 

Таблица admin_role

 

CMS

 

--
-- Структура таблицы `admin_role`
--

CREATE TABLE IF NOT EXISTS `admin_role` (
  `id` tinyint(1) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

--
-- Дамп данных таблицы `admin_role`
--

INSERT INTO `admin_role` (`id`, `title`) VALUES
(1, 'Пользователь'),
(2, 'Менеджер'),
(3, 'Администратор');

 

 

Второй шаг. HTACCESS.

 

Хотел сразу Вас предупредить, что без глобальной директивы в файле .htaccess не обойтись, поэтому давайте пропишем register_globals включенным. Просто от этой директивы, зависит наш вход в CMS, это конечно не безопасно, но что сделаешь, старый код не позволяет по другому и без нее обойтись не получится... А также не забудем указать кодировку UTF-8.

 

AddDefaultCharset UTF-8
php_flag register_globals on

 

Третий шаг. Все файлы одним шагом.

 

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

 

Up.php и Down.php. Иными словами это шапка и футер сайта. Находятся в папке templates.

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Система управления сайтом | часть 3</title>
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>

<div class='center'>
<br>
<table class='width'>
<tr>
<td valign='top'>

<div class="text">

 

 

</div>

</td>
</tr>
</table>
</div>

</body>
</html>

 

bd.php. Подключение к базе данных MySQL.

 

<?
$db = mysql_connect ("localhost", "root", "");
mysql_select_db ("cms", $db);
mysql_set_charset("UTF8", $db);
mysql_query("SET NAMES 'UTF8'");
if (!$db) echo mysql_error();
?>

 

Index.php. Форма входа и переброс на файл авторизации входа profile.php

 

<?
@session_start();
// Запуск сессии
if(session_is_registered("register"))
{
// Определяем, зарегистрирована ли переменная в сессии
header("Location: profile.php");
break;
// если да, то перенаправляем на файл profile.php
}
include ("bd.php");
// подключаемся к базе данных
include("template/up.php");
?>

<div align="center">
<form name="form" action="profile.php" method="post">
<label>Логин</label><br>
<input class="inputlp" type="text" name="login">
<br><br>
<label>Пароль</label><br>
<input class="inputlp" type="password" name="pass">
<br><br>
<input type="submit" id="submit" class="input_button"
value="Войти">
</form>
</div>

<?
include("template/down.php");
?>

 

Profile.php. 

 

<?
@session_start();
// Запуск сессии
include ("bd.php");
// Подключение к базе данных
include ("functions.php");
// Подключаем функциональный файл

if(isset($login) && isset($pass))
{
$res = profile($login,$pass);
if($res == 1)
{
session_register("register");
}
}
if(session_is_registered("register"))
{
include("template/up.php");
myprofille();
include("template/down.php");
}
else
{
include("error.php");
// Вывод ошибки и переброс на index.php
}
?>

 

Logout.php.  Файл выхода из CMS.

 

<?
session_start();
// Запуск сессии
$old_register = $register;
$res = session_unregister("register");
session_destroy();
// Уничтожение сессии и переброс на файл index.php
header ("Location: index.php");
?>

 

Menu.php.  Навигация для CMS.

 

<table>
<tr>
<td>
<a href='profile.php'>Главная</a> |
<a href='users.php'>Администраторы</a> | 
<a href='logout.php'>Выход</a>
</td>
</tr>
</table>
<br>

 

Error.php. Файл ошибки при авторизации.

 

<?
include("template/up.php");
?>
Вы ввели не правильный логин или пароль!
<a href='index.php'>Назад</a>
<?
include("template/down.php");
?>

 

Users.php. Вывод администратора, менеджеров и пользователей.

 

<?
@session_start();
include ("bd.php");
include ("functions.php");
if(session_is_registered("register"))
{
include("template/up.php");
users();
include("template/down.php");
}
else
{
include("error.php");
// Вывод ошибки и переброс на index.php
}
?>

 

Del_users.php. Файл удаления менеджеров и пользователей.

 

<?
@session_start();
include ("bd.php");
include ("functions.php");
if(session_is_registered("register"))
{
del_user($id);
}
else
{
include("error.php");
// Вывод ошибки и переброс на index.php
}
?>

 

Add_user.php. Форма добавления.

 

<?
@session_start();
include ("bd.php");
include ("functions.php");
if(session_is_registered("register"))
{
include("template/up.php");
add_user();
include("template/down.php");
}
else
{
include("error.php");
// Вывод ошибки и переброс на index.php
}
?>

 

Add_user_insert.php. Обработчик формы добавления.

 

<?
@session_start();
include ("bd.php");
include ("functions.php");
if(session_is_registered("register"))
{
add_user_insert($login, $pass, $pass2, $name, $access, $role);
}
else
{
include("error.php");
// Вывод ошибки и переброс на index.php
}
?>

 

Edit_user.php. Форма редактирования.

 

<?
@session_start();
include ("bd.php");
include ("functions.php");
if(session_is_registered("register"))
{
include("template/up.php");
edit_user($id, $login, $pass, $name, $access, $role);
include("template/down.php");
}
else
{
include("error.php");
// Вывод ошибки и переброс на index.php
}
?>

 

Edit_user_update.php. Обработчик формы редактирования.

 

<?
@session_start();
include ("bd.php");
include ("functions.php");
if(session_is_registered("register"))
{
include("template/up.php");
edit_user_update($id, $login, $pass, $name, $access, $role);
include("template/down.php");
}
else
{
include("error.php");
// Вывод ошибки и переброс на index.php
}
?>

 

Четвертый шаг. Функциональный файл functions.php.

 

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

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

 

<?
//Авторизация
function profile($login,$pass)
{
// Выбираем все поля из таблицы admin_profile где login равно $login и pass равен по md5 $pass
$sql=mysql_query("select * from admin_profile where login='$login' and pass=md5('$pass') and access=1");
@$res=mysql_num_rows($sql);
// Заносим поля идентификатора, ролей и имени в сессию
@$res1=mysql_fetch_array($sql);
$_SESSION['id'] = $res1['id'];
$_SESSION['role'] = $res1['role'];
$_SESSION['name'] = $res1['name'];
return $res;
}

function error_page_admin(){
$PHPSESSID = session_id();
echo"Данная страница доступна только для администраторов
<meta http-equiv=Refresh content='3; URL=index.php?PHPSESSID=$PHPSESSID'>";
}

//Главная страница администратора
function myprofille()
{
// Подключение меню
include("menu.php");
// Выбираем из таблицы admin_role все поля где идентификатор равен зашедщему администратору, менеджеру или пользователю
$sql_role=mysql_query("select * from admin_role where id='".$_SESSION['role']."'");
$res_role=mysql_fetch_array($sql_role);
// Вывод имени
echo"<div class='profile'><span class='span_1'>Ваше имя: </span><span>".$_SESSION['name']." (".$res_role['title'].")</span></div>";
}

// Добавление доступа
function add_access()
{ 
echo"<select class='select' name='access'>";
$adm_access = mysql_query("select * from admin_access order by id asc");
@$access = mysql_fetch_array($adm_access);
do
{
echo"<option value='$access[id]'>$access[title]</option>";
}                                                       
while (@$access=mysql_fetch_array($adm_access));
echo"</select>";
}

// Добавление роли
function add_role()
{ 
echo"<select class='select' name='role'>";
$adm_role = mysql_query("select * from admin_role where id!=3 order by id desc");
@$role = mysql_fetch_array($adm_role);
do
{
echo"<option value='$role[id]'>$role[title]</option>";
}                                                       
while (@$role=mysql_fetch_array($adm_role));
echo"</select>";
}

// Редактирование доступа
function edit_access($res2)
{
$adm_access = mysql_query("select id, title from admin_access");
@$access = mysql_fetch_array($adm_access);
echo"<select class='select' name='access'>";
do 
if ($res2['access'] == $access['id'])
{
echo"<option value='$access[id]' selected>$access[title]</option>";
}
else
{
echo"<option value='$access[id]'>$access[title]</option>";
}
while (@$access = mysql_fetch_array($adm_access));
echo"</select>";
}

// Редактирование роли
function edit_role($res2)
{
$adm_role = mysql_query("select id, title from admin_role where id!=3");
@$role = mysql_fetch_array($adm_role);
echo"<select class='select' name='role'>";
do 
if ($res2['role'] == $role['id'])
{
echo"<option value='$role[id]' selected>$role[title]</option>";
}
else
{
echo"<option value='$role[id]'>$role[title]</option>";
}
while (@$role = mysql_fetch_array($adm_role));
echo"</select>";
}



//Вывод администраторов, менеджеров и пользователей
function users()
{
// Подключение меню
include("menu.php");
?>
<div class='profile'>
<?
// Закрытие доступа для кнопки добавить, кроме администратора
if($_SESSION['role']==3){
?>
<a href='add_user.php'>Добавить нового менеджера/пользователя</a>
<?
}
?>
<br><br>
<table cellspacing='0' cellpadding='0' class='table'>
<thead>
<tr>
<th class='td'>ID</th>
<th class='td'>Логин</th>
<th class='td'>Имя</th>
<th class='td'>Роль</th>
<th class='td'>Доступ</th>
<th class='td'>Удаление</th>
<th class='td'>Редактирование</th>
</tr>
</thead>
<?
{
// Выбираем все поля из таблицы с администраторами, где id равен авторизованному администратору, менеджеру или пользователю
// и выводятся по вышему приоритету роли
$sql = mysql_query("select admin_profile.id, admin_profile.login, admin_profile.name,
(select admin_role.title from admin_role where admin_role.id=admin_profile.role) as role,
(select admin_access.title from admin_access where admin_access.id=admin_profile.access) as access
from admin_profile order by role asc");
@$res = mysql_fetch_array($sql);
do
{
echo"
<tbody>
<tr>
<td class='td2'>".$res['id']."</td>
<td class='td2'>".$res['login']."</td>
<td class='td2'>".$res['name']."</td>
<td class='td2'>".$res['role']."</td>
<td class='td2'>".$res['access']."</td>
<td class='td2'>";
// Создаем условие, при котором удалять может только администратор
if($_SESSION['id']!=$res['id'] and $_SESSION['role']==3){
echo"<a href='del_user.php?id=$res[id]'>Удалить</a>";
}else{echo"Запрещено!";}
echo"</td><td class='td2'>";
// Создаем условие, при котором редактировать все может только администратор, 
// а менеджер и пользователь, только свои данные.
if($_SESSION['id']==$res['id'] or $_SESSION['role']==3){
echo"<a href='edit_user.php?id=$res[id]'>Редактировать</a>";
}else{echo"Запрещено!";}
echo"</td>
</tr>
</tbody>";
}
while (@$res = mysql_fetch_array($sql));
}
echo"<table></div>";
}


//Добавление - файл с формой
function add_user()
{
// Подключение меню
include("menu.php");
// Закрытие доступа для кнопки добавить, кроме администратора
if($_SESSION['role']==3){
?>
<!--Простая форма для добавления нового администратора
с полями логин, пароль и проверка пароля и других. 
Все данные передаются в файл add_user_insert.php, который будет 
осуществлять вставку каждого поля.-->
<form name="form" method="post" action="add_user_insert.php">
<table><tr><td>
<strong>Логин</strong><br>
<input class='inputlp' type="text" name="login">
<br><br>
<strong>Пароль</strong><br>
<input class='inputlp' type="password" name="pass">
<br><br>
<strong>Повторите пароль</strong><br>
<input class='inputlp' type="password" name="pass2">
<br><br>
<strong>Имя</strong><br>
<input class='inputlp' type="text" name="name">
<br><br>
<strong>Доступ</strong><br>
<? add_access(); // Подключаем добавление доступов?>
<br><br>
<strong>Роль</strong><br>
<? add_role(); // Подключаем добавление роли?>
<br><br>
<input class='input_button' type="submit" id="submit"
value="Сохранить"> /
<a href='users.php'>Назад</a>
</td></tr></table>
</form>
<?
}
else
{
// Вывод ошибки и переброс на index.php
error_page_admin();
}
}


//Добавление - файл обработчик
function add_user_insert($login, $pass, $pass2, $name, $access, $role)
{
// Подключаем шапку, нужны были стили
include("template/up.php");
$PHPSESSID = session_id();
// Проверка на глобальные переменные
if (isset($_POST['login'])) {$login= $_POST['login'];}
if (isset($_POST['pass'])) {$pass= $_POST['pass'];}
if (isset($_POST['pass'])) {$pass2= $_POST['pass'];}
if (isset($_POST['name'])) {$name= $_POST['name'];}
if (isset($_POST['access'])) {$access= $_POST['access'];}
if (isset($_POST['role'])) {$role= $_POST['role'];}
// Делаем проверку и обрезку полей
if (!empty($login) && !empty($pass) && !empty($name) && !empty($access) && !empty($role))
{
// Если пароль и повторный пароль совпали, значит переходим к выборке всех полей и заносим их в таблицу с администраторами
if ($pass == $pass2)
{
// Выбираем поле логин из таблицы с администраторами
$sql2 = mysql_query("select login from admin_profile");
// Создаем цикл
for($i=0; $row2=mysql_fetch_array($sql2); $i++)
{
// Переводим буквы в нижний регистр
$login2 = $row2["login"];
$a = strtolower($login2);
$b = strtolower($login);
// Создаем сравнение переменных логина
if ($a == $b) $pr = 1;
}
if (!isset($pr))
{
// Шифруем пароли по md5
$pass = md5($pass);
// Если все правильно заносим, нового администратора в таблицу, если нет выводим ошибочные сообщения
$sql=mysql_query("insert into admin_profile (login,pass,name,access,role) values ('$login','$pass','$name','$access','$role')");
echo"<meta http-equiv=Refresh content='0; URL=users.php?PHPSESSID=$PHPSESSID'>";
// Делаем перезагрузку страницы, на станицу всех администраторов
}
else echo"<p class='error'>Пользователь с данным логином уже существует!</p><br>";
}
else echo"<p class='error'>Пароли не совпадают!</p><br>";
}
else echo"<p class='error'>Необходимо заполнить все поля!</p><br>";
// Подключаем форму добавления
add_user();
}


//Редактирование - файл с формой
function edit_user($id, $login, $pass, $name, $access, $role)
{	
// Подключение меню
include("menu.php");
// Получаем по GET идентификатор администратора, пользователя или менеджера
if (isset ($_GET['id'])) {$id=$_GET['id']; }
if (!isset($id)) {$id==1;}
// Выбираем все поля из таблицы администраторов где id = $id
$sql2 = mysql_query("select * from admin_profile where id='$id'");
$res2 = mysql_fetch_array($sql2); 
?>

<!--Создаем форму со всеми полями. Не забываем про скрытый id и его передачу файлу edit_user_update.php-->
<form name='form' action='edit_user_update.php' method='post'>
<table class='border_form'><tr><td>
<?=$res2["login"]?>
<br><br>
<?
// Создаем условие, при котором, каждый авторизованный администратор, менеджер и пользователь может редактировать 
// только свои поля, а именно  - логин, пароль и имя.
if($_SESSION['id'] == $res2['id']){
?>
<strong>Логин</strong><br>
<input class='inputlp' type='text' name='login' value='<?=$res2["login"]?>'>
<br><br>
<strong>Пароль</strong><br>
<input class='inputlp' type='password' name='pass'>
<br><br>
<strong>Имя</strong><br>
<input class='inputlp' type="text" name="name" value='<?=$res2["name"]?>'>
<br><br>
<?
}
// Создаем условие, при котором, администратор имеет право менять доступы и роли у менеджеров и пользователей, кроме себя.
if($_SESSION['role']==3 and $_SESSION['id'] !=$res2['id']){
?>
<strong>Доступ</strong><br>
<? edit_access($res2); // Подключаем редактирование доступа
?>
<br><br>
<strong>Роль</strong><br>
<? edit_role($res2); // Подключаем редактирование роли
}?>
<br><br>
<input name='id' type='hidden' value='<?=$res2["id"]?>'>
<input class='input_button' type='submit' id='submit'
value='Сохранить'> /
<a href='users.php'>Назад</a>
</td></tr></table>
</form>
<?
}


//Редактирование - файл обработчик
function edit_user_update($id, $login, $pass, $name, $access, $role)
{
// Проверка на глобальные переменные
if (isset($_POST['login'])) {$login= $_POST['login'];}
if (isset($_POST['pass'])) {$pass= $_POST['pass'];}
if (isset($_POST['name'])) {$name= $_POST['name'];}
if (isset($_POST['access'])) {$access= $_POST['access'];}
if (isset($_POST['role'])) {$role= $_POST['role'];}
if (isset($_POST['id'])) {$id  =  $_POST['id'];}
// Делаем проверку и обрезку полей
if (!empty($login) && !empty($pass) && !empty($name))
{
// Заносим сессию страницы в переменную
$PHPSESSID = session_id();
// Шифровка поля в md5
$pass=md5($pass);
// Заносим поля логина, пароля и имени в таблицу с администраторами, где идентификатор равен идентификатору
$sql = mysql_query("update admin_profile set login='$login', pass='$pass', name='$name' WHERE id='$id'");
// Делаем перезагрузку страницы, на станицу всех администраторов
echo"<meta http-equiv=Refresh content='0; URL=users.php?PHPSESSID=$PHPSESSID'>";
}
// Делаем проверку и обрезку полей
elseif(!empty($access) && !empty($role))
{
// Заносим сессию страницы в переменную
$PHPSESSID = session_id();
// Заносим поля доступа и роли в таблицу с администраторами, где идентификатор равен идентификатору
$sql = mysql_query("update admin_profile set access='$access', role='$role' WHERE id='$id'");
// Делаем перезагрузку страницы, на станицу всех администраторов
echo"<meta http-equiv=Refresh content='0; URL=users.php?PHPSESSID=$PHPSESSID'>";
}
else echo"<p class='error'>Необходимо заполнить все поля!</p><br>";
edit_user($id, $login, $pass, $name, $access, $role);
}


//Удаление - файл обработчик
function del_user($id)
{
// Создаем условие, при котором администратор может удалять все менеджеров и пользователей, кроме себя.
if($_SESSION['role']==3){
$PHPSESSID = session_id();
// Получаем по GET идентификатор пользователя или менеджера
if (isset ($_GET['id'])) {$id=$_GET['id']; }
if (!isset($id)) {$id==1;}
// Удаляем менеджера или пользователя с выбранным идентификатором
$sql = mysql_query("delete from admin_profile where id='$id'");
// Делаем перезагрузку страницы, на станицу всех администраторов
echo"<meta http-equiv=Refresh content='0; URL=users.php?PHPSESSID=$PHPSESSID'>";
}
else
{
// Вывод ошибки и переброс на index.php
error_page_admin();
}
}
?>

 

Пятый шаг. Стили CSS.

 

Ну и к оформлению, добавим немного стилей, которые придадут какое то хоть оформление.

 

*, html, body
{
margin:0 auto;
padding:0;
}

.width
{
width: 700px;
margin:0 auto;
}

.center
{
margin:0 auto;
text-align: center;
}

.onetable
{
background: #6eaaff;
height: 100px;
width: 100%;
}

.text
{
padding: 10px;
width: 400px;
}

.input_button
{
border: none;
background: none;
color: blue;
font-weight: bold;
}

a
{
font-weight: bold;
text-decoration: none;
color: blue;
}

a:hover
{
color: red;
}

.error
{
padding-left:20px;
font-size:15;
color:red;
}

.profile
{
padding-top: 10px;
}

.span_1
{
font-weight: bold;
}

.table
{
border-top: 1px solid blue;
border-right: 1px solid blue;
border-bottom: 1px solid blue;
}

.td
{
border-left: 1px solid blue;
padding: 10px;
background: #1cdcff;
}

.td2
{
border-left: 1px solid blue;
padding: 10px;
}

.inputlp, .select
{
border: 1px solid black;
}

 

В общем, вот такой вот урок получился у нас с вами по разработке системы управления сайтом. Старался специально для Вас, надеюсь понравилось! Пишите свои мысли и комментарии, обсудим все детально! 





Роман Краутер