[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с остановкой скрипта в php
emeraudx
Помогите кто может. Проблема в следующем.

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


<?
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
{
exit ("Ошибка при отправлении");
}
?>




Спустя 4 минуты, 27 секунд (11.06.2010 - 01:19) Unlikely написал(а):
echo в место exit

Спустя 2 минуты, 35 секунд (11.06.2010 - 01:21) emeraudx написал(а):
если заменить exit на echo, тогда скрипт не останавливается, а просто выводит "ОШИБКА" и продолжает работу... или я не прав??

Спустя 3 минуты, 47 секунд (11.06.2010 - 01:25) emeraudx написал(а):
да, я прав, только что проверил

Спустя 3 минуты, 6 секунд (11.06.2010 - 01:28) Gabriel написал(а):
создать массив с для ошибок, при возникновении таковой записывать в масив, а там где нужно проверить не пустая-ли переменная и если нет то показать ошибку если пустая идти дальше.

Спустя 2 минуты, 38 секунд (11.06.2010 - 01:31) emeraudx написал(а):
Цитата (Gabriel @ 10.06.2010 - 22:28)
создать массив с для ошибок, при возникновении таковой записывать в масив, а там где нужно проверить не пустая-ли переменная и если нет то показать ошибку если пустая идти дальше.

А можно примерчик какой-нить, а то я ваще нифига не понял unsure.gif

Спустя 1 минута, 33 секунды (11.06.2010 - 01:32) Unlikely написал(а):
emeraudx
Не пойму, зачем скрипт то останавливать? Условия же прописаны.

Спустя 2 минуты, 7 секунд (11.06.2010 - 01:34) emeraudx написал(а):
Цитата (Unlikely @ 10.06.2010 - 22:32)
emeraudx
Не пойму, зачем скрипт то останавливать? Условия же прописаны.

Потому что если скрипт не остановить, он выводит ошибку и продолжает работу, т.е. продолжает отправку письма, несмотря на то, что некоторые поля не прописаны. Функция echo не останавливает скрипт, она просто выводит то или иное сообщение.

В данном случае, даже когда я прописал echo заместо exit у меня всё-равно вывелось сообщение на белом экране, а не на сайте

Спустя 6 минут, 43 секунды (11.06.2010 - 01:41) Unlikely написал(а):
emeraudx
Так есть же проверка
if (empty($author) or empty($name) or empty($mail_submit))
{
exit ("ОШИБКА");
}

Всё что в else { } не выполнится если будет пустое хоть 1 поле. И думаю лучше проверять не empty($author) а !$author

Спустя 3 минуты, 48 секунд (11.06.2010 - 01:45) emeraudx написал(а):
Цитата (Unlikely @ 10.06.2010 - 22:41)
emeraudx
Так есть же проверка
if (empty($author) or empty($name) or empty($mail_submit))
{
exit ("ОШИБКА");
}

Всё что в else { } не выполнится если будет пустое хоть 1 поле. И думаю лучше проверять не empty($author) а !$author

Логично... надо будет проверить заново.

Но всё-равно проблема не решена. "ОШИБКА" выводится на белом фоне, как её выводить на самом сайте? Уже голову себе поломал с этим вопросом... mad.gif


А почему лучше проверять через не !$author? Какая в этом разница?

Спустя 4 минуты, 22 секунды (11.06.2010 - 01:49) Unlikely написал(а):
emeraudx
А скрипт то отдельно от сайта? Он и будет выводится на белом фоне.

Нужно инклюдить скрипт прям в страницу на которой форма, и посылать пост на саму себя. Или как то иначе выкручиваться, сессиями передавать ошибки или ещё что нибудь.

Спустя 2 минуты, 2 секунды (11.06.2010 - 01:51) Unlikely написал(а):
Цитата (emeraudx @ 10.06.2010 - 22:45)
А почему лучше проверять через не !$author? Какая в этом разница?

Так проще.

Спустя 4 минуты, 21 секунда (11.06.2010 - 01:56) emeraudx написал(а):
Цитата (Unlikely @ 10.06.2010 - 22:49)
emeraudx
А скрипт то отдельно от сайта? Он и будет выводится на белом фоне.

Нужно инклюдить скрипт прям в страницу на которой форма, и посылать пост на саму себя. Или как то иначе выкручиваться, сессиями передавать ошибки или ещё что нибудь.

Это просто самая гениальная подсказка за последнюю неделю!

Так и сделал. Вставил скрипт в страницу и всё заработало! Огромное спасибо biggrin.gif

Спустя 11 минут, 31 секунда (11.06.2010 - 02:07) emeraudx написал(а):
... Зато теперь другая проблема:

Проверяется наличие заполненных полей , и в случае отрицательного результата выводится определенное сообщение. Так вот, если после этого использовать ф-цию exit(), которая завершает работу скрипта, то остальные тэги HTML, которые идут следом за скриптом, не обрабатываются. А это не есть хорошо sad.gif. Можно ли сделать так, чтобы работу завершил только скрипт, не трогая оставшиеся тэги страницы?

Спустя 8 минут, 49 секунд (11.06.2010 - 02:16) Unlikely написал(а):
emeraudx
Думаю нет. Знаю только 2 функции остановки exit и die они убьют все теги.

Всё равно не понимаю, зачем останавливать скрипт? Если поля пустые, он не выполнится никак(если условие правильное) интерпретатор пролетит мимо кода, и выведет ваши html теги.

Спустя 6 минут, 22 секунды (11.06.2010 - 02:22) emeraudx написал(а):
Давайте обратимся еще раз к моему коду.

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

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

Что у нас в итоге получается. В итоге он выводит на экран две ошибки - ошибку №1 (поскольку все строки не были заполнены, но скрипт продолжил работу) и ошибку №2 (поскольку из-за незаполненных строк письмо не отправилось), тока что это проверил. Так что здесь уместна только функция exit или die...

Спустя 1 минута, 18 секунд (11.06.2010 - 02:24) Domin написал(а):
Кодинг Жеки Попова )) А для того чтобы ошибка выдавалась на сайте нужно например всунуть этот код туда-же где у тебя форма , и параметр в форме action оставить пустым или убрать , далее все ошибки будут там появляться !
+ добавлю в конце exit не нужна скрипт то и так выполнился зачем нам его останавливать , а если оставить exit то весь ниже кодинг (даже HTML ) работать не будет , так что там логичнее поставить echo но не как exit !!!!

