Концепция игрового сайта

Jackky

Новичок
Концепция игрового сайта

Сейчас начал разрабатывать сайт по игровой тематике. То есть это каталог игр, новости, галерея скриншотов и т.д. В общем все, как на обычных сайтах такой тематики. PHP я изучаю меньше месяца. Научился за это время делать блоги среднего уровня сложности (с полным добавлением контента, разделов через админку, комментариями...). Но кое-каких знаний пока не хватает. Например я ничего не знаю про сессии, регистрацию пользователей (тоесть представляю и наброски у меня кое-какие есть в голове, но этого мало). Я не собираюсь делать навороченный сайт. Хочу сделать максимум юзабилити и полное управление из админки.
Извиняюсь за коряво сформулированную суть. Хотелось бы услышать советы касательно архитектуры сайтов подобного типа и возможно ссылки на хорошие статьи про простую реализацию регистрации пользователей на сайте, оптимизацию админки и т.д.
 

Фанат

oncle terrible
Команда форума
если бы было такое руководство, как ты хочешь, "продвинутое проектирование сайтов за 5 минут", то этого форума давно бы не было - все давно жили бы на багамах.

не надо пытаться прыгнуть выше головы.
делай просто помаленьку.
про сесии и авторизацию есть в интернете.

будут конкретные вопросы - задавай.
 

Jackky

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

В общем-то сама архитектура такого сайта проста: из разных таблиц в БД, циклически, в разных ячейках таблицы на сайте выводятся материалы по дате и/или алфавиту. Пока для меня являются преградой 2 критерия:
1) Организация регистрации пользователей; чтобы комментировать новости/игры/статьи и ставить оценки могли только зарегистрированные пользователи.
2) Второй - это организация закрытого доступа к админке, причем чтобы можно было назначать права на модерацию разделов и добавление материалов. Чтобы не усложнять себе жизнь базу админов и пользователей сайта разделю. Хочу реализовать это так: если в поле БД админов стоит 1 напротив, скажем news_add, то данный модератор может добавлять/редактировать/удалять материалы где поле автора совпадает с его ником. И еще: какой способ защиты админки самый простой и надежный? Пока изучал php, пользовался данным скриптом, внедряемым в начало каждой страницы:
PHP:
<?php
include("blocks/bd.php");
if (!isset($_SERVER['PHP_AUTH_USER']))

{
        Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
        Header ("HTTP/1.0 401 Unauthorized");
        exit();
}

else {
        if (!get_magic_quotes_gpc()) {
                $_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
                $_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
        }

        $query = "SELECT pass FROM userlist WHERE user='".$_SERVER['PHP_AUTH_USER']."'";
        $lst = @mysql_query($query);

        if (!$lst)
        {
            Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
        Header ("HTTP/1.0 401 Unauthorized");
        exit();
        }

        if (mysql_num_rows($lst) == 0)
        {
           Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
           Header ("HTTP/1.0 401 Unauthorized");
           exit();
        }

        $pass =  @mysql_fetch_array($lst);
        if ($_SERVER['PHP_AUTH_PW']!= $pass['pass'])
        {
            Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
           Header ("HTTP/1.0 401 Unauthorized");
           exit();
        }


}




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

-~{}~ 30.09.08 23:31:

*чуть не забыл
Единственный выпендреж, который не является жизненной необходимостью, но который я тоже очень хотел бы добавить к общей картине сайта - это ЧПУ и AJAX для добавления комментариев и оценок.
 

Фанат

oncle terrible
Команда форума
1) Организация регистрации пользователей; чтобы комментировать новости/игры/статьи и ставить оценки могли только зарегистрированные пользователи.
Чем регистрация отличается от любой другой операции? Та же сама я форма и та же сама запись в базу. Почему добавить запись в блог для тебя не проблема, а в таблицу юзеров - неразрешимая задача?
2) Второй - это организация закрытого доступа к админке, причем чтобы можно было назначать права на модерацию разделов
Почитай в интернете по словам PHP ACL
Ноя бы на твоем месте не занимался пока этим, сделав одного модератора, он же админ. Задача по объему сравнима со всем остальным сайтов вместе взятым.
пользовался данным скриптом
главная задача программирования - избавляться отповторяющихся команд. а у тебя одна и та же кучка команд повторяется аж 5 раз.
причем две из них ну совсем уж лишние - их можно просто убрать. а остальные как-то покомпактнее оформить

-~{}~ 30.09.08 23:39:

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

-~{}~ 30.09.08 23:41:

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

