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 :: Версия для печати :: Массив $Globals
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Массив $Globals

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

1. zypikov - 02 Июня, 2011 - 12:51:52 - перейти к сообщению
Попался мне скриптик
PHP:
скопировать код в буфер обмена
  1. function html ($path){
  2.    if (is_file($path)){$path = implode ('', @file ($path));}
  3.       foreach ($GLOBALS as $key=>$val){print "$key=$val<br />\n";
  4.  
  5.              if (! is_array ($val) and !is_object ($val) and ereg ("%$key%",$path)){
  6.                $path = str_replace ("%$key%",$val,$path);
  7.               }
  8.            }
  9.      if (ereg("%.*%",$path)){
  10.        preg_match_all ("/(?<=%)\w+(?=%)/", $path, $array);
  11.        while (list($key, $val) = each ($array[0])){print "$key=$val<br />\n";
  12.               $path = ereg_replace ("%$val%",'',$path);
  13.               }
  14.        }
  15.    return $path;
  16. }
  17.  
  18. $URL = basename ( $_SERVER['PHP_SELF'] );
  19. if ( isset ( $_POST['text']) && ($_POST['text'] == 'blue')) {
  20. $c_submit = "e0e8ff";
  21. $c_line = "b2c6ff";
  22. $submit_text = "ff0000";
  23. $c_dats = "f4f8ff";
  24. $dats_text = "0000ff";
  25.  
  26. }
  27. else{
  28. $c_submit = "f6e7d4";
  29. $c_line = "f6c5a6";
  30. $submit_text = "842F15";
  31. $c_dats = "f6f7e8";
  32. $dats_text = "ff0000";
  33. }
  34. //unset ($_POST['text']);
  35. print html ( "forma.htm" )


В нем при отправки из формы (если текст равен blue) меняется цвет формы и ее границ.
По неопытности, давно , я решил проверить что попадает в суперглобольный массив Globals.

Получил следущее:

CODE (html):
скопировать код в буфер обмена
  1. GLOBALS=Array
  2. _ENV=Array
  3. HTTP_ENV_VARS=Array
  4. _POST=Array
  5. HTTP_POST_VARS=Array
  6. _GET=Array
  7. HTTP_GET_VARS=Array
  8. _COOKIE=Array
  9. HTTP_COOKIE_VARS=Array
  10. _SERVER=Array
  11. HTTP_SERVER_VARS=Array
  12. _FILES=Array
  13. HTTP_POST_FILES=Array
  14. _REQUEST=Array
  15. URL=phphtml.php
  16. c_submit=e0e8ff
  17. c_line=b2c6ff
  18. submit_text=ff0000
  19. c_dats=f4f8ff
  20. dats_text=0000ff


Я считал что должна быть следущая распечатка
CODE (html):
скопировать код в буфер обмена
  1. GLOBALS=Array
  2. URL=phphtml.php
  3. c_submit=e0e8ff
  4. c_line=b2c6ff
  5. submit_text=ff0000
  6. c_dats=f4f8ff
  7. dats_text=0000ff


Откуда появляются другие массивы? Это все из-за суперглобальности Globals?
2. DlTA - 02 Июня, 2011 - 13:18:31 - перейти к сообщению
все правильно
в $_GLOBALS содержатся ВСЕ данные
в том чисте и $_GET, $_POST, $_SESSIONS и т.д.
(Добавление)
и ссылка на самого себя.)
3. zypikov - 02 Июня, 2011 - 18:27:48 - перейти к сообщению
DlTA пишет:
и ссылка на самого себя.)

Зачем? Когда она может понадобиться?
4. DeepVarvar - 02 Июня, 2011 - 20:36:00 - перейти к сообщению
Будьте внимательнее: $GLOBALS и $_GLOBALS - это разные вещи!!!
5. zypikov - 04 Июня, 2011 - 00:48:54 - перейти к сообщению
DeepVarvar пишет:
Будьте внимательнее: $GLOBALS и $_GLOBALS - это разные вещи!!!

Ну тогда уж подробней расскажи, раз уж начал DeepVarvar)). Чем отличаются, когда используется тот или тот.
И помойму тоже относиться и массивам $_GET, $_POST, т.е. $POST не есть $_POST. Я уже кстати попался на этом нехило. В скрипте именно через $_POST вытаскивались переменные. Я стал его дорабатывать и использовал $POST. Представьте мое удивление, когда я ниче не получил, ни перем. ни значения.
6. DlTA - 04 Июня, 2011 - 00:56:35 - перейти к сообщению
zypikov пишет:
Зачем? Когда она может понадобиться?
этот вопрос надо переадресовать разработчикам PHP
7. OrmaJever - 04 Июня, 2011 - 01:26:19 - перейти к сообщению
zypikov пишет:
Чем отличаются, когда используется тот или тот.

ну 2 вариант вобще не существует Растерялся
а первый сам лично не использовал но надеюсь то когда-нибудь пригодится Закатив глазки Например проверить если ли переменая, или взять её в другой области видимости (например вызвать из функции глобальную переменую)
zypikov пишет:
И помойму тоже относиться и массивам $_GET, $_POST, т.е. $POST не есть $_POST. Я уже кстати попался на этом нехило. В скрипте именно через $_POST вытаскивались переменные. Я стал его дорабатывать и использовал $POST. Представьте мое удивление, когда я ниче не получил, ни перем. ни значения.

это ошибки новичков которые мало читают а сразу берутся писать Улыбка Нужно знать что все переменые от клиента начинаются на $_
8. Мелкий - 04 Июня, 2011 - 09:34:15 - перейти к сообщению
zypikov пишет:
Представьте мое удивление, когда я ниче не получил, ни перем. ни значения.

Вот честно - не представляю удивления. Совершенно другое написание переменной, для любого языка это другая переменная, PHP не исключение. Вы ведь не считаете Маша и Миша одним лицом только от того, что у них 75% имени одинаковы?

OrmaJever пишет:
Нужно знать что все переменые от клиента начинаются на $_

Нужно знать синтаксис языка, на котором пишете. А то я, наверное, тоже удивлю сильно, сказав, что $_POST, $_Post, $_post - 3 совершенно разные переменные, не имеющие между собой ничего общего.
9. zypikov - 07 Июня, 2011 - 18:34:31 - перейти к сообщению
Цитата:
это ошибки новичков которые мало читают а сразу берутся писать Улыбка Нужно знать что все переменые от клиента начинаются на $_
Это ошибка не совсем новичка, а ошибка из-за усталости. Потом я посмотрел другие скрипты и понял что просто ступил.


Цитата:
Нужно знать синтаксис языка, на котором пишете. А то я, наверное, тоже удивлю сильно, сказав, что $_POST, $_Post, $_post - 3 совершенно разные переменные, не имеющие между собой ничего общего.

Да это точно Радость

 

Powered by ExBB FM 1.0 RC1