Скрипт фотогалереи, версия 0.11

Saturday, 27 February 2010 | Автор: programmer
Очередное обновление скрипта фотогалереи, в которое вошло обновление ранее написанного модуля "менеджер пользователей". В предыдущей версии этот модуль был написан через использование HTTP-аутентификации с помощью файлов апача .htaccess .htpasswd. Вот именно в этом и была загвоздка. Проверял на debian и linux, всё работало нормально, а вот с виндой получалась проблема, что пароли сформированные из админки не воспринимались apache. В новой версии решил отказаться от такого метода аутентификации, хотя можете ее оставить, чтобы была двойная аутентификация администратора, и сделал хранение логинов и паролей администраторов через базу данных.

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

Для хранения данных пользователей будем использовать новую созданную таблицу tbl_users:

CREATE TABLE `tbl_users` (
  `id` int(11) NOT NULL auto_increment,
  `login` char(30) NOT NULL,
  `pass` char(32) NOT NULL,
  UNIQUE KEY `id` (`id`),
  KEY `login` (`login`)
) ENGINE=MyISAM;


Получается, что хранить мы будем 2 поля: логин и пароль. Логин будет максимум по длине 30 символов, пароль будет 32. Почему именно 32, а не 30 или 40? Просто пароль сохраняется не в открытом виде, а в виде хеш-строки (хэш, hash). Для преобразования строки в хеш мы будем использовать функцию хеширования md5(). Ах да, хеширование работает только в одну сторону, т.е. Вы можете из строки получить хеш, но из хеша изначальную строку получить невозможно.

string md5 (string $str [, bool $raw_output = false])

На вход подается строка, на выходе получаете хеш, который представляет собой 32-х значное шестнадцатеричное число. Если передавать $raw_output равное true, то получите 16 символьную бинарную строку. Нам нужно именно 32-х значное шестнадцатеричное число, т.е. это будет 32 символьная строка.

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

С паролем вроде бы разобрались, теперь рассмотрим схему аутентификации в админку:
<?php
    session_register("ADMIN");

    if (!isset($_SESSION['ADMIN']['auth'])) {    
        $auth = false;
        if (isset($_POST['authLogin']) and isset($_POST['authPass'])) {
            $db->sql_query("select count(*) as total from tbl_users where login='".addslashes($_POST['authLogin'])."' and pass='".md5(md5($_POST['authPass']))."'");
            $temp = $db->sql_fetchrow();    
            if ($temp['total'] > 0) {
                $_SESSION['ADMIN']['auth'] = true;
                $auth = true;
            }
            else {
                $err = "Пользователь не найден";
            }
        }

        if ($auth == false) {
            echo viewTemplate::headerLogin((isset($err)? $err: ""));
            echo viewTemplate::footer();
            exit;
        }
    }
?>


session_register объявляет сессионную переменную ADMIN. Если пользователь авторизован, то должна существовать сессионная переменная $ADMIN['auth'], если же ее нет, то значит выводим форму аутентифкации пользователя. Если в форме нажимаем на кнопку авторизации, то мы получаем две элемента суперглобального массива $_POST: authLogin и authPass. Строим запрос к базе данных, где пытаемся найти пользователя с такой связкой логина и пароля, если находим, то проставляем, что пользователь авторизирован, если же нет, то выдаем соответствующую ошибку.

В меню backend'a добавляем кнопку выхода:
<?php
    session_register("ADMIN");
    session_unregister("ADMIN");
    header("Location: admin.php");
?>


Т.е. мы объявляем, что будем использовать сессионную переменную ADMIN, потом ее удаляем и делаем перенаправление на первую страницу админки.

Пример работы скрипта: http://phpprogs.ru/test/photogallery/

Скачать проект Вы можете по ссылке: [attachment=6]

Обсуждение скрипта: http://phpprogs.ru/forum/


 
Tweet


Категория(и): Изучаем PHP, Скрипты, MySQL

