Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Инструкция программиста.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
134.02 Кб
Скачать

Инструкция программиста

Сайт (от англ. site)— совокупность электронных документов (файлов) частного лица или организации в компьютерной сети, объединённых под одним адресом (доменным именем или IP-адресом).

Наш сайт располагается в каталоге datchka.ru на сервере.

Дерево файлов и папок (Краткое описание):

Папки

Файлы

Описание

domain

Index.php

Основной файл, в котором обрабатывается созданные магазины. Вызывается по маске ДОМЕН_МАГАЗИНА. datchka.ru

edit

cats.php

Вывод, редактирование категорий

logo.php

Вывод, редактирование логотипа

main.php

Изменение основной информации

goods.php

Добавление, редактирование, удаление товаров

styles.php

Управление стилями магазина

images

jpg/png/etc

Изображения товаров

kcaptcha

Index.php

Основной файл вывода капчи, обработка сессии

kcaptcha.php

Основной класс генерации изображений

kcaptcha_config.php

Конфигурационный файл

logo

jpg/png/etc

Файлы логотипов

template

default

index.php

Файл обработки шаблона

images

jpg/png/etc

Статичные изображения, используемые в шаблоне

add.php

Добавление нового магазина

auth.php

Авторизация зарегистрированных пользователей

default.css

Стили

goods_element.php

Функция вывода товаров

index.php

Основной файл шаблона, отвечающий за корректный вывод информации

license.txt

Лицензия шаблона

resize.php

Функция изменения изображений

shop_edit.php

Редактирование магазина

shop_list.php

Список магазинов

SimpleImage.php

Класс изменения изображений

.htaccess

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

Index.php

Основной файл, который подключает конфигурационный файл config.php.

В index.php описана работа главной

страницы сайта

config.php

Конфигурационный файл, содержащий необходимые настройки, для функционирования сайта

Полное описание файлов

config.php:

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

Переменные:

Тип

Переменная

Описание

Глобальные

murl

Адрес сайта с протоколом

qurl

Основной домен

Локальные

$murl

Аналог глобальной

$qurl

Аналог глобальной

$top_button

Кнопки меню, формат ссылка

$link

Соединение с базой

Функции:

Имя

Параметры

Описание

check_Access

Функция вызывается без входных параметров, но использует данные полученные через COOKIE запрос из браузер пользователя

Получает идентификатор 'uid' и пароль 'hash' в зашифрованном виде из COOKIE браузера. Проверяет есть у нас пользователь с таким идентификатором

shop_owner

Функция вызывается без входных параметров, но использует данные полученные через GET запрос из адресной строки

Имея данные функции check_Access, получаем идентификатор магазина и проверяем есть ли у пользователя доступ к этому магазину

LeftRight

$records – количество записей

$r_start – начальная точка вывода

$URL – адрес страницы

$inpage – текущая страница

$posfix – постфикс, подставляемый после адреса и дополняемый порядковым номером страницы

Функция постраничного вывода

index.php:

index.php - это тот файл, к которому идет обращение пользователя, при входе на сайт. Дальше, выводя возможные варианты, пользователь выбирает куда перейти. Работает это так:

Пытаемся получить данные GET-запросом:

$a = isset($_GET['a']) ? strip_tags($_GET['a']) : "index";

Если значение есть у переменной $a, идем в кейсы соответствующие значению переменной:

Кейс error: обработка ошибки, в случае некорректного значения переменной.

case "error":

header("HTTP/1.0 404 Not Found");

$content = "<b>Нет такой страницы.</b>";

break;

Кейс index: основной кейс, сюда мы попадаем, если не получили значение переменной. Просто выводим приветствие и описание

case "index":

$content = "Создвайте собственные интернет-магазины в несколько кликов!<br> Начните свой бизнес с нажатия на кнопку \"Создать\" или посмотрите примеры.<br> Если вы уже зарегистрированы войдите, используя вашу почту и пароль, для редактирования вашего магазина";

break;

Кейс add: кейс, вызывает, если значение переменной add. В кейсе происходит вызов файла для добавления данных add.php, в котором содержится форма для ввода данных.

В самом кейсе идет прием данных , с помощью POST-запроса и обработка их.

Из формы мы получаем такие данные, как: название магазина, почта, пароль, адрес и код капчи.

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

Получаем и проверяем ее

if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring'])

Если все ок, начинаем проверять введенные данные.

Для начала, на пустоту. Вообще в полях используется параметр required, но он срабатывает не во всех браузерах, поэтому дополнительная проверка не помешает, если мы не хотим пустышек.

if(!empty($_POST['mag_title']) && !empty($_POST['mag_address']) && !empty($_POST['usr_pswd']))

Если все поля заполнены, проверим, корректно ли они заполнены и не хотят ли нас взломать.

Проверка корректности адреса почты и выведем ошибку, в случае некорректного заполнения.

if(!preg_match("|^[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}$|i", $_POST['usr_mail']))

{

$content = $_POST['usr_mail']. " - Не правильный email";

break;

}

Проверим также остальные поля и запишем в соответствующие переменные проверенные значения.

$usr_mail = $_POST['usr_mail'];

