Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрет на повторного выполнения скрипта 
:(
    Опции темы
Alexey007
Дата 28.4.2007, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

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



Gold Dragon, во-во...
можно поподробнее?
PM MAIL   Вверх
Gold Dragon
Дата 28.4.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



ну так я написал тебе... поставь перед else это unset($act); и попробуй..

А вообще советую пересмотреть сам принцип, раздели на две части код


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
capitan
Дата 28.4.2007, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 9
Всего: 13



Alexey007
Используй стандартный метод, который описал SelenIT
Цитата

Код

...
  if($act=='add')
    {
Сам скрипт добавления новости 
      header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?act=form');
      exit();
    }
...



Зачем изобретать велосипед и что-то усложнять? А если тебе потребуется проверка данных, перед добавлением их базу? Если что-то не пройдёт проверку, массив обнулится и придётся всё набирать заново.
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 28.4.2007, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(capitan @  28.4.2007,  14:31 Найти цитируемый пост)
Если что-то не пройдёт проверку, массив обнулится и придётся всё набирать заново.
Неее, обнулять не всё надо, только $act=='add', все остальные поля должны быть с уже ранее набранным текстом. Очень обидно когда набираешь набираешь, а из-за какой-нить ошибки все поля приходится занова заполнять...

Кстати, я думаю не стоит базу такими пустяками тревожить, можно обойтись и куками  smile 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
mr.Anderson
Дата 28.4.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 1
Всего: 128



Gold Dragon, контрольный вопрос: а если в браузере куки вырублены? smile Ведь пока еще это явление вполне имеет место быть.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
capitan
Дата 28.4.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 9
Всего: 13



Можно заместо кук использовать сессии. Они работают всегда.
PM MAIL WWW ICQ   Вверх
Alexey007
Дата 28.4.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

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



У меня такое ощу щение, что никто меня не понимает!
Я ЯСНО выражаюсь:
Цитата(Alexey007 @  1.4.2007,  16:48 Найти цитируемый пост)
 с header не поможет, т.к. тег мне ставить между body нужно

А мне пишут:
Цитата(boombick @  2.4.2007,  15:11 Найти цитируемый пост)
Господа, ну что вы? Для реализации редиректа стредствами HTML есть специальный meta-тег

Цитата(capitan @  28.4.2007,  14:31 Найти цитируемый пост)
Alexey007, Используй стандартный метод, который описал SelenIT, 



Gold Dragon, Ну так я написал код редактирования новостей.. прошу помочь исправить\обновить.
А как именно Разделить на 2 части? Модешь по-подродробнее плиз.
PM MAIL   Вверх
BuShaRt
Дата 28.4.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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

В целом былы представленны действительно рабочие методы борьбы с ситуацие:
1. разделение файла на несколько частей
т.е. в поле action формы прописать файл добавления новости, который header'ом кинет потом на исходную страницу.
про задержку тебе достаточно полно написали кучу методов
2. Блокировка по времени
3. Блокировка по идентичным записям в базе

Единственного метода не существует, каждый привлекателен в определенной ситуации...

Gold Dragon
unset не поможет, честно говоря не знаю почему, просто была похожая проблема - не помогало :(




PM MAIL   Вверх
Alexey007
Дата 28.4.2007, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

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



BuShaRt
По пунктам:
1. Не получится даже разбить файл.. потому что этот header я так понял надо вставлять вначале страниы(всей)
2. по времени не пойдет, т.к. запрет должен быть навсегда..
3. а если новоть повторится? а это может быть.

Есть вопрос: вот допустим редактирование новости, после этого переходит, например, на страницу messenger.php по коду который берет данные в виде $_POST[name].. о после удачного редактирования переменную стирает...
Такое возможно сделать?
PM MAIL   Вверх
BuShaRt
Дата 29.4.2007, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Alexey007
1. Нет, header обсалютно не обязательно ставить в самом начале строки. Просто до него не должно быть вывода информации.

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

Правило очень просто: "header можно и нужно использовать не только в начале строки, но он должен срабатывать четко по некоторым условиям"... 

На пример "Вы удачно добавили новость", должно быть не до header, а выводиться в скрипте, допусти при получение GET-запроса с переменной stasut=add_ok

Старался как можно ясней рассказать, не знаю получилось ли)


2.Новость может повториться и с абсолютно идеальной системой защиты от повторени т.к. человеческий фактор...
... И даже проверка в бд, не сработает если символ "А" писать сначала на кирилице, а потом на латинице...


3.Не до конца понял, про редактирование... Вообще как выще указывал Gold Dragon переменные удаляються функцией unset, но с $_POST этот прием не срабатывает, сам не знаю почему, может гуру ответят smile


PM MAIL   Вверх
Alexey007
Дата 29.4.2007, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.3.2007

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



BuShaRt
Цитата(BuShaRt @  29.4.2007,  00:19 Найти цитируемый пост)
Старался как можно ясней рассказать, не знаю получилось ли)