Комментарии


Tuesday, 09 March 2010 | 13:20:09 | Автор: Phoenix
Так-как форум пока не работает, а вопрос созрел, решил задать его здесь. Скрипт использует кодировку Windows-1251. А на сколько сложно перевести его в кодировку utf-8? И у меня предложение сразу. Т.к. кодировка Windows-1251 постепенно отходит, всё больше и больше программисты пишут скрипты и CMS-ки уже в кодировке utf-8, взять за основу эту кодировку для скриптов. Как вы на это смотрите?
Tuesday, 09 March 2010 | 13:35:42 | Автор: programmer
В принципе переделывать не так много. Просто не пользуюсь UTF из-за некоторых глюков при бэкапах через SQLDump. Но, наверное, Вы правы
Thursday, 25 March 2010 | 15:53:11 | Автор: twoserge
Доброго времени суток! Очень заинтересовал Ваш скрип галереи. А где можно его скачать?
Thursday, 25 March 2010 | 15:59:06 | Автор: programmer
Последнюю версию можно скачать тут http://phpprogs.ru/uploads/1267269369_photogallery0.11.zip
Thursday, 25 March 2010 | 16:30:05 | Автор: twoserge
огромное спасибо!
Friday, 09 July 2010 | 12:08:55 | Автор: w1ndw0rk

У меня вот это выдает! Что делать?

http://i064.radikal.ru/1007/7d/fa74332140d8.jpg

Friday, 09 July 2010 | 12:52:48 | Автор: programmer

w1ndw0rk,

права на создание таблиц есть?

Отвечу на вопросы по PHP

Friday, 09 July 2010 | 19:22:36 | Автор: hi
programmer, проверьте скрипт галереи, проверил на денвере и на своем хостинге, скрипт не устанавливается.
Friday, 09 July 2010 | 19:27:14 | Автор: hi
и может использовать вместо imagecopyresized, imagecopyresampled, качество фото получше будет
Monday, 12 July 2010 | 10:00:53 | Автор: programmer

Подправил установку. Скачать можете по этой же ссылке http://phpprogs.ru/uploads/1267269369_photogallery0.11.zip

Отвечу на вопросы по PHP

Saturday, 26 February 2011 | 23:39:05 | Автор: komar1969

ребята выручайте подскажите как правельно установить скрипт фотогалиреи под DLE я на денвере его устанавливаю но мне надо точно знать раскладку как и куда их капирывать файлы из папки install я все эти файлы скопирывал в корень сайта но есть одно но файл index.php заменять нельзя у меня тут же лежит файл index.php движка Выручайте направьте на путь истенный 

Sunday, 27 February 2011 | 21:49:32 | Автор: theone

index.php можно переименовать я думаю

Friday, 08 July 2011 | 23:33:13 | Автор: gollariel

Большое спасибо за галерею. Скрипт грамотно написан, не состовляет труда в нем разобраться.
 

Thursday, 13 December 2012 | 17:32:31 | Автор: professorzz

Хелп что то не могу понять !!!!ошибка в привью
gyazo.com/d66ba8f0d8ddce62dcbdcf4971a7f465

Thursday, 13 December 2012 | 18:37:59 | Автор: professorzz

разобрался !!!

var.php

почемуто не прокатывает
include $_ SERVER ['DOCUMENT _ROOT']."/class/mysql.php";
include $_ SERVER ['DOCUMENT _ROOT']."/class/config.php";

а вот обычный
include "mysql.php";
include "config.php";

заработал !!!

Thursday, 13 December 2012 | 18:38:06 | Автор: professorzz


Тока ждал большего, думаю есть жизнь у проекта если его развивать
мне не хватает функционала вывода на главную страницу галерее именно категорий в форме фоток с аватаркой (1 фоткой из категории)

ну и в админке не сразу виден значек добавить

Добавить комментарий
Чтобы оставить комментарий, Вам необходимо зарегистрироваться или авторизироваться