Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2011, 20:41   #1
BaiAs
Форумчанин
 
Регистрация: 20.05.2010
Сообщений: 100
По умолчанию очистить $_POST[]

Салют.
делаю форму авторизации.
в базу записываются данные из полей, но если поля пустые, при обновлении страницы старые значения глоб. масивов все равно пишутся в таблицу Мскл. в чем ошибка?
вот код
PHP код:
<html><head><title></title></head>
<body>
<center>регистрация
<form action='registracia.php' method='post' name='vhod' >
<input type='hidden' value='true' name='posted'>
<input type='text' name='login'><br>
<input type='text' name='pass' ><br>
<input type='submit' name='send'>
</form></center>
</body></html>
 <?php
$login
=$_POST["login"];  // присваиваем переменной значение из поля формы "логин"
$pass=$_POST["pass"];    // то же для поля "pass" т.е пароль
 
if ((!$login)||(!$pass))  // если в форме есть незаполнениые поля то
 
{
     die(
"заполните все поля");//если пустые поля
 
}
 else
$conn=mysql_connect("localhost","root");  // подключаемся
if(!($conn))
{
     die(
"соединение не установлено!");  // выводим предупреждение если что тo не то
 
}
 else{
     print(
"соединение установлено.");  // если все в порядке пишем что все в порядке
 
}
$query=mysql_query("INSERT INTO `baza`.
`users` (`login`, `password`) VALUES ('
$login', '$pass')");// запрос
if (!($query))
{
    echo 
"<br>не удалось записать";//на случай ошибки пишем сообщение
}
else {
    echo 
"<br>удалось"// если успешно
    
}
mysql_close($conn);   //закрываем
$_POST["login"]="";  //очищаем
$_POST["pass"]="";   //очишаем
?>
BaiAs вне форума Ответить с цитированием
Старый 23.01.2011, 22:28   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Это не ошибка - просто браузер кеширует данные суперглобальных массивов.
Это необходимо для корректного отображения ранее посещённых страниц при использовании кнопок "вперед"-"назад" в браузере.
Соответственно - при использовании кнопки "обновить"(или F5) - браузер ещё раз отправляет данные из формы.
Некоторые браузеры даже выдают предупреждения об этом при возвратах или обновлениях страниц(Firefox, Chrome):
Цитата:
Чтобы отобразить эту страницу, Firefox должен отправить информацию, которая повторит любое ранее произведённое действие (например, запрос на поиск или онлайн-покупка).
Изменить эти данные в кэше браузера можно только повторно отправив форму с новыми значениями (бесполезно пытаться изменить эти данные внутри скрипта - эти изменения не повлияют на кэш браузера).

Простейший способ избавиться от этой проблемы - осуществить принудительный редирект страницы(после обработки данных формы) из самого скрипта средствами:
PHP - функция header();
JS - команда document.location.href="_адрес_";

В этом случае кэш браузера будет очищен.

PS: замечания по вашему коду:
1.Общепринято размещать PHP-код вверху скрипта,а под ним HTML-код - и это логично,т.к. в любом случае сначала выполняется PHP-код на сервере, а уже после идёт вывод HTML в браузер(это критично при использовании header(); ).
2.Не забываем про SQL-injection - обрабатываем данные из формы.
Andkorol вне форума Ответить с цитированием
Старый 24.01.2011, 15:47   #3
BaiAs
Форумчанин
 
Регистрация: 20.05.2010
Сообщений: 100
По умолчанию

исправлю,спасибо за хороший ответ.
BaiAs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очистить файл С++ noob_11 Помощь студентам 1 13.05.2010 22:41
Получить данные из _POST Arnezami PHP 2 17.01.2010 16:22
Добавить переменную в $_POST jziiiiiii PHP 4 23.02.2008 13:56
ОЧистить SpeedButton ZhekON Компоненты Delphi 4 19.06.2007 12:28