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
Форумы портала PHP.SU :: Версия для печати :: exit()
Форумы портала PHP.SU » » Вопросы новичков » exit()

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

1. condpattern - 20 Июля, 2013 - 22:33:42 - перейти к сообщению
Доброго времени суток.
При обработке формы время от времени попадается 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 и получит окно с формой ошибки.
Может есть какие-нибудь другие методы?
Спасибо.
2. ridvik - 20 Июля, 2013 - 23:14:30 - перейти к сообщению
echo не подойдёт?
3. condpattern - 20 Июля, 2013 - 23:32:18 - перейти к сообщению
ridvik пишет:
echo не подойдёт?

Если echo вместо exit(), то это будет некорректно в отношении кода (ибо с эхо машина продолжить выполнять скрипт), а если внутри exit, то не вижу разницы.
Есть, конечно, еще вариант внутри каждого exit() целиком вставлять html код текущей страницы (к примеру, входа) + поле об ошибке. Но в случае, к примеру, регистрации, у меня есть exit() в количестве 5 или более и 5 раз дублировать код страницы с разницей лишь в тексте сообщения об ошибке- я, конечно, новичек, но мне все таки кажется это извращением и что есть другие способы?
4. DelphinPRO - 20 Июля, 2013 - 23:55:21 - перейти к сообщению
В коде не должно быть совсем никакого вывода. Вы должны сначала обработать все данные, накопить сообщения об ошибках\успехе, и только когда все это будет сделано - решить в каком виде отобразить полученые данные. Если есть ошибки - покажите страницу ошибок, если нет - скажите пользователю, что всё пучком.

Интересная заметка по этому поводу
5. soffrick - 21 Июля, 2013 - 07:35:19 - перейти к сообщению

PHP:
скопировать код в буфер обмена
  1. $confirm = true;

PHP:
скопировать код в буфер обмена
  1. <?PHP if(isset($confirm))  ?>

передавай привет своему наставнику, сектантишка ...
6. condpattern - 21 Июля, 2013 - 11:54:53 - перейти к сообщению
[quote=DelphinPRO][/quote]
Понял, спс.
[quote=soffrick][/quote]
Это копипаст из гугла, меняю только имя переменных и немного добавляю условия. Что не так? Как нужно правильно?
7. soffrick - 21 Июля, 2013 - 12:19:24 - перейти к сообщению
condpattern пишет:
Это копипаст из гугла

Это и есть не так, то есть неправильный источник ты выбрал ...
8. DelphinPRO - 21 Июля, 2013 - 12:38:40 - перейти к сообщению
condpattern пишет:
Что не так? Как нужно правильно?


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

$confirm = true; — Здесь вы объявляете переменную
if(isset($confirm)) — и тут же проверяете - объявлена ли она? Конечно она всегда будет объявлена.
9. condpattern - 21 Июля, 2013 - 13:44:06 - перейти к сообщению
[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)) — и тут же проверяете - объявлена ли она? Конечно она всегда будет объявлена.

Я задаю ее не в начале, а после проверке об успехе операции.
Мне кажется, если бы
PHP:
скопировать код в буфер обмена
  1. $result3 == 'TRUE'

означало строку, а не значение, тогда бы переменная $confirm не объявлялась, а код переходил бы в часть else, но у меня все таки все идет корректно.
10. soffrick - 21 Июля, 2013 - 14:06:16 - перейти к сообщению
condpattern пишет:
сайт- развлечения ради

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

однозначно укоз
11. DelphinPRO - 21 Июля, 2013 - 14:38:17 - перейти к сообщению
condpattern пишет:
Мне кажется, если бы

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

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

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

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

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

PHP:
скопировать код в буфер обмена
  1. if ($result3 !== false) {
  2.     $confirm = true;
  3. } else {
12. condpattern - 21 Июля, 2013 - 15:38:57 - перейти к сообщению
[quote=soffrick][/quote]
Мне не интересен ucoz.

[quote=DelphinPRO][/quote]
Я вас понял, благодарю.

 

Powered by ExBB FM 1.0 RC1