Спустя 9 минут, 39 секунд (11.06.2010 - 02:33) emeraudx написал(а):
Цитата (Domin @ 10.06.2010 - 23:24)
Кодинг Жеки Попова ))

Даже не отрицаю, учился я именно по его кодингу. Но уже давно обошел все его курсы и продвинулся дальше. Много чего попов не расскзыает, так что приходилось самому учиться.



По поводу функции exit прочитай ранее написанное мною сообщение wink.gif

Спустя 5 минут, 56 секунд (11.06.2010 - 02:39) Unlikely написал(а):
emeraudx
Нужно одно условие поместить в другое. Переместив одну скобку.
<? 
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
{
exit ("Ошибка при отправлении");
}
}

?>

Спустя 5 минут (11.06.2010 - 02:44) Domin написал(а):

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 (empty($author) or empty($name) or empty($mail_submit))
{
echo "Пожалуйста заполните все поля !!!";
exit ();
}

$name = stripslashes(htmlspecialchars($name));
$author = stripslashes(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')
{
echo "Успешно";
}
else
{
echo "Ошибка при отправлении";
}

// ниже форма для отправки письма

Спустя 2 минуты, 56 секунд (11.06.2010 - 02:47) emeraudx написал(а):
Цитата (Unlikely @ 10.06.2010 - 23:39)
emeraudx
Нужно одно условие поместить в другое. Переместив одну скобку.

Вот это помогло, спасибо! huh.gif Тока я понять не могу почему это помогло. Unlikely, объясни, пожалуйста, поподробнее почему так получилось.

Я бы успокоился и разобрался позже, но мне еще регистрацию таким же макаром делать, а я не понимаю главного. А в регистрации у меня функций exit где-то 6-8 штук...

Спустя 8 минут, 40 секунд (11.06.2010 - 02:56) Gabriel написал(а):
5й пост написан для гуглбота?

Спустя 1 минута, 46 секунд (11.06.2010 - 02:58) emeraudx написал(а):
Цитата (Gabriel @ 10.06.2010 - 23:56)
5й пост написан для гуглбота?

процитируй этот пост...

Спустя 6 минут, 43 секунды (11.06.2010 - 03:04) Unlikely написал(а):
emeraudx
Ну проверяется первое условие,
if (empty($author) or empty($name) or empty($mail_submit)) {
exit ("ОШИБКА");
}

если пусто то ошибка и не срабатывает второй блок кода else { }
Если не пусто, то срабатывает else { }
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 {
exit ("Ошибка при отправлении");
}
}