$mag_title=mysql_real_escape_string(strip_tags($_POST["mag_title"]);

$mag_address=mysql_real_escape_string(strip_tags($_POST["mag_address"]));

Пароль введенный пользователем, мы обрабаываем спомощью специальной функции crypt() языка PHP, crypt() возвращает хэшированную строку, полученную с помощью стандартного алгоритма UNIX, основанного на DES, или другого алгоритма, имеющегося в системе, но одно хеша недостаточно. Поэтому примешиваем к нему так называемую «соль», в моем случае это «miit_upo». Некоторые операционные системы поддерживают несколько алгоритмов хэширования. Иногда стандартный алгоритм, основанный на DES, заменяется алгоритмом на основе MD5. Вид хэширования определяется переданным аргументом salt (соль). До версии PHP 5.3, PHP определял доступные алгоритмы шифрования во время инсталляции, базируясь на системной функции crypt(). Если соль не указана, будет автоматически сгенерирована стандартная случайная двухсимвольная (DES) либо двенадцатисимвольная (MD5) соль, в зависимости от доступности алгоритма MD5 в crypt(). Предопределенная константа CRYPT_SALT_LENGTH позволяет определить максимально доступную длину соли в соответствии с используемыми алгоритмами.

$usr_pswd = crypt($_POST["usr_pswd"], "miit_upo");

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

if(mysql_num_rows(mysql_query("SELECT * FROM `shop` WHERE `shop_domain` = '$mag_address'"))>0)

{

$header = "Такой домен уже занят!";

break;

}

если такой домен свободен, сформируем запрос в таблицу пользователей.

$query = "INSERT INTO `users` (`id`,

`email`,

`password`)

VALUE

('0',

'$usr_mail',

'$usr_pswd')";

Если запрос не прошел, выведем ошибку

if(!mysql_query($query))

{

$content = "Ошибка при добавлении пользователя mysql_query";

break;

}

Получив идентификатор пользователя

$user_id = mysql_insert_id();

сформируем запрос в таблицу магазинов, на добавление.

$query = "INSERT INTO `shop` (`id`,

`shop_domain`,

`shop_name`,

`shop_info`)

VALUE

('0', '$mag_address',

'$mag_title',

'Новый магазин')";

Если запрос не прошел, выведем ошибку

if(!mysql_query($query))

{

$header = "Ошибка добавления магазина";

}

Если все прошло успешно, получим идентификатор только что созданного магазина

$shop_id = mysql_insert_id();

Далее создадим связь ПОЛЬЗОВАТЕЛЬ – МАГАЗИН, в таблице connect

mysql_query("INSERT INTO `connect` (`id`, `user_id`, `shop_id`) VALUE ('0', '$user_id', '$shop_id')");

Пользователь и магазин созданы и привязаны друг к другу

Выдадим пользователю куки, функцией setcookie, которая описана ниже.

setcookie("uid", $user_id, time()+3600*24*365,"/", "*.".qurl);

setcookie("hash", hash($usr_pswd), time()+3600*24*365,"/", "*.".qurl);

и отправим в личный кабинет, функицей header() и die()

header("Location: ".murl."/admin/");

die("Location: ".murl."/admin/");

setcookie() задает cookie, которое будет передано клиенту вместе с другими HTTP заголовками. Как и любой другой заголовок, cookie должны передаваться до того как будут выведены какие-либо другие данные скрипта (это ограничение протокола). Это значит, что в скрипте вызовы этой функции должны располагаться прежде остального вывода, включая вывод тэгов <html> и <head>, а также пустые строки и пробелы.

После передачи клиенту cookie станут доступны через массивы $_COOKIE и $HTTP_COOKIE_VARS при следующей загрузке страницы. Следует иметь в виду, что суперглобальные переменные, такие как $_COOKIE, стали доступны только в PHP 4.1.0. Значения cookie также есть в $_REQUEST.

Функция header —Отправляет необработанные HTTP-заголовки.

Далее сбросим капчу

unset($_SESSION['captcha_keystring']);

кейс admin: кейс вывода личного кабинет, но по сути, он лишь вызывает список магазинов пользователя, который формируется в файле shop_list.php.

Если ввести вручную путь к личному кабинету, но при это не имея прав на этот магазин, обнуляются куки

setcookie("uid", "", time()-3600*24*365,"/", "*.".qurl);

setcookie("hash", "", time()-3600*24*365,"/", "*.".qurl);

переносят вошедшего на главную страницу

header("Location:".murl);

die("Location:".murl);

кейс auth: кейс авторизации зарегистрированных пользователей. Проверим, есть у пользователя куки и есть ли у нас пользователь с такими куками, функцией checkAccess(), описанной в config.php. Если есть, не просим вводить почту и пароль, сразу перебрасываем в личный кабинет

if(checkAccess())

{

header("Location:".murl."/admin");

die("Location:".murl."/admin");

}

Если нет, выводим форму авторизации auth.php. После ввода данных пользователем(почта и пароль), проверим их

$usr_mail = $_POST['usr_mail'];

$usr_pswd = crypt(strip_tags($_POST["usr_pswd"]), "miit_upo");

Сформируем запрос в базу, есть ли у нас такой пользователь

$query = mysql_query("SElECT * FROM `users` WHERE `email` = '$usr_mail' AND `password` = '$usr_pswd'");

Если есть, выдадим ему куки

setcookie("uid", $user_id, time()+3600*24*365, "/", ".".qurl); setcookie("hash", $usr_pswd, time()+3600*24*365, "/", ".".qurl);

и отправим в личный кабинет

header("Location:".murl."/admin");

die("Location:".murl."/admin");

Если не нашли, выдадим ошибку

$content = "Ошибка авторизации";