Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2016, 20:16   #1
romantiqueamour
Пользователь
 
Регистрация: 18.11.2016
Сообщений: 26
По умолчанию Header работает при любом условии if

Подскажите, при любом условии $error меня всё равно перебрасывает на success.php Почему так?
PHP код:
<?php 
session_start
();
    if(isset(
$_POST["send"])){
        
$from htmlspecialchars($_POST["from"]);
        
$to htmlspecialchars($_POST["to"]);
        
$subject htmlspecialchars($_POST["subject"]);
        
$message htmlspecialchars($_POST["message"]);
        
$_SESSION["from"] = $from;
        
$_SESSION["to"] = $to;
        
$_SESSION["subject"] = $subject;
        
$_SESSION["message"] = $message;
        
$error false;
        
$error_from "";
        
$error_to "";
        
$error_subject "";
        
$error_message "";
        if(!
strlen($from) || !preg_match("/@/"$from))
                {
$error_from "Введите корректный e-mail";
                
$error true;} 
        if(!
strlen($to) || !preg_match("/@/"$to))
                {
$error_to "Введите корректный e-mail";
                
$error true;}
        if(!
strlen($subject))
                {
$error_subject "Тема не была введена";
                
$error true;}
        if(!
strlen($message))
                {
$error_message "Сообщение пустое";
                
$error true;}
    }
if(!
$error){
header("Location: success.php");
$subject "=?utf-8?B?".base64_encode($subject)."?=";
$headers "From: $from\r\nReply-to: $from\r\nContent-type: text/plain; charset=utf-8\r\n";
mail($to$subject$message$headers);
}
?>

Последний раз редактировалось Arigato; 18.11.2016 в 20:18.
romantiqueamour вне форума Ответить с цитированием
Старый 18.11.2016, 20:23   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Точно при любом? Поставьте перед if(!$error){ команду die($error?"TRUE":"FALSE"); и проверьте, правильно ли срабатывает флаг $error.
Arigato вне форума Ответить с цитированием
Старый 18.11.2016, 20:43   #3
romantiqueamour
Пользователь
 
Регистрация: 18.11.2016
Сообщений: 26
По умолчанию

Весь код после этого всего умер и высветил FALSE)
А вообще сама переменная $error работает верно...
У меня после кода ещё идёт код html с тэгами формы соответственно.
Я стараюсь понять, как мне во-первых попасть на основную страницу с формами, потому что header сразу перебрасывает...)

Последний раз редактировалось romantiqueamour; 18.11.2016 в 20:49.
romantiqueamour вне форума Ответить с цитированием
Старый 18.11.2016, 22:29   #4
romantiqueamour
Пользователь
 
Регистрация: 18.11.2016
Сообщений: 26
По умолчанию

Реализовал через switch и всё заработало!) спасибо за попытки! Жаль.. не знаю, как удалять тему!
romantiqueamour вне форума Ответить с цитированием
Старый 19.11.2016, 00:19   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Значит надо было разместить весь блок
Код:
if(!$error){
header("Location: success.php");
$subject = "=?utf-8?B?".base64_encode($subject)."?=";
$headers = "From: $from\r\nReply-to: $from\r\nContent-type: text/plain; charset=utf-8\r\n";
mail($to, $subject, $message, $headers);
}
В конце блока
Код:
if(isset($_POST["send"])){
...
// тут
}
Arigato вне форума Ответить с цитированием
Старый 19.11.2016, 17:25   #6
romantiqueamour
Пользователь
 
Регистрация: 18.11.2016
Сообщений: 26
По умолчанию

Кстати, с этой корректировкой тоже работает! Хотя, как начинающий программист, не могу понять, в чём разница. If хоть так, хоть эдак воспринимает всё ту же самую переменную, но почему-то с вашей корректировкой он действительно работает корректно. Большое спасибо!
romantiqueamour вне форума Ответить с цитированием
Старый 20.11.2016, 00:53   #7
Didgik
Пользователь
 
Регистрация: 13.11.2016
Сообщений: 13
По умолчанию

Цитата:
Сообщение от romantiqueamour Посмотреть сообщение
Весь код после этого всего умер и высветил FALSE)
А вообще сама переменная $error работает верно...
У меня после кода ещё идёт код html с тэгами формы соответственно.
Я стараюсь понять, как мне во-первых попасть на основную страницу с формами, потому что header сразу перебрасывает...)
Правильно, не ложь ( !false ) есть истина, соответственно ветка срабатывает, а при не попадании в ветку if(isset($_POST["send"])) переменная $error содержит неизвестно что, в данном случае интерпретируемое как ложь.

Последний раз редактировалось Didgik; 20.11.2016 в 00:58.
Didgik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает header (Location) cyber_NINJA PHP 4 01.03.2015 23:06
Программа на Visual C# работает при запуске руками, но не работает при попытки автоматического запуска Bug$ Помощь студентам 18 21.10.2013 16:22
Файл запускаемый при любом обращении Fakov Помощь студентам 6 25.06.2013 16:20
skipped when looking for precompiled header use, warning C4627 Почему пропущен header ? malor Visual C++ 3 26.06.2011 12:25