Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: POST , обновление
 
 автор: esboy   (26.04.2010 в 10:29)   письмо автору
 
 

Доброго времени суток.
появилась проблема.
добавляем запись в базу с формы, при обновлении повторное добавление...
казалось , это уже было , баян ...
ответ один и тот же - редирект (header("location: index.php"))
на чем же я наткнулся ?

вот сама страница

<?
require_once('fns.php');
$action        $_GET['action'];
$name        $_POST['name'];
$country$_POST['country'];
$city        $_POST['city'];
$street        $_POST['street'];
$house        $_POST['house'];
$inn        $_POST['inn'];
$phone        $_POST['phone'];

show_menu();

if (
$action == add_new_client){
         
show_client_form();
        }
else {
        if ( !empty(
$name) && !empty($country) && !empty($city) && !empty($street) && !empty($house) && !empty($inn) && !empty($phone))
        {
                
$conn db_connect();
                
$query ="insert into client values (NULL , '$name' , '$country' , '$city' , '$street' , $house , $inn , $phone)";
                
$result $conn->query($query);
                if (!
$result)
                    throw new 
Exception('Ошибка добавления записи');
                echo 
'<br/>Новая запись добавлена<br/>';
                
header('location: client.php');
        }
        elseif ( !empty(
$name) || !empty($country) || !empty($city) || !empty($street) || !empty($house) || !empty($inn) || !empty($phone) ){
                echo 
' Не все поля заполнены !';
                
show_client_form();
                exit;
        }
        echo 
'<a href=\'client.php?action=add_new_client\'>Добавить нового клиента</a><BR/>';
        
show_table(client);
}
?>

как видите , у меня есть файл fns, где лежат функции , доступа к базе, и отображения таблиц, форм.
там чисто функции, никаких header.
браузер выводит ошибку (ругается что я типа от тебя уже получил заголовки) :

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\nix\www\fns.php:66) in Z:\home\nix\www\client.php on line 26

что делать в это случае ???

  Ответить  
 
 автор: sim5   (26.04.2010 в 10:38)   письмо автору
 
   для: esboy   (26.04.2010 в 10:29)
 

А вы думаете не должно быть только отправки заголовков? Не должно быть никакого вывода в браузер (казалось , это уже было , баян), а у вас:
echo '<br/>Новая запись добавлена<br/>';
header('location: client.php');

  Ответить  
 
 автор: ESBoy   (26.04.2010 в 11:02)   письмо автору
 
   для: sim5   (26.04.2010 в 10:38)
 

то сеть , если я правильно понимаю,
весь вывод должен быть только после headera ?

у меня :


<?
require_once('fns.php');
$action        $_GET['action'];
$name        $_POST['name'];
$country$_POST['country'];
$city        $_POST['city'];
$street        $_POST['street'];
$house        $_POST['house'];
$inn        $_POST['inn'];
$phone        $_POST['phone'];

[
b]show_menu();[/b]


где show_menu() :
function show_menu()
{
?>
<TABLE border="0" bgcolor="yellow">
<TR>
<TD><a href="employee.php">сотрудники</TD>
<TD><a href="supplier.php">поставщики</TD>
<TD><a href="client.php">клиенты</TD>
<TD><a href="goods.php">справочник товаров</TD>
<TD><a href="buy.php">Закупки</TD>
<TD><a href="sell.php">Продажи</TD>
</TR>
</TABLE>
<?
}

  Ответить  
 
 автор: sim5   (26.04.2010 в 11:09)   письмо автору
 
   для: ESBoy   (26.04.2010 в 11:02)
 

Из мануала:

Помните, что header() обязана вызываться до отправки любого вывода: нормальными ли тэгами HTML, пустыми строками в файле, или из PHP. Очень частой ошибкой является чтение кода функциями include() или require(), или другой функцией доступа к файлу, и наличие пробелов или пустых строк, которые выводятся до вызова header(). Та же проблема возникает при использовании единого PHP/HTML-файла.

  Ответить  
 
 автор: Valick   (26.04.2010 в 10:40)   письмо автору
 
   для: esboy   (26.04.2010 в 10:29)
 

Искать пробелы до <? и после ?> и использовать редактор который не пихает в текст служебных символов. Это в общем случае.
У вас же
echo '<br/>Новая запись добавлена<br/>';
header('location: client.php');

хидер сразу после вывода в браузер!!! любой вывод - это уже отправка заголовка

  Ответить  
 
 автор: ESBoy   (26.04.2010 в 11:11)   письмо автору
 
   для: Valick   (26.04.2010 в 10:40)
 

все , Я понял, так и есть.

вопрос следующего вида :
нельзя ли просто после добавления с массива POST стереть эти переменные или удалить ???

  Ответить  
 
 автор: Valick   (26.04.2010 в 12:07)   письмо автору
 
   для: ESBoy   (26.04.2010 в 11:11)
 

Стереть откуда? Информация сохраняется в браузере и при обновлении страницы отправляется на сервер. А сервер в свою очередь понятия не имеет отправляете Вы эти данные первый раз или 132678 раз и ему на это мягко говоря наплевать.
а вот редирект как раз и "стирает" ваши POST

  Ответить  
 
 автор: ESBoy   (26.04.2010 в 12:35)   письмо автору
 
   для: Valick   (26.04.2010 в 12:07)
 

следовательно надо помучаться яваскриптом, наверняка так можно )))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования