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 :: области видимости и переменная после else, которая не должна быть empty

 PHP.SU

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


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

> Без описания
red
Отправлено: 02 Августа, 2016 - 23:25:32
Post Id


Новичок


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


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




Суть: есть форма проверки комбинации пользователь\имейл, есть два else для каждого фейла: "нет пользователя" или "нет такого мейла". Эта форма рисуется только после того, когда прошла проверка, что $_GET >пустой и ничего больше не вводилось в адресную строку. Иначе >рисуется другая форма, перед которой проверяется есть ли $_GET и внесены ли данные соотв. записям базе данных.

Обрезок для наглядности:
PHP:
скопировать код в буфер обмена
  1.  $error = ''; //пытаюсь сделать переменную пустой, во избежание фальстарта
  2.  
  3. if(empty($_GET['some_get']))
  4. {  
  5. echo "
  6. <form>
  7. <h2 class='heading'></h2>
  8. $error //прям вот так, в виде переменной загнал
  9. <div class='form1'></div1>
  10. <div class='form2'></div2>
  11. //HTML Код формы c двумя полями username и email, крч.
  12. </form>
  13. ";
  14.  
  15. if(isset($_POST['submit'])) { //проверяет нажатие кнопки и далее введенные поля
  16.  
  17.     if($row !=0) //корректность поля имени
  18.     {  
  19.  if($email == $db_email) //корректность мыла,
  20.        {  //тут код редиректит на другую страницу, если все ОК ;
  21.        }
  22.                else
  23.                {
  24. //вот тут надо обозначить как-то эту самую переменную,
  25. //сделав из empty >в кусок html для вывода в тело <form>, расположенной выше
  26.  
  27.  $error .= '<p class="error">Неверный email для этого пользователя</p>';
  28.                 }
  29.        else
  30.        {
  31. // вот тут тоже самое, на том же месте, но сообщение будет другое
  32.  
  33.  $error .= '<p class="error">Нет такого пользователя</p>';
  34.        }
  35.     }
  36. }
  37.  //конец упражнения
  38.  
  39. //далее идет проверка на наличие _GET
  40. if(isset($_GET['some_get'])
  41. {
  42. //куча проверок по БД этого гета,
  43.    {
  44. //вывод другой, защищенной формы для выбранного username;
  45.    }
  46. }
  47.  


Устал. Все время $error остается пустой и не получает значения из условий(else'й), для вывода ошибок.

Подскажите что можно сделать, не дробя простенький файл на два (этож два раза стили писать... Считай, две страницы для такой ерунды!)

В общем, я совсем начинающий новичок, читаю это http://www.php.su/learnphp/vars/?basic и это http://php.net/manual/ru/languag...iables.scope.php ну и еще кучу обсуждений. И ничего не понимаю по моей ситуации (нет наглядных примеров). И global использовал, и public, и уже проверял - пустая переменная или нет, и даже понял что она всегда остается пустой, разве, если не обозначить её выше того места, где пытаюсь вывести...

(Отредактировано автором: 03 Августа, 2016 - 06:03:22)

 
 Top
Viper
Отправлено: 02 Августа, 2016 - 23:38:37
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




Для начала включите вывод ошибок. Узнаете много нового.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Fart
Отправлено: 03 Августа, 2016 - 05:31:44
Post Id



Посетитель


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


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




посмотрел скрипт...
{
проблема с фигурными скобками. $error не была объявлена... стоит скрипт проработать получше
}

по сабжу:

PHP:
скопировать код в буфер обмена
  1. $error_msg = '';
  2. $error = 'у тебя явно чего то не хватает!!!';
  3. if(empty($_GET['some_get']))
  4. {  
  5.         if(isset($_POST['submit']))
  6.         {
  7.                 if($row !=0)
  8.                 {  
  9.                         if($email == $db_email)
  10.                         {  
  11.                         }
  12.                         else
  13.                         {
  14.                                 $error .= '<p class="error">Неверный email для этого пользователя</p>';
  15.                         }
  16.                 }
  17.                 else
  18.                 {
  19.                         $error .= '<p class="error">Нет такого пользователя</p>';
  20.                 }
  21.         }
  22.  
  23.         if(isset($_GET['some_get']))
  24.         {
  25.  
  26.         }
  27. }
  28.  
  29.         echo "
  30.         <form>
  31.         <h2 class='heading'></h2>
  32.         $error
  33.         <div class='form1'></div1>
  34.         <div class='form2'></div2>
  35.         </form>
  36.         ";

(Отредактировано автором: 03 Августа, 2016 - 05:42:20)

 
 Top
red
Отправлено: 03 Августа, 2016 - 06:22:55
Post Id


Новичок


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


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




Fart пишет:
посмотрел скрипт...
{
проблема с фигурными скобками. $error не была объявлена... стоит скрипт проработать получше
}

по сабжу:

PHP:
скопировать код в буфер обмена
  1. $error_msg = '';
  2. $error = 'у тебя явно чего то не хватает!!!';
  3. if(empty($_GET['some_get']))
  4. {  
  5.         if(isset($_POST['submit']))
  6.         {
  7.                 if($row !=0)
  8.                 {  
  9.                         if($email == $db_email)
  10.                         {  
  11.                         }
  12.                         else
  13.                         {
  14.                                 $error .= '<p class="error">Неверный email для этого пользователя</p>';
  15.                         }
  16.                 }
  17.                 else
  18.                 {
  19.                         $error .= '<p class="error">Нет такого пользователя</p>';
  20.                 }
  21.         }
  22.  
  23.         if(isset($_GET['some_get']))
  24.         {
  25.  
  26.         }
  27. }
  28.  
  29.         echo "
  30.         <form>
  31.         <h2 class='heading'></h2>
  32.         $error
  33.         <div class='form1'></div1>
  34.         <div class='form2'></div2>
  35.         </form>
  36.         ";


По первому замечанию - очепятка, Ниндзя
Поправил пример (крик отчаяния перед сном и все дела), хз зачем там _msg появился (у меня нету его).

По второму замечанию - после if(isset($_GET['some_get'])) у меня выводит уже совсем другую форму, в которой нет необходимости в выводе таких ошибок, т.к. там уже этап проверки введенных данных на наличие в БД уже пройден и юзер авторизован, либо нет (выводится другая ошибка, красиво оформленная, что кстати, работает нормально).

Viper пишет:

Для начала включите вывод ошибок. Узнаете много нового.

<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
В самом начале стоит. Или что-то еще можно включить?

Вопрос в том, как в моей ситуации вытащить эту переменную, наверх, что бы она знала о том, что ее изменили после того, как она размещена выше по функции.

global $error .= '<p class="error">Нет такого пользователя</p>';
не помогает, страница становится белой.
 
 Top
Viper
Отправлено: 03 Августа, 2016 - 08:47:52
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




red пишет:
В самом начале стоит. Или что-то еще можно включить?
должно рыгать undefined variable как минимум.

red пишет:
вытащить эту переменную, наверх, что бы она знала о том, что ее изменили после того
для начала объявить её. Смотрите на код Fart'a.

red пишет:
у меня выводит уже совсем другую форму
ну дак возьмите в else. В чём проблема.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
red
Отправлено: 03 Августа, 2016 - 10:38:46
Post Id


Новичок


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


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




Viper пишет:
должно рыгать undefined variable как минимум.
Это будет, если я уберу первую строчку кода (описанный в первом посте). А так, изначально переменная объявляется как empty, что бы - если нет ошибки >ничего не выводилось на экран, а выводилось сообщение только когда .= в форму введены не корректные данные.

Fart , Спасибо за подсказку.

PHP:
скопировать код в буфер обмена
  1.  $error = ''; //пытаюсь сделать переменную пустой, во избежание фальстарта
  2.  
  3. if(empty($_GET['some_get']))
  4. {  
  5. //отсюда форму перетащил вниз функции
  6.  
  7. if(isset($_POST['submit'])) { //проверяет нажатие кнопки и далее введенные поля
  8.  
  9.     if($row !=0) //корректность поля имени
  10.     {  
  11.  if($email == $db_email) //корректность мыла,
  12.        {  //тут код редиректит на другую страницу, если все ОК ;
  13.        }
  14.                else
  15.                {
  16. //вот тут надо обозначить как-то эту самую переменную,
  17. //сделав из empty >в кусок html для вывода в тело <form>, расположенной выше
  18.  
  19.  $error .= '<p class="error">Неверный email для этого пользователя</p>';
  20.                 }
  21.        else
  22.        {
  23. // вот тут тоже самое, на том же месте, но сообщение будет другое
  24.  
  25.  $error .= '<p class="error">Нет такого пользователя</p>';
  26.        }
  27.     }
  28.  
  29. echo "
  30. <form>
  31. <h2 class='heading'></h2>
  32. $error //прям вот так, в виде переменной загнал
  33. <div class='form1'></div1>
  34. <div class='form2'></div2>
  35. //HTML Код формы c двумя полями username и email, крч.
  36. </form>
  37. ";
  38.  
  39.  
  40. }
  41.   // форму оставил в этом же if(), просто сместил в самый конец. Заработало!
  42.  
  43. //далее идет проверка на наличие _GET
  44. if(isset($_GET['some_get'])
  45. {
  46. //куча проверок по БД этого гета,
  47.    {
  48. //вывод другой, защищенной формы для выбранного username;
  49.    }
  50.  
  51.  
  52. }


Обожаю этот язык. Серьезно! Столько трахаться, а решение простое и лежало на поверхности! А потом это ощущение победы...

(Отредактировано автором: 03 Августа, 2016 - 10:42:03)

 
 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