Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проверить существование темы и вставить комент 
:(
    Опции темы
dstorm81
Дата 6.6.2008, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


бездельник
***


Профиль
Группа: Завсегдатай
Сообщений: 1178
Регистрация: 18.1.2006
Где: (16RU)

Репутация: нет
Всего: 39



доброго времени. немного сумбурно но надеюсь что меня поймут smile
ситуация такая, есть гостевые, 
когда приходит комментарий для темы (в форме скрытое поле id-темы), постинг без авторизации
как и на этом форуме кстати
Код

<form action="http://forum.vingrad.ru/index.php?" method="post" onsubmit="return ValidateForm()" id="Post_Form" enctype='multipart/form-data'>
<input type="hidden" name="f" value="491" />
<input type="hidden" name="t" value="215124" />


смотрю есть ли тема,  добавляю комментарий
это реализовано на php в 2 этапа и как мне кажется криво
то есть я сначала первым запросом проверяю есть ли тема
а вторым запросом добавляю комментарий

ибо если не проверять наличие темы, то переменную t можно поменять  к примеру FireBug'ом
и постить комменты в несуществующие темы - засорять базу

вот собственно вопрос - можно ли объединить 2 этих этапа в один запрос

или кто посоветует другие решения....

----------------------------------
mySQL 5
1 таблица -gb (посты)
2 таблица -message (комменатрии)


заранее спасибо


--------------------
на форуме с 8.12.2002 (http://forum.vingrad.ru/index.php?act=ST&f=10&t=4874&st=0#)

PM   Вверх
Akina
Дата 6.6.2008, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(dstorm81 @  6.6.2008,  11:05 Найти цитируемый пост)
смотрю есть ли тема,  добавляю комментарий

А если нет темы? от этого зависит ответ на вопрос...
Хотя какая разница... если в базе задано поддержание целостности - он просто не даст добавить запись в таблицу, если нет соответствующей записи в связанной таблице и вернет ошибку. Так что не вижу проблемы... ты лучше думай, что будет, если при подмене будет поставлен номер СУЩЕСТВУЮЩЕЙ темы... 

Полагаю, если вместо номера темы в скрытом поле держать временный псевдослучайный тег реферала - проблема отпадет.




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
skyboy
Дата 6.6.2008, 10:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



Цитата(Akina @  6.6.2008,  09:16 Найти цитируемый пост)
если в базе задано поддержание целостности

специфика MySQL(по крайней мере, относительно 5,  с которой работю, это верно): существуют несколько "движков" БД и более быстрый MyISAM не поддерживает транзакций и foreign keys, а более медленный InnoDB поддерживает и то, и то.
я бы посмотрел, сколько занимает запрос:
Код

INSERT INTO `comments`(`id_topic`, `commentText`)
SELECT `topics`.`id_topic`, "комментарий"
FROM `topics` 
WHERE `topics`.`id_topics` = 8888


Добавлено через 2 минуты и 39 секунд
Цитата(Akina @  6.6.2008,  09:16 Найти цитируемый пост)
если вместо номера темы в скрытом поле держать временный псевдослучайный тег реферала - проблема отпадет.

вариант, конечно.
а ещё вариант - давать постить только авторизованным пользователям и не давать им постить чаще раза в 5-10 секунд.
и пускай изменяют у себя в firbug'e что и где хотят smile
PM MAIL   Вверх
dstorm81
Дата 6.6.2008, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


бездельник
***


Профиль
Группа: Завсегдатай
Сообщений: 1178
Регистрация: 18.1.2006
Где: (16RU)

Репутация: нет
Всего: 39



Цитата(skyboy @  6.6.2008,  10:30 Найти цитируемый пост)
несколько "движков" БД и более быстрый MyISAM не поддерживает транзакций и foreign keys, а более медленный InnoDB поддерживает и то, и то.


вот здесь по существу и загвоздка, я не знаю какой какой тип будет использоваться
InnoDB или MyISAM

то есть при создании таблиц я созданию их независимымиы (без каскада  и внешних ключей)


вся логика должна поддерживаться скриптами 



Цитата(Akina @  6.6.2008,  10:16 Найти цитируемый пост)
А если нет темы? от этого зависит ответ на вопрос...


целостности нет, то если есть темы и изменить t то запишется, проверял ужо
для это го и делал проверку



Цитата(Akina @  6.6.2008,  10:16 Найти цитируемый пост)
Полагаю, если вместо номера темы в скрытом поле держать временный псевдослучайный тег реферала - проблема отпадет.

пособите реально дельной ссылкой




--------------------
на форуме с 8.12.2002 (http://forum.vingrad.ru/index.php?act=ST&f=10&t=4874&st=0#)

PM   Вверх
Akina
Дата 6.6.2008, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(dstorm81 @  6.6.2008,  11:40 Найти цитируемый пост)
пособите реально дельной ссылкой

А при чем тут ссылка? Суть такая - заводится служебная таблица. При отдаче пользователю страницы, допускающей возврат постинга, генерится случайная текстовая последовательность (8-16 байтов), в таблицу записывается она, номер темы, штамп времени, может что-то еще, в форму передается только эта случайная последовательность. Когда возвращается пост, из таблицы по этой последовательности извлекается номер темы, в которую следует поместить пост (то есть тупо join в запрос на добавление). Если последовательность невалидна (отсутствует в таблице) - добавления не произойдет, потому что отбор записей для изменения-добавления вернет ноль записей, и (что приятно) при этом не возникнет ошибки. Угадать же такую последовательность малореально - так что никакая правка не стрельнет.
Таблица чистится по шедулеру, скажем раз в полчаса удаляются записи давностью более часа...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Deniz
Дата 6.6.2008, 11:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 6
Всего: 44



Так может пользовать в php сессии?


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1042 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.