Переход на другую страницу header("Location: login.php");

Andreii

Новичок
Добрый день, Почему у меня не переправляет на другую страницу ?

PHP:
<?php
function pereprava()
{
header("Location: login.php");
}
?>
<header>
<link rel="stylesheet" type="text/css" href="css/style.css">
<script type="text/javascript" src="js/jquery-1.8.3.js" ></script>
<script type="text/javascript" src="js/jquery.validate.js" ></script>
<script type="text/javascript" src="js/script.js" ></script>

</header>

<body>

<center>
<span class="title" >Обратная связь</span>
</center>
<div id="contact-wrapper">
<form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" 
id="contactform">

<div>
<label for="name"><strong>Name:</strong></label>
<input type="text" size="50" name="contactname" 
id="contactname" value="" class="required" />
</div>

<div>
<label for="email"><strong>Email:</strong></label>
<input type="text" size="50" name="email" 
id="email" value="" class="required email" />
</div>

<div>
<label for="message"><strong>Message:</strong></label>
<textarea rows="5" cols="50" name="message" 
id="message" class="required"></textarea>
</div>

<input type="submit" value="Отправить" name="submit" />
</form>

<?php
//если форма отправлена
if(isset($_POST['submit'])) {

//Проверяем, что поле 'Имя' не пустое
if(trim($_POST['contactname']) == '') {
$hasError = true;
} else {
$name = trim($_POST['contactname']);
}

//Проверяем корректен ли введенный почтовый адрес
if(trim($_POST['email']) == '') {
$hasError = true;
} else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$",
trim($_POST['email']))) {
$hasError = true;
} else {
$email = trim($_POST['email']);
}

//Проверяем введены ли данные в поле 'сообщение'
if(trim($_POST['message']) == '') {
$hasError = true;
} else {
if(function_exists('stripslashes')) {
$comments = stripslashes(trim($_POST['message']));
} else {
$comments = trim($_POST['message']);

}
}

//Если ошибок нет, отправляем форму
if(!isset($hasError)) {

$emailTo = '[email protected]'; 
//Пропишите здесь ваш почтовый адрес
$body = "Name: $name \n\nEmail: $email 
\n\nComments:\n $comments";

$headers = 'From: My Site <'.$emailTo.'>' .
"\r\n" . 'Reply-To: ' . $email;

mail($emailTo, $body, $headers);

$emailSent = true;
}
}
?>

<?php if(isset($hasError)) { 
//если найдены ошибки ?> 
<p class="error">Пожалуйста, заполните все поля и
введите корректные данные.</p>

<?php } ?>

<?php if(isset($emailSent) && $emailSent == true) { 

//если письмо отправлено 
?>
<p><strong>Письмо успешно отправлено!</strong></p>
<p>Спасибо <strong><?php echo $name;?></strong> 
за использование контактной формы. Ваше письмо успешно отправлено
и я вскоре с вами свяжусь.</p>

<?php 
pereprava();}
?>
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
А почему должно переправлять? Логику скрипта объясни
 

iNfantry

Новичок
PHP:
<?php if(isset($emailSent) && $emailSent == true) { 

//если письмо отправлено 
?>
<p><strong>Письмо успешно отправлено!</strong></p>
<p>Спасибо <strong><?php echo $name;?></strong> 
за использование контактной формы. Ваше письмо успешно отправлено
и я вскоре с вами свяжусь.</p>

<?php 
pereprava();}
?>
У тебя редирект идет после вывода, заголовки могут передаваться только ДО вывода данных!
Если бы включил контроль ошибок то увидел бы ворнинг, говорящий об этом.
И вобще странная логика - вывести текст, а потом перенаправить, тут надо определиться либо одно либо другое...
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Логика вполне себе нормальная, только такого рода редирект тут не сработает.
 

mrlasking

Новичок
Если уж так надо перенаправлять, после вывода контента, используйте для этого javascript.
 

Andreii

Новичок
Так, что лучше сделать? переписать код или через что то другое побывать ? Я вообще хотел сразу сделать, что б при обновлении даные 2- и болие раз не отправлялись
PHP:
 header("Location: ". $_SERVER["PHP_SELF"]);
exit;
 

Andreii

Новичок
пользователь вводит данные, нажимает Отправить и все. Что б дальше код не отправлял теже данные при обновлении страницы F5. Просто выходит он данные введет их отправит и нажмет F5 раз 10 и мне 10 раз прийдут те даные )
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Если задача такая простая, то можно твой обработчик сделать в самом начале скрипта, без подтверждения сделать редирект, а потом показать пользователю сохраненные данные

Но вообще вариантов много
 

iNfantry

Новичок
Я вижу 3 варианта: аякс, вывод текста и редирект с задержкой через яваскрипт, сразу редирект без вывода текста.
Какой вариант нужен?
 

iNfantry

Новичок
Проще отобразить текст типа форма отправлена, а потом редирект сделать. Но пока до редиректа конешно же по нажатию Ф5 произойдет повторная отправка данных. Если это не смущает то делай так.
В яваскрипте функция есть setTimeout(func_name, interval in miliseconds) можно через нее твою переправу вызывать с нужной задержкой, всё очень просто.
 

Фанат

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

Andreii

Новичок
так из за какого куска кода у меня ворнинг ошибка вылетат? я не могу вообще вдуплиться как сделать
 

Andreii

Новичок
а вот можно что б эта функцыя setTimeout(func_name, interval in miliseconds) сработала после того как я нажму отправить ? и прописать 2 секи например, так же можно?
 
<?php
//Тут весь скрипт...


Header("Location: form.php");
?>
Дальше открывается страница "form.php". Нужно только проследить, чтоб в скрипте ничего не выводилось на экран!
 
Сверху