вроде понял. smile 
Т.е. создать файл некий header.inc, в нем прописать
Код

if(isset($act))
  {
  if($act == 'edit')
    {
          sleep(10);
          header('Location: index.php?action=news_edit');
          exit();
     }
   }

и вставить методом
Код

include 'header.inc';

ДО вывода всех данных...
Но только в течение 10 секунд если пользователь перегрузит страницу (F5), то данные опять добавятся. smile 

Помогите написать по умному систему добавления/редактирования/удаления новостейsmile
А то я так чувствую что у меня все оч и оч криво сделано:(
Весь движок даже.... smile 

P.S. если кто может, дам весь движок.. и подскажете, что и как подправить.. может у меня ещё и дыр куча. smile 

Это сообщение отредактировал(а) Alexey007 - 29.4.2007, 01:37
PM MAIL   Вверх
BuShaRt
Дата 29.4.2007, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



455  636  110  стучи

Добавлено через 10 минут и 50 секунд
Я спать, стучи уже тогда после выходных smile
Хотя может и на выходных появлюсь...
PM MAIL   Вверх
Всемогущий
Дата 29.4.2007, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Как я понимаю структура БД такова:
Код

`id` , `id_news` , `name` , `text` , `site` , `date` , `img` 

предроложим что новостей (SMALLINT -32768 | 32767)значит дальнейшие запросы будут  выполнятся менее 5 секунд.

теперь собственно пишу кусок кода добавления новости

Код

<?php
$id_news=$_POST['id_news']
$name=$_POST['name']
$text=$_POST['text']
$site=$_POST['site']
$date=$_POST['date']
$img=$_POST['img']
//для начала генерируем контрольную сумму для тех данных которые только что поступили

$correct=md5($name.$text.$site.$date.$img); //здесь должны быть поля в которых содежится информация поступившая непосредственно от человека
//те же поля используем в SQL запросе
$result = mysql_query("select `id` where  md5( concat( `name`,`text`, `site`,`date`,`img`))='$correct' limit 1") ;

if(@mysql_num_rows($result)!=1){

//процедура добавления новости

}else die('клоны нам не нужны');

?>


Это сообщение отредактировал(а) Всемогущий - 29.4.2007, 07:08


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
BuShaRt
Дата 29.4.2007, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Всемогущий
На самом деле клоны будут в таком случае и запросы тяжеловатые... + проблемы возможны с кодировками...
Не знаю как вы, но лично я очень не доверяю стрингам на кирилице...

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


И вот я щас подумал, вроде об этом уже говорили... А почему бы просто после добавления не перекидывать на форму редактирования, а форма редактирования пусть обновляеться сколько угодно раз ;)


Это сообщение отредактировал(а) BuShaRt - 29.4.2007, 09:15
PM MAIL   Вверх
BuShaRt
Дата 29.4.2007, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



КСТАТЕ! Совсем забыли, ведь есть еще контроль по картинке, можно по тому же принципу input невидимый кидать на страницу и на сервере создавать пометку, что вот, для этого значения есть право добавить новость, после добавления это право умерает и снова надо жать кнопочку "добавление новости" smile
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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