![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Alexey007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
Вот такая структура у меня. Задача в следующем: после того как новость добавлена сделать следущее(на выбор):
1. просто напросто запретить обновлять страницу(если нажать F5, то штоб текст выскакивал: новость добаления, второй раз добавить нельзя) 2. Чтобы через секунду-две страница сама по себе возращалась на страницу добавления новости. Ваши предложения что лучше и как сделать?)
Это сообщение отредактировал(а) Alexey007 - 1.4.2007, 15:24 |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Alexey007, вообще-то традиционно в таких случаях после добавления просто делают редирект на форму:
Возможны варианты (редирект на промежуточную страницу с результатом действия и ссылкой "продолжить", редирект JavaScript-ом и т.д.), но вот это - классика и потому считается надежнее и универсальнее всего... -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
Alexey007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
а можно сделать с ЗАДЕРЖКОЙ 1-2 сек?
|
|||
|
||||
Alix36 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
sleepом не пробывал? или те где задержка нужна?
-------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
Alexey007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
Спасибо, Alix36.
Sleep поможет, если только сделать переадресацию. с header не поможет, т.к. тег мне ставить между body нужно |
|||
|
||||
cia |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 15.1.2007 Репутация: 4 Всего: 4 |
Выкинь в браузер код редиректа на JavaScript. Т.е. после обработки выводи что хочешь, но также добавь что-то вроде этого:
|
|||
|
||||
boombick |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 20.4.2005 Где: Moscow, Russia Репутация: 2 Всего: 9 |
Господа, ну что вы? Для реализации редиректа стредствами HTML есть специальный meta-тег
В примере редирект произойдет через одну секунду на адрес example.com Решение работает и с отключенным js, в отличие от способа cia -------------------- |
|||
|
||||
Alexey007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
boombick, так мне не надо в мета тегах. я ж писал.
P.S. Вообщем задачу сам решил. Может поправить? Вот как:
|
|||
|
||||
Gold Dragon |
|
||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
Что-то я не совсем понял... а почему просто напросто нельзя использовать с примеру куки (или сессии, или базу)?
У меня такая же задача и я еёпросто делаю так после проверки всего там этакого после удачного добавления сообщения (новости) я создаю кук с необходимой жизнью
а дальше мне всё равно, перезагружалась страница или тыкали на "добавить", в начале стоит код
Это сообщение отредактировал(а) Gold Dragon - 25.4.2007, 08:11 -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||
|
|||||
Alexey007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
Gold Dragon, ну пройдет данное время, человек нажмет перегрузить страницу. и опять добавится сообщение
![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
Я что-то не понял, запретить вообще(!) повторное выполнение скрипта или что? И почему должно добавиться сообщение? После того как сообщение добавляется, то управление переходит на страницу результатов (ну или куда там ещё) и пусть хоть 10000 раз перезагружает, юзер увидит только результаты (только мне посещаемость увеличит
![]() ![]() Это я решил через куки сделать (а просто люблю я куки ![]() Кстати, меня очень бесить (а я думаю не только меня) когда используется
![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
Alexey007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
Да е-мае. Вот ВЕСЬ код:
У меня после добавления высвечивается сообщение: новость добавлена. если нажать F5 то новость опять(!) добавится, а мне этого не нужно.
|
|||
|
||||
cia |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 15.1.2007 Репутация: 4 Всего: 4 |
При нажатии F5 происходит повторное выполнение этого скрипта с теми же параметрами. Просто перед добавлением проверь нет ли уже записи с такими данными.
|
|||
|
||||
Gold Dragon |
|
||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
Вообще-то правельнее было бы разделить на код где добавляются данные и на код вывода результатов (я про это и говорил). Тогда такая проблема сразу пропадает.
А если смотреть по коду, то как вариант можно в самом конце скрипта уничножить переменную
и условие не будет выполняться при перезагрузки
правда я не знаю как она у тебя формируется... -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||
|
|||||
Всемогущий |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 25.6.2006 Где: Челябинск Репутация: 5 Всего: 13 |
на мой взгляд нужно сделать дополнительное поле (INT) в котором хранить CRC32() от склеивания всех текстовых данных одной строки,
сделать индекс по этому полю, и до добавления спрашивать есть ли совподения |
|||
|
||||
Alexey007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
Gold Dragon, во-во...
можно поподробнее? |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
ну так я написал тебе... поставь перед else это unset($act); и попробуй..
А вообще советую пересмотреть сам принцип, раздели на две части код -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
capitan |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 27.2.2005 Где: Москва Репутация: 9 Всего: 13 |
Alexey007,
Используй стандартный метод, который описал SelenIT,
Зачем изобретать велосипед и что-то усложнять? А если тебе потребуется проверка данных, перед добавлением их базу? Если что-то не пройдёт проверку, массив обнулится и придётся всё набирать заново. |
||||
|
|||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
Кстати, я думаю не стоит базу такими пустяками тревожить, можно обойтись и куками ![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 1 Всего: 128 |
Gold Dragon, контрольный вопрос: а если в браузере куки вырублены?
![]() |
|||
|
||||
capitan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 27.2.2005 Где: Москва Репутация: 9 Всего: 13 |
Можно заместо кук использовать сессии. Они работают всегда.
|
|||
|
||||
Alexey007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
У меня такое ощу щение, что никто меня не понимает!
Я ЯСНО выражаюсь: А мне пишут:
Gold Dragon, Ну так я написал код редактирования новостей.. прошу помочь исправить\обновить. А как именно Разделить на 2 части? Модешь по-подродробнее плиз. |
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Alexey007,
header ты не можешь юзать, потому, что у тебя логика скрипта недодуманна, код не валидный просто напросто. В целом былы представленны действительно рабочие методы борьбы с ситуацие: 1. разделение файла на несколько частей т.е. в поле action формы прописать файл добавления новости, который header'ом кинет потом на исходную страницу. про задержку тебе достаточно полно написали кучу методов 2. Блокировка по времени 3. Блокировка по идентичным записям в базе Единственного метода не существует, каждый привлекателен в определенной ситуации... Gold Dragon, unset не поможет, честно говоря не знаю почему, просто была похожая проблема - не помогало :( |
|||
|
||||
Alexey007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
BuShaRt,
По пунктам: 1. Не получится даже разбить файл.. потому что этот header я так понял надо вставлять вначале страниы(всей) 2. по времени не пойдет, т.к. запрет должен быть навсегда.. 3. а если новоть повторится? а это может быть. Есть вопрос: вот допустим редактирование новости, после этого переходит, например, на страницу messenger.php по коду который берет данные в виде $_POST[name].. о после удачного редактирования переменную стирает... Такое возможно сделать? |
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Alexey007,
1. Нет, header обсалютно не обязательно ставить в самом начале строки. Просто до него не должно быть вывода информации. Сам по суди, ведь несколько не логично сначала начать заполнять контент для отправки на клиент, а потом вдруг взять и просто перейти совершенно на другую страницу бросив этот контент в некуда... Правило очень просто: "header можно и нужно использовать не только в начале строки, но он должен срабатывать четко по некоторым условиям"... На пример "Вы удачно добавили новость", должно быть не до header, а выводиться в скрипте, допусти при получение GET-запроса с переменной stasut=add_ok Старался как можно ясней рассказать, не знаю получилось ли) 2.Новость может повториться и с абсолютно идеальной системой защиты от повторени т.к. человеческий фактор... ... И даже проверка в бд, не сработает если символ "А" писать сначала на кирилице, а потом на латинице... 3.Не до конца понял, про редактирование... Вообще как выще указывал Gold Dragon переменные удаляються функцией unset, но с $_POST этот прием не срабатывает, сам не знаю почему, может гуру ответят ![]() |
|||
|
||||
Alexey007 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
BuShaRt,
вроде понял. ![]() Т.е. создать файл некий header.inc, в нем прописать
и вставить методом
ДО вывода всех данных... Но только в течение 10 секунд если пользователь перегрузит страницу (F5), то данные опять добавятся. ![]() Помогите написать по умному систему добавления/редактирования/удаления новостей ![]() А то я так чувствую что у меня все оч и оч криво сделано:( Весь движок даже.... ![]() P.S. если кто может, дам весь движок.. и подскажете, что и как подправить.. может у меня ещё и дыр куча. ![]() Это сообщение отредактировал(а) Alexey007 - 29.4.2007, 01:37 |
||||
|
|||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
455 636 110 стучи
Добавлено через 10 минут и 50 секунд Я спать, стучи уже тогда после выходных ![]() Хотя может и на выходных появлюсь... |
|||
|
||||
Всемогущий |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 25.6.2006 Где: Челябинск Репутация: 5 Всего: 13 |
Как я понимаю структура БД такова:
предроложим что новостей (SMALLINT -32768 | 32767)значит дальнейшие запросы будут выполнятся менее 5 секунд. теперь собственно пишу кусок кода добавления новости
Это сообщение отредактировал(а) Всемогущий - 29.4.2007, 07:08 |
||||
|
|||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Всемогущий,
На самом деле клоны будут в таком случае и запросы тяжеловатые... + проблемы возможны с кодировками... Не знаю как вы, но лично я очень не доверяю стрингам на кирилице... Если уж доверились, то по моему проверки по заголовку новости вполне хватит в данном случае риск очень минимален и решение пригодно для использования... И вот я щас подумал, вроде об этом уже говорили... А почему бы просто после добавления не перекидывать на форму редактирования, а форма редактирования пусть обновляеться сколько угодно раз ;) Это сообщение отредактировал(а) BuShaRt - 29.4.2007, 09:15 |
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
КСТАТЕ! Совсем забыли, ведь есть еще контроль по картинке, можно по тому же принципу input невидимый кидать на страницу и на сервере создавать пометку, что вот, для этого значения есть право добавить новость, после добавления это право умерает и снова надо жать кнопочку "добавление новости"
![]() |
|||
|
||||
Всемогущий |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 25.6.2006 Где: Челябинск Репутация: 5 Всего: 13 |
сегодня для себя решал и решил проблему клонов.
Двоники в зтом случае это одинаковые записи следующие друг за другом. решая проблему
действительно странно
|
||||
|
|||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Всемогущий,
Вот это уже очень красивый подход ;) Какнить потестирую ![]() |
|||
|
||||
Gold Dragon |
|
||||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
![]() В общем я попытался собрать свой код в одном месте ( у меня это разные файлы). commentadd.php
comment.php
В общем, комментировал как мог... Если будет не понятно, спрашивай Это сообщение отредактировал(а) Gold Dragon - 1.5.2007, 10:48 -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||||
|
|||||||
Ravanger |
|
||||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 26.6.2007 Репутация: нет Всего: нет |
Вобщем собственно гря проблемы не вижу, делаем что то типа
и в обработке проверяем
и все Это сообщение отредактировал(а) Ravanger - 3.8.2007, 15:28 |
||||
|
|||||
Anarki |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 14.3.2005 Репутация: 7 Всего: 11 |
Что-то я не понял, каким боком тут unset($act); поможет?
будет каждый раз уничтожаться и всё. Или я что-то недопонимаю? Это сообщение отредактировал(а) Anarki - 5.8.2007, 14:44 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |