Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: exit()

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
condpattern
Отправлено: 20 Июля, 2013 - 22:33:42
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Доброго времени суток.
При обработке формы время от времени попадается exit()
PHP:
скопировать код в буфер обмена
  1. if ($result2 == 'TRUE') {
  2.         $confirm = true;
  3.     } else {
  4.         exit('Oh snap! Something went wrong.');
  5.     }

В отличии от успешной операции, где я могу добавить, как в примере,

и далее просто аккуратно вывести уведомление об успехе там, где мне нужно:
PHP:
скопировать код в буфер обмена
  1. <?PHP if(isset($confirm)) { ?>
  2.             <div class="alert alert-success">
  3.                <b>Well done!</b> Email has been sent.
  4.             </div>
  5.             <?PHP } ?>

exit() целиком выкидывает меня и мы оказываемся в белом окне, где можем написать стандартным шрифтом, как в примере, аля
PHP:
скопировать код в буфер обмена
  1.  exit('Oh snap! Type a valid email address.');

Можно ли вывести причину операции exit() оставаясь на странице отправки?
Единственное, что мне приходит в голову, это редирект с id ошибки и далее, в зависимости от id также выводить поля ошибки, как и поля об успехе.
PHP:
скопировать код в буфер обмена
  1. exit("<html><head><meta http-equiv='Refresh' content='0; URL=/signin.php?errors=email'></head></html>");

Но мне кажется это не совсем клевый способ, ведь в этом случае, юзер может сам в строке набрать при юзании ЧПУ строку /signin/email и получит окно с формой ошибки.
Может есть какие-нибудь другие методы?
Спасибо.
 
 Top
ridvik
Отправлено: 20 Июля, 2013 - 23:14:30
Post Id


Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


echo не подойдёт?
 
 Top
condpattern
Отправлено: 20 Июля, 2013 - 23:32:18
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




ridvik пишет:
echo не подойдёт?

Если echo вместо exit(), то это будет некорректно в отношении кода (ибо с эхо машина продолжить выполнять скрипт), а если внутри exit, то не вижу разницы.
Есть, конечно, еще вариант внутри каждого exit() целиком вставлять html код текущей страницы (к примеру, входа) + поле об ошибке. Но в случае, к примеру, регистрации, у меня есть exit() в количестве 5 или более и 5 раз дублировать код страницы с разницей лишь в тексте сообщения об ошибке- я, конечно, новичек, но мне все таки кажется это извращением и что есть другие способы?

(Отредактировано автором: 20 Июля, 2013 - 23:36:09)

 
 Top
DelphinPRO
Отправлено: 20 Июля, 2013 - 23:55:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




В коде не должно быть совсем никакого вывода. Вы должны сначала обработать все данные, накопить сообщения об ошибках\успехе, и только когда все это будет сделано - решить в каком виде отобразить полученые данные. Если есть ошибки - покажите страницу ошибок, если нет - скажите пользователю, что всё пучком.

Интересная заметка по этому поводу


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
soffrick
Отправлено: 21 Июля, 2013 - 07:35:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012  
Откуда: Россия, Москва


Помог: 17 раз(а)







передавай привет своему наставнику, сектантишка ...


-----
Правильный вопрос - уже половина правильного ответа!

p.s. индусы повсюду, будьте осторожны!
 
 Top
condpattern
Отправлено: 21 Июля, 2013 - 11:54:53
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




[quote=DelphinPRO][/quote]
Понял, спс.
[quote=soffrick][/quote]
Это копипаст из гугла, меняю только имя переменных и немного добавляю условия. Что не так? Как нужно правильно?
 
 Top
soffrick
Отправлено: 21 Июля, 2013 - 12:19:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012  
Откуда: Россия, Москва


Помог: 17 раз(а)




condpattern пишет:
Это копипаст из гугла

Это и есть не так, то есть неправильный источник ты выбрал ...

(Отредактировано автором: 21 Июля, 2013 - 12:19:43)



-----
Правильный вопрос - уже половина правильного ответа!

p.s. индусы повсюду, будьте осторожны!
 
 Top
DelphinPRO
Отправлено: 21 Июля, 2013 - 12:38:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




condpattern пишет:
Что не так? Как нужно правильно?


if ($result2 == 'TRUE') — Здесь вы сравниваете $result2 со строкой 'TRUE', а нужно сравнивать со значением TRUE. Это разные вещи.

$confirm = true; — Здесь вы объявляете переменную
if(isset($confirm)) — и тут же проверяете - объявлена ли она? Конечно она всегда будет объявлена.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
condpattern
Отправлено: 21 Июля, 2013 - 13:44:06
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




[quote=soffrick][/quote]
Ну, моя цель не стать потрясным, качественным программистом, а сделать сайт- развлечения ради. Поэтому я скорее ищу шаблоны и переделываю их под себя, нежели изучаю базовую фундаментальную теорию языка и прочие тонкости. Если есть очень грубые ошибки, с радостью, выслушаю.

[quote=DelphinPRO][/quote]
У меня такой кусок кода:
PHP:
скопировать код в буфер обмена
  1. $result3 = mysql_query("INSERT INTO table (f1, f2, f3, f4, f5) VALUES('$f1', '$f2', '$f3', '$f4', NOW())");
  2.     //Проверяем, есть ли ошибки//
  3.     if ($result3 == 'TRUE') {
  4.         $confirm = true;
  5.     } else {

Т.е.
Цитата:
$confirm = true; — Здесь вы объявляете переменную
if(isset($confirm)) — и тут же проверяете - объявлена ли она? Конечно она всегда будет объявлена.

Я задаю ее не в начале, а после проверке об успехе операции.
Мне кажется, если бы

означало строку, а не значение, тогда бы переменная $confirm не объявлялась, а код переходил бы в часть else, но у меня все таки все идет корректно.

(Отредактировано автором: 21 Июля, 2013 - 13:47:12)

 
 Top
soffrick
Отправлено: 21 Июля, 2013 - 14:06:16
Post Id



Посетитель


Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012  
Откуда: Россия, Москва


Помог: 17 раз(а)




condpattern пишет:
сайт- развлечения ради

ucoz Здорово
а пхп - язык программирования
(Добавление)
Цитата:
Поэтому я скорее ищу шаблоны и переделываю их под себя, нежели изучаю базовую фундаментальную теорию языка и прочие тонкости.

однозначно укоз


-----
Правильный вопрос - уже половина правильного ответа!

p.s. индусы повсюду, будьте осторожны!
 
 Top
DelphinPRO
Отправлено: 21 Июля, 2013 - 14:38:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




condpattern пишет:
Мне кажется, если бы

в данном случае это работает, потому используется нестрогая проверка

вы сравниваете $result (булево значение true\false) со строкой 'TRUE'.
Разные типы сравниваются. Поэтому строка приводится к булевому типу. При этом если строка не пустая она становится равной TRUE

C тем же успехом вы можете написать
PHP:
скопировать код в буфер обмена
  1. if ($result3 == 'VASJA PUPKIN') {

или даже

и оно будет работать. Но это неправильно, и при малейшем изменении логики перестанет работать. Такой код нестабилен и непредсказуем.
(Добавление)
самое правильное решение такое

PHP:
скопировать код в буфер обмена
  1. if ($result3 !== false) {
  2.     $confirm = true;
  3. } else {


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
condpattern
Отправлено: 21 Июля, 2013 - 15:38:57
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




[quote=soffrick][/quote]
Мне не интересен ucoz.

[quote=DelphinPRO][/quote]
Я вас понял, благодарю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB