<?
mysql_connect(localhost,doctor) OR DIE("Не могу создать соединение ");
mysql_select_db('doctor');
echo '
<html>
<body>
<form action="/admin.php" method="POST">
логин: <input type = text name=user_name> пароль: <input type = password name=user_pass> <br>
<input type = submit name=add value="Добавить юзера"><br>
</form>';
if (!empty($_POST['add']))
{
if ((!empty($_POST['user_name'])) AND (!empty($_POST['user_pass'])))
{
$query = sprintf("INSERT INTO user (name,pass) VALUES ('%s','%s')",
mysql_real_escape_string($_POST['user_name']),
mysql_real_escape_string($_POST['user_pass']));
mysql_query($query);
echo 'Пользователь успешно добавлен!';
}
else {echo 'No data!';}
}
$_POST['add']='';
echo '</body>
</html>'
?>
Работает вроде как неплохо, но есть одно Но. После ввода данных и тычка на кнопку если обновить страницу, то в базу добавляется еще один пользователь с предыдущими параметрами.
Насколько я понимаю, надо где-то обнулить переданные параметры. Но как это сделать? Проблема в том, что мой сайт будет наполняться информацией людьми, зачастую далекими от компьютеров. Таким образом, хотелось бы как-то избежать подобных "ложных срабатываний". Иначе представьте себе если таких полей будет не 2 а 20, и все они пойдут в базу?
P.S: так как являюсь очень начинающим пхп кодером (а именно-кодю уже три дня

Спустя 7 минут, 11 секунд (11.11.2009 - 23:54) Gabriel написал(а):
if ( ( !empty($_POST['user_name'] ) ) AND ( !empty($_POST['user_pass'] ) ) ) {
$query = sprintf("INSERT INTO user (name,pass) VALUES ('%s','%s')", mysql_real_escape_string($_POST['user_name']),
mysql_real_escape_string($_POST['user_pass']));
mysql_query($query);
header('Status:200');
header('Refresh:2; URL='. $_SERVER['PHP_SELF'] .'?rnd='. time());
echo 'Пользователь успешно добавлен!';
exit();
}
отправляем юзера на туже страницу через header с добавлением рандомного числа. header('Status:200'); специально для хрома иначе ниче он не сделает.
Спустя 8 минут, 28 секунд (12.11.2009 - 00:02) Gate007 написал(а):
Warning: Cannot modify header information - headers already sent by (output started at /var/www/doctor/admin.php:10) in /var/www/doctor/admin.php on line 17
Warning: Cannot modify header information - headers already sent by (output started at /var/www/doctor/admin.php:10) in /var/www/doctor/admin.php on line 18
Пользователь успешно добавлен!
вот вывод...
Спустя 3 минуты, 28 секунд (12.11.2009 - 00:06) Gabriel написал(а):
Gate007
до отправки хедера ничего не должно выводиться в браузер. таких тем на форуме целый вагон
до отправки хедера ничего не должно выводиться в браузер. таких тем на форуме целый вагон
Спустя 23 минуты, 44 секунды (12.11.2009 - 00:30) Krevedko написал(а):
небось еще бом стоит в пхп файлах )
Спустя 8 часов, 3 минуты, 15 секунд (12.11.2009 - 08:33) Gate007 написал(а):
Цитата (Krevedko @ 12.11.2009 - 00:30) |
небось еще бом стоит в пхп файлах ) |
Это вы про BOM из utf-8? Не стоит, все в ANSI.
Я тут чего то походу тотально непонимаю.
<?
mysql_connect(localhost,doctor) OR DIE("Не могу создать соединение ");
mysql_select_db('doctor');
if ($sendform==true)
{
header('Status:200');
header('Refresh:2; URL='. $_SERVER['PHP_SELF'] .'?rnd='. time());
}
echo '
<html>
<body>
<form action="/admin2.php" method="POST">
логин: <input type = text name=user_name> пароль: <input type = password name=user_pass> <br>
<input type = submit name=add value="Добавить юзера"><br>
</form>';
if (!empty($_POST['add']))
{
if ( ( !empty($_POST['user_name'] ) ) AND ( !empty($_POST['user_pass'] ) ) ) {
$query = sprintf("INSERT INTO user (name,pass) VALUES ('%s','%s')", mysql_real_escape_string($_POST['user_name']),
mysql_real_escape_string($_POST['user_pass']));
mysql_query($query);
$sendform=true;
echo 'Пользователь успешно добавлен!';
exit();
}
else {echo 'No data!';}
}
$_POST['add']='';
echo '</body>
</html>'
?>
По моей задумке по тычку на кнопку Добавить юзера если происходит добавление юзера, то $sendform=true, который и не должен давать "постить" старые данные.
Спустя 8 минут, 16 секунд (12.11.2009 - 08:41) Gate007 написал(а):
Разобрался.
Заменил if ($sendform==true) на if (!empty($_POST['add'])).
Всем спасибо.
Заменил if ($sendform==true) на if (!empty($_POST['add'])).
Всем спасибо.
Спустя 5 часов, 37 минут, 1 секунда (12.11.2009 - 14:18) Krevedko написал(а):
я просто предположил. обычно матюги с хедером бывают из-за бом в пхп...сам на этом попадал. он думает, что идет вывод в браузер и ругается.
ну получилось и супер )
ну получилось и супер )