Jackky

Новичок
Чем регистрация отличается от любой другой операции? Та же сама я форма и та же сама запись в базу. Почему добавить запись в блог для тебя не проблема, а в таблицу юзеров - неразрешимая задача?
Нет. Не само добавление юзеров в базу, а конкретно несколько аспектов:
- код проверки при регистрации (но тут думаю и сам разберусь, когда прочитаю статьи по рисованию картинок на php);
- код подтверждения на e-mail (была идея по реализации данной функции: в БД в таблице с пользователями создается 2 доболнительных поля: ver_code со значением сгенерированного кода и поле verification со значениеми 1 или 0. Соответсвенно если 0 пишется "Вы не подтвердили регистрацию" иначе "Добро пожаловать". Верно ли такое решение? Или есть способ легче?);
А здесь сайта еще нет, но уже в планах куча народу и недостаток времени.
Да, ты абсолютно прав. Я планирую в дальнейшем решать только организационные вопросы, а остальное предоставить людям более умным чем я. И на сайт возлагаю большие надежды, так как у меня есть некая идея(которую я по понятным причинам держу в секрете) и много задумок по реализации "фишек", которые наверняка привлекут различных людей.
 

fixxxer

К.О.
Партнер клуба
в языках программирования есть очень важная конструкция, называется "функция".
используй ее по назначению ;)

в целом, ты мыслишь правильно, но видно что опыта нет. а опыт приобретается только одним способом, ты короче понял ;)
 

Jackky

Новичок
Кстати, придумал антимат-антиспам фильтр (хотя скорее всего его уже придумали до меня), который действует следущим образом:
При отправке комментария пользователем, текст комментария прогоняется через этот фильтр, который сравнивает слова и буквосочетания со списком запрещенных. Если не находит, то все нормально и комментарий добавляется. Если находит, то тоже, НО он помечает в БД это сообщение, как потенциально содержащие спам или нецензурную лексику. Такие сообщения выводятся в админке и модераторы уже проверяют: действительно ли мат или юзер просто написал слово "ХУтор" или действительно ли спам, а не ссылка на ютубовский ролик. Если в тексте действительно присутствует мат/спам, то пользователю ставиться бан и он вместо поля добавления он видит "Вам запрещено добавлять комментарии по причине ХХХ. Окончание срока запрета ХХ-ХХ-ХХХХ.".
Также существует список разрешенных слов. Чтобы программа не отсортировывала тысячи раз одни и те же безобидные слова. Например в комментарии присутствует все тот же "ХУтор". Программа выделяет буквосочетание "ХУ" и смотрит, что идет за ним. Если за ним идут какие-то неизвестные программе буквы, то она отправляет комментарий на рассмотрение модераторам. Иначе, если слово "хутор" заранее добавлено в белый список и программа видит, что потенциально плохое слово в сообщении = слову в белом списке, а других потенциально плохих слов в тексте нет, то комментарий добавляется в БД без всяких сообщений в админке.
Так же можно сделать список, в котором будут присутствовать слова(в основном ссылки) при которых комментарий не будет добавляться вообще, но это в крайних случаях для особо активных спамеров.

Есть ли подобный скрипт? Я вряд ли когда нибудь его собирусь писать и тем более вряд ли напишу. Так что это только идея.
 

fixxxer

К.О.
Партнер клуба
идея с флагом "подозрительности" правильная.

запрещать же не стоит, ибо как только запретишь, начнут выдумывать способы, как это обойти (а поскольку сразу видно, сработало или нет, то задача крайне простая).

а делается это очень просто - посмотри документацию по строковым функциям.
 

kabachok

Новичок
Автор оригинала: Jackky
- код подтверждения на e-mail (была идея по реализации данной функции: в БД в таблице с пользователями создается 2 доболнительных поля: ver_code со значением сгенерированного кода и поле verification со значениеми 1 или 0. Соответсвенно если 0 пишется "Вы не подтвердили регистрацию" иначе "Добро пожаловать". Верно ли такое решение? Или есть способ легче?);
Можно съэкономить место и сделать поле, по умолчанию NULL, при реге вписавать в него контрольную строку, и соответственно если поле не NULL то хапрашивать подтверждение.

-~{}~ 01.10.08 00:40:

этим мы избавляемся от поля "verification"
 

Jackky

