27
Окт

Пишем скрипт Каталог товаров на Php и MySql, Часть #2

Вторая статья из цикла "Пишем скрипт Каталог товаров" - "Создание первичных необходимых файлов".

Создадим Базу данных под названием catalogue.
В ней создадим первую таблицу, в которой будут хранится логин и пароль для доступа к нашей Админ-части.
CREATE TABLE 'admin' (
  'login' varchar(16) NOT NULL default '',
  'password' varchar(32) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

INSERT INTO 'admin' VALUES ('admin', '21232f297a57a5a743894a0e4a801fc3');
 
Теперь у нас есть логин и пароль - admin. Потом эти данные можно будет изменить.

Приступим к созданиям файлов.
Первым, мы создаем файл mysql.php, который будет отвечать за соединение нашего скрипта с БД. Вот его содержимое:
<?
$host="localhost";        #Хост
$login_mysql="root";      #Логин
$password_mysql="";       #Пароль
$baza_name="catalogue";   #Имя базы
$db = @mysql_connect("$host", "$login_mysql", "$password_mysql");
if (!$db) exit("<p>К сожалению, не доступен сервер MySQL</p>");
if (!@mysql_select_db($baza_name,$db)) exit("<p>К сожалению, не доступна база данных</p>");      
?> 


Примечание: если Вы тестируете данный скрипт на Денвере (Джентельментский набор Веб-разработчика), то в данном файле не нужно менять значения переменных. В противном случае, вы должны придать переменным значения, которые соответствуют вашему серверу (узнать значения переменных для коннекта к БД Вы можете у своего хостера).

Создаем файл config.php, в котором будут хранится настройки нашего каталога.
<?
$user_title = "Каталог материалов"; //Главный заголовок
$user_keywords = "Каталог материалов"; //Ключевые слова
$user_description = "Каталог материалов";// Oписание
$admin_login_form = "<form method=post>
<input class=admin_form name=login value=\"Логин\"><br />
<input class=admin_form name=password value=\"Пароль\"><br />
<input class=admin_form type=submit value=\"Попробовать войти...\">
</form>";
?> 


Создаем файл func.php, в котором будут хранится различные функции, с содержимым:
<?
function PluralForm($n, $form1, $form2, $form5)
{
    $n = abs($n) % 100;
    $n1 = $n % 10;
    if ($n > 10 && $n < 20) return $form5;
    if ($n1 > 1 && $n1 < 5) return $form2;
    if ($n1 == 1) return $form1;
    return $form5;
}
?> 
 
Пока этот файл будет содержать одну функцию. Я взял её на форуме поддержки проекта Денвера, и отвечает она за "человеческое" склонение слов, стоящих после чисел (1 товар, 2 товара, 5 товаров, а не 1 товар, 2 товар, 5 товар).

Создаем файл error.php, который будет переводить пользователя на главную страницу, в случае ошибочных запросов:
<?
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='1; URL=http://".$_SERVER['HTTP_HOST']."/'></HEAD></HTML>";
?>
<html><head><title>.404</title>
<style type="text/css"><!--
.style1 {font-size: 100px;font-weight: bold;}
--></style>
</head><body><br><br><br><br><br><br><br><br><br><br><br><br>
<center><span class="style1"><font color="#009900">.404</font></span></center></body></html>
 
Создаём файл .htaccess, отвечающий за ЧПУ и за другие полезные мелочи:
### переадресация в случае ошибочных запросов ### 
ErrorDocument 401 http://cat.ru/error.php 
ErrorDocument 403 http://cat.ru/error.php 
ErrorDocument 404 http://cat.ru/error.php 
ErrorDocument 500 http://cat.ru/error.php 

RewriteEngine on 
RewriteBase / 

### это адрес нашего Бэк_офиса ### 
RewriteRule ^administrator/?$ sadmin.php 

### это от злоумышленников ### 
RewriteRule ^admin/([A-Za-z]+).php$ /error.php 
RewriteRule ^design/([A-Za-z]+).php$ /error.php 

### Выход из Бэк_офиса ### 
RewriteRule ^admin/logout/?$ sadmin.php?action=logout 

### профиль администратора ### 
RewriteRule ^admin/profile/?$ sadmin.php?action=profile 
RewriteRule ^admin/profile/edit/?$ sadmin.php?action=profile&op=edit
 
Примечание: Я назвал сайт cat.ru. Поэтому в первых 5 строчках файла .htaccess у меня прописан адрес моего сайта: http://cat.ru/error.php. Вам же следует прописать в этих строчках адрес своего сайта.

Теперь тут же, в корне нашего сайта создадим файл sadmin.php. Данный файл будет отвечать за авторизацию администратора и будет главным звеном в нашем Бэк_офисе.
Содержание файла sadmin.php:
<?
session_start(); // стартуем сессию
include("mysql.php");// подключаем файл с настройками для коннекта к БД
include("config.php"); // подключаем настройки скрипта
include("func.php"); // подключаем функции скрипта

### Блок обработки выхода из Бэк_Офиса ###
if(@$_GET['action'] == "logout") // если в адресной строке переменная action равна "logout"
{                                            
    if(isset($_SESSION['login']) && isset($_SESSION['password'])) // если существуют сессионные переменные login и password
    {
        session_unregister("login"); // удаляем
        session_unregister("password"); // удаляем
        unset ($_SESSION['login'],$_SESSION['password']);// удаляем
        session_destroy();// убиваем сессию
    }
}
### Конец блока обработки выхода из Бэк_Офиса ###

### Блок обработки данных, пришедших из формы авторизации ###
// если в форму авторизации были занесены логин и пароль
// И если сессионные переменные НЕзарегистрированы
if(isset($_POST['login']) && isset($_POST['password']) 
&& !isset($_SESSION['login']) && !isset($_SESSION['password']))
{
    // Ищем в бд строку, сравнивая имеющиеся даннные, с полученными из формы
    $admins = mysql_query("
    SELECT * FROM admin 
    WHERE login = '". $_POST['login']."' 
    AND password = '". md5($_POST['password'])."'");     
    // если найдена хоть одна строка
    if(mysql_numrows($admins)) 
    {
        // регистрируем сессионные переменные
        $login = $_POST['login'];
        $password = $_POST['password'];
        session_register("login");
        session_register("password");
    }
    // Иначе очень сильно ругаемся, и снова выводим форму авторизации
    else echo "<center>Администратора с данными параметрами входа не существует!<br><br>
    </center>$admin_login_form";
}
// Иначе без ругани, просто выводим форму авторизации
else if(!isset($_SESSION['login']) && !isset($_SESSION['password'])) echo $admin_login_form;
### Конец блока обработки данных, пришедших из формы авторизации ###

### Блок управления каталогом ###
// Если есть сессионные переменные
if(isset($_SESSION['login']) && isset($_SESSION['password']))
{
        // Ищем в бд строку, сравнивая имеющиеся даннные, с сессионыыми переменными
        $admins = mysql_query ("
        SELECT * FROM admin 
        WHERE login = '".$_SESSION['login']."' 
        AND password = '".md5($_SESSION['password'])."'
        ");
    if(mysql_numrows($admins)) // если найдена хоть одна строка
    {
        // выводим ссылки для управления сайтом
        echo "<table width=100% cellpadding=5 cellspacing=5 border=0><tr>";
        echo "<td><a href=\"http://".$_SERVER['HTTP_HOST']."/administrator/\">На главную страницу Админ раздела</a></td>";
        echo "<td><a href=\"http://".$_SERVER['HTTP_HOST']."/admin/logout/\">Выйти</a></td>";
        echo "</tr></table>";
        
        // если переменная action существует, и в ней что то есть, то подключаем необходимые файлы
        if(isset($_GET['action']))
        {
            if($_GET['action'] == "cat") include("admin/scat.php");
            if($_GET['action'] == "profile") include("admin/sprofile.php");
        }
    }
    // Иначе очень сильно ругаемся, и снова выводим форму авторизации
    else echo "<center>Администратора с данными параметрами входа не существует!<br><br></center>$admin_login_form";
}
### Конец блока управления каталогом ###
?> 
 
И последний на сегодня создаваемый нами файл будет пустой index.html, являющийся "заглушкой" директории нашего сайта.

Теперь, зайдя на страницу http://cat.ru/administrator/ и введя в поля формы авторизации admin | admin мы попадем в наш Бэк_Офис. Пока в нём ничего нет, но в следующей статье мы научим наш скрипт работать с категориями товаров - добавлять, удалять и редактировать.

Кстати код, который получится в итоге этого цикла статей лёг в основу скрипта JOKER_vitrina 1.0 FREE, описание которого и ссылки для скачивания Вы найдете на странице http://allpublication.ru/blog/p15-novyy_besplatnyy_PHP_skript_katalog_tovarov_JOKER_vitrina_1_0_FREE.html
 

Комментарии

Rss-лента комментариев к этому посту
 
Для комфортного доступа к этому сайту, в вашем браузере должен быть включен JavaScript