|
|
|
| Доброго времени суток.
появилась проблема.
добавляем запись в базу с формы, при обновлении повторное добавление...
казалось , это уже было , баян ...
ответ один и тот же - редирект (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
|
что делать в это случае ??? | |
|
|
|
|
|
|
|
для: esboy
(26.04.2010 в 10:29)
| | А вы думаете не должно быть только отправки заголовков? Не должно быть никакого вывода в браузер (казалось , это уже было , баян), а у вас:
echo '<br/>Новая запись добавлена<br/>';
header('location: client.php'); | |
|
|
|
|
|
|
|
для: 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>
<?
}
|
| |
|
|
|
|
|
|
|
для: ESBoy
(26.04.2010 в 11:02)
| | Из мануала:
Помните, что header() обязана вызываться до отправки любого вывода: нормальными ли тэгами HTML, пустыми строками в файле, или из PHP. Очень частой ошибкой является чтение кода функциями include() или require(), или другой функцией доступа к файлу, и наличие пробелов или пустых строк, которые выводятся до вызова header(). Та же проблема возникает при использовании единого PHP/HTML-файла. | |
|
|
|
|
|
|
|
для: esboy
(26.04.2010 в 10:29)
| | Искать пробелы до <? и после ?> и использовать редактор который не пихает в текст служебных символов. Это в общем случае.
У вас же
echo '<br/>Новая запись добавлена<br/>';
header('location: client.php');
|
хидер сразу после вывода в браузер!!! любой вывод - это уже отправка заголовка | |
|
|
|
|
|
|
|
для: Valick
(26.04.2010 в 10:40)
| | все , Я понял, так и есть.
вопрос следующего вида :
нельзя ли просто после добавления с массива POST стереть эти переменные или удалить ??? | |
|
|
|
|
|
|
|
для: ESBoy
(26.04.2010 в 11:11)
| | Стереть откуда? Информация сохраняется в браузере и при обновлении страницы отправляется на сервер. А сервер в свою очередь понятия не имеет отправляете Вы эти данные первый раз или 132678 раз и ему на это мягко говоря наплевать.
а вот редирект как раз и "стирает" ваши POST | |
|
|
|
|
|
|
|
для: Valick
(26.04.2010 в 12:07)
| | следовательно надо помучаться яваскриптом, наверняка так можно ))) | |
|
|
|