Новичок
Автор оригинала: fixxxer
в целом, ты мыслишь правильно, но видно что опыта нет. а опыт приобретается только одним способом, ты короче понял ;)
Спасибо. :) Я и не собираюсь в жизни становиться профессиональным Web разработчиком (хотя кто знает наперед). В данный момент мне нужны знания только для создания данного проекта. А нулленую CMS типа DataLifeEngine использовать категорически не хочу, хотя именно так советует поступить друг, потому что считаю, что: а) при использовании CMS выше головы не прыгнешь и ничего сверхнового к сайту не прикрутишь в дальнейшем и б) проект, сделанный вручную, сразу же выделяет его перед другими DLE-подобными и дает +100 очков форы вперед. Поэтому я и занялся изучением PHP. Тем более по моим прикидкам в реализации такого сайта сложных моментов не так много, так что я уверен, что справлюсь.

-~{}~ 01.10.08 00:50:

Автор оригинала: fixxxer
идея с флагом "подозрительности" правильная.

запрещать же не стоит, ибо как только запретишь, начнут выдумывать способы, как это обойти (а поскольку сразу видно, сработало или нет, то задача крайне простая).

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

-~{}~ 01.10.08 00:51:

Автор оригинала: kabachok
Можно съэкономить место и сделать поле, по умолчанию NULL, при реге вписавать в него контрольную строку, и соответственно если поле не NULL то хапрашивать подтверждение.

-~{}~ 01.10.08 00:40:

этим мы избавляемся от поля "verification"
спасибо, запомню, ибо про атрибуты NULL и NOT NULL я пока ничего не знаю.

-~{}~ 01.10.08 00:56:

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

HaZ

Новичок
шифрование ?
md5($text)

стоп. надо уточнить устарело или нет)
 

HaZ

Новичок
Gas
Угу. А еще советуют прогонят 2 раза через эту функцию _)

Jackky
Создай поле в таблице юзеров и храни там хеш пароля (т.е. текст пароля прогнанный через функцию md5() )
и при авторизации хешируй введенный пароль и сравнивай с хешем из БД

А можешь всего этого не делать, а поискать мануалы - и смотри чтоб были как минимум 2008 года выпуска
 

Jackky

Новичок
шифрование ?
md5($text)
То есть при регистрации пользователь указывает пароль (например 12345), и данный пароль добавляется в БД, предварительно
PHP:
$pass = md5($pass);
? Так просто? И расшифровать невозможно? А как тогда сравнивать пароль при входе пользователя на сайт? Тоже надо будет сделать условие:
PHP:
$entered_pass = md5($entered_pass);
if ($entered_pass == $myrow['pass'])
{
 echo "Добро пожаловать!";
}
else
{
 echo "Вы ввели неверный пароль.";
}
правильно?

Тогда следущий вопрос: как организовать восстановление пароля по почте?
 

HaZ

Новичок
Да именно так. По крайней мере этот метод отлично работает - чтобы вам в дальнейшем там не плели.

Востановить пароль просто. Сгененируйте новый, вышлите его на почту, а хеш старого замените в БД на хеш нового.

Ну или придумайте алгоритм востановления текста из хеша)
 

Фанат

oncle terrible
Команда форума
Я и не собираюсь в жизни становиться профессиональным Web разработчиком
Дело в том, что я не фотограф и становиться им не собираюсь
хехе, музыкой навеяло =)

-~{}~ 01.10.08 01:28:

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

HraKK

Мудак
Команда форума
Gas
Не работает, агу
Там нет алгоритма тупой перебор. для 90% паролей отличных от qwerty не работает.
 

Jackky

Новичок
:D собственно так оно и есть;)
непонятно, при чем здесь ящик.
Ну смотри: если бы, допустим, в БД не было бы e-mail адреса, а только логин, пароль и служебные данные, то зная только пароль и логин потенциальный взломщик ровным счетом ничего не получает - поди найди где этот же пользователь зарегистрировался, да еще и с этим же паролем. А если он знает адрес ящика и пароль от ящика совпадает с паролем с сайта, то он может получить пароли ко всем сайтам, зарегистрированным на этот ящик. В 80% случаев ему даже не придется узнавать, где зарегистрирован юзер: достаточно будет просто посмотреть входящие письма и найти среди них заголовки типа "Подтверждение регистрации с сайта www.site.com" в которых обычно присутствует информация примерно такого содержания: "Вы зарегистрировались на сайте ..... Ваш логин: ХХХХ Ваш пароль: УУУУ".
попробовал несколько вариантов. Пишет "хэш не найден". Так что тревога отменяется. То есть, как я понял хэши md5() еще никому расшифровать не удалось..
 
Сверху