[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защита от повторной обработки формы
lodas
Здравствуйте уважаемые программисты. Есть форма поиска, по ней выполняется SELECT запрос. При обновлении страницы F5 вылетает окошко с предложением повторно отправить этот запрос.
Я попрыбывал с помощью Сессий, но получается ложные срабатывания, т.е попадаю в ветку else хотя перед этим был другой запрос. Подскажите пожалуйста как от этого избавиться?
Код формы:
<form action="" method="post">
<
select name="name">//выпадающий список
<option value="Ваша категория:">Ваша категория:</option>
<?php
while ($name = mysql_fetch_row($result3)){
echo "<option value=\"$name[0]\">$name[0]</option>";
}

?>
</select>

<
input type="text" name="nmag" size="25" value="">//поле для поиска

<input type="submit" name="submit" value="Искать">

<
input type="reset" name="reset" value="Очистить">

<
input type="submit" name="dom" value="Все товары">

</
form>

Код Обработки формы:
if(isset($_POST['name']) && $_POST['name']!="Ваша категория:")
{
if(($_SESSION['stat']!=$_POST['nmag']) && ($_SESSION['cats']!=$_POST['name']) )


{
$_SESSION['stat']=$_POST['nmag'];//Записываем предыдущее поле поиска
$_SESSION['cats']=$_POST['name'];//Записываем предыдущую категорию
$categ=$_POST['name'];

$query = "SELECT companies.name,price.name, price.price, price.optprice, price.company
FROM price, companies, subcats
WHERE (price.company=companies.id) AND (UPPER(price.name) LIKE '%"
.strtoupper($_POST['nmag'])."%') ";

}
else
{
Echo "Вы уже выполняли такой запрос- введите другой!";?>

<meta http-equiv="refresh" content="3; url=http://адрес">

<?php
}
$result = mysql_query($query) or die("Запрос ошибочный");
}




Спустя 2 часа, 12 минут, 3 секунды (16.09.2012 - 15:53) T1grOK написал(а):
Делать редирект.

Спустя 1 час, 5 минут, 11 секунд (16.09.2012 - 16:58) pak написал(а):
или через сессию)

Спустя 2 часа, 8 минут, 9 секунд (16.09.2012 - 19:06) lodas написал(а):
Ну вот я и пробую редирект+сессии. Но не получается- в моем коде иногда редирект срабатывает ложно, т.е сразу переходит в ветку else. Помогите мне сделать правильно? И почему этот код неверно срабатывает?

Спустя 2 минуты, 4 секунды (16.09.2012 - 19:08) lodas написал(а):
Причем в качестве редиректа я использую:
<meta http-equiv="refresh" content="3; url=http://адрес">
, мне бы правильно поставить условие и понять почему работает некорректно? может я не так переменные сессии записал?

Спустя 5 минут, 43 секунды (16.09.2012 - 19:14) Winston написал(а):
Нужно header() использовать. Но до его использования ничего нельзя выводить на экран.

Спустя 15 минут, 26 секунд (16.09.2012 - 19:29) lodas написал(а):
У меня такая ситуация что header использовать нельзя- до этого идет вывод на экран. Да и этот редирект хорошо работает, уважаемые эксперты помогите мне определить почему некорректно работает мой код приведенный выше? И как сделать правильно с сессиями, чтобы повторно не отправлялся запрос SELECT?

Спустя 12 минут, 42 секунды (16.09.2012 - 19:42) lodas написал(а):
У меня просто у самого не получается, много перепробовал- но так и не могу понять в чем у меня ошибка, обьясните пожалуйста что в моем коде не так?
Или приведите хотя бы пример как с сессиями правильно сделать так чтобы один и тот же запрос select не повторялся и в случае его повторения делать редирект на эту же страницу?

Спустя 1 час, 13 минут, 44 секунды (16.09.2012 - 20:56) dadli написал(а):
lodas
Цитата
У меня такая ситуация что header использовать нельзя- до этого идет вывод на экран

тогда можеш сделать редирект через js

Спустя 4 минуты, 42 секунды (16.09.2012 - 21:00) lodas написал(а):
Не в редиректе проблемма. Мне бы правильно условие if настроить, и проверку выполнялся ли уже такой запрос select или нет?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.