Это глюк броузера или некорректный код?

vladlen

Новичок
Это глюк броузера или некорректный код?

Есть файл "save_add_telephon.php".

<?php
header("Pragma: no-cache");
header("Location: http://192.168.1.22/maywork/phpcode/telephon/admin_telephon.php");
include("config.php");
include("db_function.php");

session_start();
if (isset ($access) && $access=="yes")
{
...
}
else {echo "ERROR: доступ закрыт";}
?>

При обращении в IE отрабатывает. Но в Opera и Mozilla говорит неверный адрес.
Если закоментировать
header("Location: http://192.168.1.22/maywork/phpcode/telephon/admin_telephon.php");
То везде всё ОК.
Можно ли добиться корректной работы везде.
 

Кром

Новичок
vladlen
А что ты хочешь сделать? Пока я вижу здесь некорректный код.
У тебя идет условная переадресация, а потом вывод в броузер. Где логика?
 

vladlen

Новичок
Я хочу чтобы этот скрипт выполнил код на PHP и переправил пользователя на другую страницу. Выводить в броузер ничего не надо.

<?php
header("Pragma: no-cache");
header("Location: http://192.168.1.22/maywork/phpcode/telephon/admin_telephon.php");
include("config.php");
include("db_function.php");

session_start();
if (isset ($acces) && $acces=="yes")
{
connect_my_db ($host, $user, $password, $DBName);
select_my_table ($host, $user, $password, $DBName);

// изменение данных в телефонной книге НАЧАЛО ========================================================================================================
if(isset($_GET['update']) && isset($_GET['otdel']) && isset($_GET['doljnost']) && isset($_GET['family']) && isset($_GET['name']) && isset($_GET['secondname']) && isset($_GET['inttelephon']) && isset($_GET['exttelephon']))
{
$query="UPDATE $table_name SET otdel='$otdel', doljnost='$doljnost', family='$family', name='$name', secondname='$secondname', inttelephon='$inttelephon', exttelephon='$exttelephon' WHERE id=".$edit_id;
$update=mysql_query ($query);
}
// изменение данных в телефонной книге КОНЕЦ ========================================================================================================
}
else {echo "ERROR: доступ закрыт";}
?>
 

GD

Guest
Автор оригинала: vladlen
Я хочу чтобы этот скрипт выполнил код на PHP и переправил пользователя на другую страницу. Выводить в броузер ничего не надо.
?>
вот и делай перенаправление, после того как зделаешь изменения:

header('Location: http://192.168.1.22/maywork/phpcode/telephon/admin_telephon.php');
} else {echo "ERROR: доступ закрыт";}
 

vladlen

Новичок
GD
PHP код исполняется независимо от того где header, перед или после. Не делается перенаправление.

Видимо не совсем точно описал проблему.
При переходе по ссылке на файл "save_add_telephon.php", выходит сообщение "неверный адрес http://........" При этом, если в файле "save_add_telephon.php" убрать строчку

//header("Location: http://192.168.1.22/maywork/phpcode/telephon/admin_telephon.php");

то броузер ошибки не выдаёт.

При этом PHP код отрабатывает и в первом и во втором случае.
Видимо это глюк Opera и Mozlla, т.к. в IE всё работает прекрасно.
 

Кром

Новичок
vladlen
То что где-то этот скрипт работает, еще не значит, что он работает правильно.

Выкинь заголовок header("Pragma: no-cache");
Выкинь session_start(), как я вижу сессии у тебя не используются.
Поставь header в конце обработки, как тебе сказали, после этого напиши die()
 

Sleeper

Guest
Код отрабатывает как раз из-за того, что не происходит перенаправления.
В IE если действительно происходит перенаправление на нужный файл код который идет после перенаправления не должен исполняться.
Если он исполняется и все равно идет перенаправление проверь нет ли где еще одного перенаправления дальше.
Для того чтобы проверить как у тебя под оперой и мозиллой работает перенаправление попробуй сделать простейший файл с перенаправлением и проверить как оно работает на разных путях к файлам.
 

GD

Guest
Автор оригинала: vladlen
PHP код исполняется независимо от того где header, перед или после. Не делается перенаправление.
ежели ты хочешь всех убедить, что скрипт написан правильно, а браузеры или пхп криво - тогда предлагаю трид в гарбич...

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

vladlen

Новичок
Кром
Сейчас код имеет вид

<?php
include("config.php");
include("db_function.php");
connect_my_db ($host, $user, $password, $DBName);
select_my_table ($host, $user, $password, $DBName);
if(isset($_GET['add']) &&isset($_GET['otdel']) && isset($_GET['doljnost']) && isset($_GET['family']) && isset($_GET['name']) && isset($_GET['secondname']) && isset($_GET['inttelephon']) && isset($_GET['exttelephon']) )
{
db_query
(
"INSERT INTO
".$table_name." (otdel, doljnost, family, name, secondname, inttelephon, exttelephon)
VALUES('".$otdel."', '".$doljnost."', '".$family."', '".$name."', '".$secondname."', '".$inttelephon."', '".$exttelephon."')"
);
header("Location: http://192.168.1.22/maywork/phpcode/telephon/admin_telephon.php") or die ("Header не работает");
}
else
{
echo ("ERROR: Запись не добавленна<br>");
}
?>
Но проблема не ушла
Sleeper

Перенаправление на простых файлах работает.

GD
Opera выдаёт
"неверный адрес http://.....здесь путь на файл, думаю нет нужды его воспроизводить..."
Apache не ругается.
Где находится лог php не знаю. Подскажи, посмотрю.

Хотелось бы разобраться в проблеме
 

Линк

Guest
vladlen аккуратненько погляди все заголовки http сниффером.
и сразу увидишь, в чем проблема)
 

Кром

Новичок
vladlen
Напиши так:
PHP:
header("Location: http://192.168.1.22/maywork/phpcode/telephon/admin_telephon.php");
die();
В начале скрипта поставь error_reporting(E_ALL);
И в php.ini - output_buffering = Off
 

vladlen

Новичок
Проблема решена. Всем спасибо.
Дело в некорректном коде.
Виноват не приведённый файл, а последующие. Там тоже переадресация была. И это не отрабатывало как надо. Видимо множественная переадресация недопустима? Хотя в IE всё проходило.
 
Сверху