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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2010, 02:10   #1
emeraudx
 
Регистрация: 26.05.2010
Сообщений: 0
По умолчанию Остановка скрипта в php

Помогите кто может. Проблема в следующем.

Когда посетитель отправляет письмо с сайта, он заполняет форму, если он, допустим, заполнил не все поля, то обработчик (дан ниже) выводит ошибку "ОШИБКА". Но поскольку функция exit() завершает скрипт, то остальные тэги HTML, которые идут следом за скриптом, не обрабатываются. А это не есть хорошо . Можно ли сделать так, чтобы работу завершил только скрипт, не трогая оставшиеся тэги страницы?

Код:

<? 
include ("blocks/bd.php");

if (isset($_POST['id'])) {$id = $_POST['id'];}
if (isset($_POST['login'])) {$login = $_POST['login'];}
if (isset($_POST['email'])) {$email = $_POST['email'];}
if (isset($_POST['author'])) {$author = $_POST['author'];} if ($author == '') { unset($author);}
if (isset($_POST['name'])) {$name = $_POST['name'];} if ($name == '') { unset($name);}
if (isset($_POST['mail_submit'])) {$mail_submit = $_POST['mail_submit'];}


if (empty($author) or empty($name) or empty($mail_submit))
{
exit ("ОШИБКА");
}
else
{
$name = stripslashes($name);

$author = stripslashes($author);



$name = htmlspecialchars($name);

$author = htmlspecialchars($author);


$subject = "текст";
$to = "кому письмо";
$from='откуда письмо';
$message = "текст письма";
$verify = mail($to,$subject,$message,'From:'.$from."\nContent-type:text/plain; Charset=windows-1251\r\n");
}

if ($verify == 'true')
{
exit ("Успешно");
}
else 
{
echo ("Ошибка при отправлении");
}
?>

Если можете объясните поподробее и попроще, т.к. я тока начинаю осваивать php.
Языковой портал для тех, кто изучает иностранные языки: www.super-speaker.ru

Последний раз редактировалось emeraudx; 11.06.2010 в 03:26.
emeraudx вне форума Ответить с цитированием
Старый 11.06.2010, 11:20   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

ну замени exit('Error') на echo 'Error'
ADSoft вне форума Ответить с цитированием
Старый 11.06.2010, 19:37   #3
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

А типа if использовать нельзя? Это же элементарно.
Виталий Желтяков вне форума Ответить с цитированием
Старый 11.06.2010, 20:07   #4
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Делаем
Код:
if (...)
{
//здесь выводим нужные теги
//а exit уже здесь
exit();

};
motorway вне форума Ответить с цитированием
Старый 12.06.2010, 13:39   #5
emeraudx
 
Регистрация: 26.05.2010
Сообщений: 0
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
ну замени exit('Error') на echo 'Error'
Мне не нужно, чтобы скрипт выполнялся дальше, если есть ошибка. Если делать переменную error, то для вывода ошибки нужно пользоваться echo

Давайте еще раз обратимся к моему коду.

Если он проскакивает остановку скрипта еще со строки "ОШИБКА" (т.е. при использовании функции echo), то он идет дальше и натыкается на другой скрипт, который выводит ошибку "ОШИБКА ПРИ ОТПРАВЛЕНИИ", поскольку сообщение не отправлено администратору.

Короч логика. Сначала интерпретатор выводит ошибку №1 - ОШИБКА, работает дальше и натыкается на ошибку №2 - ОШИБКА ПРИ ОТПРАВЛЕНИИ.

Что у нас в итоге получается. В итоге он выводит на экран две ошибки - ошибку №1 (поскольку все строки не были заполнены, но скрипт продолжил работу) и ошибку №2 (поскольку из-за незаполненных строк письмо не отправилось), тока что это проверил. Так что здесь уместна только функция exit или die...
Языковой портал для тех, кто изучает иностранные языки: www.super-speaker.ru
emeraudx вне форума Ответить с цитированием
Старый 12.06.2010, 17:59   #6
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

В чем проблема?
Вывод ошибки - через echo (в середине), или exit, если она в конце скрипта.
Остановить скрипт - exit.
Если все это должно делать при опр. условиях, то пишете if, и дальше условия.
motorway вне форума Ответить с цитированием
Старый 15.06.2010, 02:15   #7
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Как вариант, если автор ну очень сильно хочет изобрести велосипед (такое бывает на первых стадиях программирования), то можно все "тэги" загнать в переменную и делать а-ля exit($end_tags); или закрывающую часть загнать в отдельный файл и просто иклюдить его перед exit();
А ну, и в конце при полностью успешном выполнении скрипта тоже иклюдить этот файл. Таким образом файл будет инклюдиться только один раз до прекращения работы скрипта. )

З.Ы. Всё написанное мной выше никак не говорит о том, что я поддерживаю автора в его извращённой логике программирования на PHP.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очистка папки из php-скрипта. Def@ult PHP 11 19.02.2015 12:21
Получение данных от php скрипта.. Sanich Работа с сетью в Delphi 5 20.12.2007 16:41