а уже в этом втором блоке делается ещё 1 проверка.
    if ($verify == 'true') {
exit ("Успешно");
}

else {
exit ("Ошибка при отправлении");
}

Думаю всё понятно smile.gif

Спустя 3 минуты, 29 секунд (11.06.2010 - 03:08) emeraudx написал(а):
Unlikely, вот это уже более понятно, спасибо за помощь! wink.gif

Спустя 1 минута, 49 секунд (11.06.2010 - 03:10) Unlikely написал(а):
Не за что. Почитай инфу какую нибудь smile.gif

Спустя 54 секунды (11.06.2010 - 03:10) emeraudx написал(а):
Я не понял причем здесь гуглбот и где найти этот 5 пост, чтобы его прочитать? dry.gif

Спустя 1 минута, 25 секунд (11.06.2010 - 03:12) Unlikely написал(а):
первая страница этой темы -> пятое сообщение.

Спустя 2 минуты, 58 секунд (11.06.2010 - 03:15) emeraudx написал(а):
Ну ппц, кто о чем! biggrin.gif

Мы тут глобальные проблемы решаем, а вы про ботов всяких biggrin.gif

Спустя 10 часов, 5 минут, 38 секунд (11.06.2010 - 13:20) Gabriel написал(а):
решение проблемы было дано в 5том посте который ТС даже с телескопом невидит.
<?php
$error = array(); //переменная в которой будут содержатся ошибки

if( empty( $blablabal ) ) $error[] = 'blablabla can not be empty';

if ( isset( $_POST['test'] ) && count( $error ) == 0 )
{
//выполняем нужное нам действие например записываем в БД
}

if ( isset( $_POST['test'] ) && count( $error ) > 0 )
{
echo implode( '<br>', $error );//показываем ошибку. а записав в сессию ошибку можно показать хоть у черта на куличках без всзяких екзитов итд, итп.
}
?>

Спустя 3 дня, 6 часов, 48 минут, 22 секунды (14.06.2010 - 20:09) Dron19 написал(а):
Цитата (emeraudx @ 10.06.2010 - 22:34)
Цитата (Unlikely @ 10.06.2010 - 22:32)
emeraudx
Не пойму, зачем скрипт то останавливать? Условия же прописаны.

Потому что если скрипт не остановить, он выводит ошибку и продолжает работу, т.е. продолжает отправку письма, несмотря на то, что некоторые поля не прописаны. Функция echo не останавливает скрипт, она просто выводит то или иное сообщение.

В данном случае, даже когда я прописал echo заместо exit у меня всё-равно вывелось сообщение на белом экране, а не на сайте

ты подругому условия скипту поставь, например проверка, если все нормально ,то отправляй письмо и пиши, что все ок, иначе ОШИБКА, так сложно???

Спустя 2 часа, 38 минут, 59 секунд (14.06.2010 - 22:48) tomash написал(а):
emeraudx
Скрипт сам умирает после выполнения, слушайте что Вам говорят! Замените Ваши exit(), на echo() и все заработает.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.