планируется что зареганый участник (Автор) может создавать разные события(обсуждение книг, кино, чего угодно). и все кто получит от него ссылку на это обсуждение (посредством e-mail, jabber, icq, sms или иным способом) могли туда зайти без всякой регистрации, прочитать чего написал автор, уже оставленные комменты и при желании оставить свой.
самое главное требование): Нужно что бы линк на автоматически генерируемую страницу (вида site.ru/news.php?fiun989jlkjlm) создавался так, что бы его невозможно было угадать-подобрать (допустим зная e-mail автора) или попасть как либо случайно просто поменяв пару символов в другой похожей действующей ссылке.
Это для того что бы Автор !вручную! всегда сам выбирал кому ее отправить на этот раз, защита от спама в комментах (т.к. посетители не зареганы и капчи не будет вообще), что бы поисковики не индексировали инфу (в .htaccess конечно будет стоять им запрет но хз)
авторизация Автора по e-mail, хранение темы сообщения и самих комментов планируется в в БД (но если будут аргументы за хранение в файлах я буду рад услышать их)
сам пока мыслю так, две таблицы. TOPIC и COMMENT
| id | avtor | id_topic | topic |
| | a@2.ru | fiun989jlkjlm |Вчера я жутко нап...|
| id | id_topic | name | comment |
| | fiun989jlkjlm | Сосед снизу | еще раз в подъезде на... |
| | fiun989jlkjlm | Оленька | а мы предохранялись? ... |
думаю просто и ничего лишнего.
а вот как генерить id_topic fiun989jlkjlm что бы его нельзя было угадать, подобрать и т.д. может быть так - news.php?a=е-маил автора&b=рандомное 6-значное выражение
при посылке запроса будет проверять есть ли такой e-mail = a в таблице TOPIC и если есть то есть ли с ним id_topic = b
если все совпадает то генерируем таблицу с темой и комментами и формой для отправки своего, если нет то 404.
много топиков от одного автора не будет (макс.50-100), старые будут автомат.удалятся так что угадать какой либо 6-значный рандомный набор у конкретного автора вероятность очень мала. что в принципе и требуется)
Спасибо прочитавшим
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 29 минут, 35 секунд (19.02.2009 - 12:11) kirik написал(а):
Предлагаю такую схему:
Таблица topics
id - medium int unsigned, auto_increment [тут собственно уникальные айдишники топиков]
author - varchar(100), index [тут е-мэил автора]
text - text [тут текст топика]
Таблица comments
id - medium int unsigned, auto_increment [уникальный айдишник коммента, например чтобы удалять]
topic_id - medium int unsigned, index [к какому посту этот коммент, индексированный столбец чтобы джоинить к топикам]
author - varchar(20) [имя автора]
text - text [текст коммента]
date_add - int unsigned [тут дата добавления коммента, чтобы по ней сортировать при выводе]
При отдаче ссылки составляем уникальный айдишник таким образом - base64_encode('idТопика:emailАвтора'); ссылка будет выглядеть как-то так:
_http://site.com/topic.php?uid=YXV0aG9yQG1haWwucnU6MTI=
При получении uid декодируем его через base64_decode, разбиваем с помощью explode на 2 части (до двоеточия и после), после чего первую часть проверяем на принадлежность к числу, вторую на валидность email адреса. Если все совпало, ищим нужный топик, находим - отдаем, нет - говорим что нет таких.
Поиск топика по числовому айдишнику в базе будет осуществляться быстрее, да и к тому же даже если пользователь расшифрует строку, то вероятность того что он подберет пару id/email практически равна 0.
Кстати если у тебя отдельная таблица с юзерами, то можно автора топика тоже сделать idшником (в таблице topics), и тогда можно кодировать строку idТопика:idАвтора:ЛевыйСлучайныйidЧтобыЗапутать.
Таблица topics
id - medium int unsigned, auto_increment [тут собственно уникальные айдишники топиков]
author - varchar(100), index [тут е-мэил автора]
text - text [тут текст топика]
Таблица comments
id - medium int unsigned, auto_increment [уникальный айдишник коммента, например чтобы удалять]
topic_id - medium int unsigned, index [к какому посту этот коммент, индексированный столбец чтобы джоинить к топикам]
author - varchar(20) [имя автора]
text - text [текст коммента]
date_add - int unsigned [тут дата добавления коммента, чтобы по ней сортировать при выводе]
При отдаче ссылки составляем уникальный айдишник таким образом - base64_encode('idТопика:emailАвтора'); ссылка будет выглядеть как-то так:
_http://site.com/topic.php?uid=YXV0aG9yQG1haWwucnU6MTI=
При получении uid декодируем его через base64_decode, разбиваем с помощью explode на 2 части (до двоеточия и после), после чего первую часть проверяем на принадлежность к числу, вторую на валидность email адреса. Если все совпало, ищим нужный топик, находим - отдаем, нет - говорим что нет таких.
Поиск топика по числовому айдишнику в базе будет осуществляться быстрее, да и к тому же даже если пользователь расшифрует строку, то вероятность того что он подберет пару id/email практически равна 0.
Кстати если у тебя отдельная таблица с юзерами, то можно автора топика тоже сделать idшником (в таблице topics), и тогда можно кодировать строку idТопика:idАвтора:ЛевыйСлучайныйidЧтобыЗапутать.
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)