Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> error.log сайта, ограничение логов, ошибки сайта 
V
    Опции темы
Fortop
Дата 14.7.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(nicka47 @  14.7.2008,  13:50 Найти цитируемый пост)
обьясниет пожалуйста, что делает данный код:
Код

if ($HTTP_SESSION_VARS){
     for(reset($HTTP_SESSION_VARS); list($k,$v)=each($HTTP_SESSION_VARS);) {$$k=$v;}
     };


Эмулирует работу register_globals = on

Это сообщение отредактировал(а) Fortop - 14.7.2008, 14:13


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
bars80080
Дата 14.7.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Feldmarschall, результат: я имел ввиду ещё ошибку, помимо false
PM MAIL WWW   Вверх
Feldmarschall
Дата 14.7.2008, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



то есть, ты всегда пишешь
Код

if (isset($name)) echo $name;
if (isset($res)) {
  while ($row=mysql_fetch...) {

действительно, любую переменную надо проверять перед использованием. а то вдруг будет ошибка?!

Добавлено через 4 минуты и 26 секунд
Цитата(nicka47 @  14.7.2008,  14:11 Найти цитируемый пост)
прошу обьяснить что дает получение значения REQUEST_METHOD 

получение значения REQUEST_METHOD - это $_SERVER['REQUEST_METHOD']
а код  $method = $_SERVER['REQUEST_METHOD']; - это присвоение значения переменной
Когда пишут 
$var = что-то - это значит, что переменной $var присваивают значение. Я был уверен,что это известно любому программисту на пхп.

Цитата(nicka47 @  14.7.2008,  14:11 Найти цитируемый пост)
мне кажеться имеет, потому что меня интересовала разница

"разница" - это одно. "неправильно" - это совсем другое.


Цитата(nicka47 @  14.7.2008,  14:11 Найти цитируемый пост)
что то не так?

Я написал большой текст, в котором, как мне казалось, смог объяснить, почему переменные надо инициализировать. 
Теперь я понимаю, что ничего ровным счетом не объяснил.
PM   Вверх
nicka47
Дата 14.7.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



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

Присвоение значения переменной за 10 лет работы с сайтами я усвоила

Добавлено через 1 минуту и 27 секунд
Цитата(Feldmarschall @  14.7.2008,  14:23 Найти цитируемый пост)
Я написал большой текст, в котором, как мне казалось, смог объяснить, почему переменные надо инициализировать

возможно, но некоторые вещи до меня доходят постепенно.

Добавлено через 4 минуты и 9 секунд
Fortop,  но применительно конкретно к переменным сессии? Означает ли это, что если я по урл передам переменную ааа со значением, и при наличии данного кода , то $_SESSION['ааа'] будет иметь это значение?
PM MAIL   Вверх
Fortop
Дата 14.7.2008, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(nicka47 @  14.7.2008,  14:32 Найти цитируемый пост)
Fortop,  но применительно конкретно к переменным сессии? Означает ли это, что если я по урл передам переменную ааа со значением, и при наличии данного кода , то $_SESSION['ааа'] будет иметь это значение? 

Если register_globals = on, то после этого кода значение из сессии затрет значение переменной $aaa.

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

Кто мешает обращаться напрямую к элементам массива?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Feldmarschall
Дата 14.7.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Цитата(nicka47 @  14.7.2008,  14:32 Найти цитируемый пост)
я и так стараюсь как могу четко и понятно обьяснить, что хочу спросить.

во-первых, не "и так". ты не нам одолжение делаешь, задавая вопросы, а себе.
во-вторых, если у тебя не получилось - надо снова задать, постаравшись пояснить свою мысль. А не начинать оправдываться.
а если поняла - то описать, что именно. чтобы в тех местах, в которых не поняла, тебя поправили.

В чем заключался вопрос про реквест метод?
Ты поняла разницу между "чем отличается" и "почему неправильно"? Кто тебе сказал, что if ($var) - неправильно? Какой там был контекст?

PM   Вверх
nicka47
Дата 14.7.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Feldmarschall, знаете что, я не маленькая девочка, чтобы разговаривать со мной в подобном тоне,  спасибо большое за попытки помочь, но больше прошу не утруждать себя сообщениями в моих темах.

Добавлено @ 16:24
Цитата(Fortop @  14.7.2008,  15:07 Найти цитируемый пост)
Если register_globals = on, то после этого кода значение из сессии затрет значение переменной $aaa.
 - да, с этим я сталкивалась , но меня больше интересовало обратное, поскольку тогда смысл сессий теряеться, просто хотела уточнить у проффи, поскольку  провела у себя эксперимент и у меня не затерлось значение переменной сессии, значением $aaa, хотя как я все это понимаю теперь должно было?

Добавлено через 7 минут и 2 секунды
Цитата(Fortop @  14.7.2008,  15:07 Найти цитируемый пост)
Кто мешает обращаться напрямую к элементам массива? 
 - никто, просто отстала от жизни, и вот теперь пытаюсь догнать. А с непривычки все кажеться , что как же это ужасно неудобно длинно будет вместо обычного $aaa, обращаться к любой внешней переменной через массив. НО раз другого выхода нет, то придеться приучаться.


Это сообщение отредактировал(а) nicka47 - 14.7.2008, 16:26
PM MAIL   Вверх
Fortop
Дата 14.7.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(nicka47 @  14.7.2008,  16:22 Найти цитируемый пост)
- да, с этим я сталкивалась , но меня больше интересовало обратное, поскольку тогда смысл сессий теряеться, просто хотела уточнить у проффи

во-первых, непонятно какой смысл сессий теряется smile
во-вторых, я на PHP пишу меньше года smile

Цитата(nicka47 @  14.7.2008,  16:22 Найти цитируемый пост)
А с непривычки все кажеться , что как же это ужасно неудобно длинно будет вместо обычного $aaa, обращаться к любой внешней переменной через массив. НО раз другого выхода нет, то придеться приучаться.

Можешь обращаться и к переменной - никто не запрещает. Но рекомендуется проверять и инициализировать все переменные. И не пользоваться register_globals = on


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
skyboy
Дата 14.7.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(nicka47 @  14.7.2008,  15:22 Найти цитируемый пост)
что как же это ужасно неудобно длинно будет вместо обычного $aaa, обращаться к любой внешней переменной через массив

удивительно.
т.е. ты думаешь, что люди работают с $_POST/$_GET и при каждом обращении к элементам проверяем на isset и т.д.?
сколько ведь писали про инициализацию переменных...
конечно, лучше и правильнее работать с переменной, в которой данные единожды проверены и обработаны должным образом, чем каждый раз обращаться к "сырым" данным, полученным от пользователя. Но возлагать перенос "из $_POST в мою переменную" надо не на register_globals. и не на цикл, который делает то же, что и register_globals.
должна быть не универсальная, а точная - проверка и инициализация.
например, так(в $_POST['year'] - значение года, введенное пользователем):
Код

$year= 2000;// значение по умолчанию
if(isset($_POST['year']) && is_numeric($_POST['year']))
  $year= intval($_POST['year']);
// и дальше уже используешь только переменную year, забыв о непроверенных данных в $_POST['year']

меня удивляет, как это не пришло тебе в голову.



PM MAIL   Вверх
nicka47
Дата 14.7.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Цитата(Fortop @  14.7.2008,  17:08 Найти цитируемый пост)
во-первых, непонятно какой смысл сессий теряется 

в том, что если перемення поданная через урл будет затирать переменную сессии, то идентификация пользователя при логине теряет смысл...


skyboy, да я собственно об этом твоем примере и сказала, что длинно и неудобно, с непривычки конечно.
Ну представь просто, форма у меня на....ну на 20 допустим элементов, и вместо 
Код

if ($year) { .... }


я буду писать с каждой переменой  сперва 

Код

$year= "";
if(isset($_POST['year']) )
  $year= $_POST['year'];
    ...


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

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


PM MAIL   Вверх
Feldmarschall
Дата 14.7.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



С формой все гораздо проще...

PM   Вверх
skyboy
Дата 14.7.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(nicka47 @  14.7.2008,  19:57 Найти цитируемый пост)
это как раздует обьемы и время написания моего нынешнего кода 

о. да. а так - всего три строчки, зато никакой проверки на корректность значения не надо. и везде надо будет лепить isset перед использованием, потому что коль переменной $_POST['field'] не было получено, то и переменная $field твоим кодом не создастся.
конечно, код
Код

if(isset($var))
 echo $var;
else
 echo '0';
.....
if(isset($var))
 $var2= $var * 5;
else
 $var2= 0;

будет компактнее, чем одна инициализация. ога.
PM MAIL   Вверх
Feldmarschall
Дата 14.7.2008, 21:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Ну. можно поступить и проще. ^E_NOTICE - и никаких вообще проблем...
Тут мы сталкиваемся с еще одной стороной этой проблемы. инициализация нужна программисту. Это очень тонкий момент, который важно понять. Что мы делаем это для себя, а не для тупого компилятора, чтобы отвязался. Если же только наведения красоты в error_log-е  - право, выставления уровня отображения будет вполне достаточно...
PM   Вверх
Fortop
Дата 14.7.2008, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(nicka47 @  14.7.2008,  20:57 Найти цитируемый пост)
в том, что если перемення поданная через урл будет затирать переменную сессии, то идентификация пользователя при логине теряет смысл...

Все перепутано в датском королевстве. В твоем случае сессия затирает, а не сессию затирают.

Цитата(nicka47 @  14.7.2008,  20:57 Найти цитируемый пост)
Ну представь просто, форма у меня на....ну на 20 допустим элементов, и вместо 

Хоть 300.
можешь создать простой массив, для всех данных которые могут прийти к тебе из формы. (более того из связанного с ним другого массива, можно саму форму генерировать автоматически, а не рисовать ее ручками).

Код

$allowed = ( 'имя_ключа_из_ПОСТ' => 'разрешенный тип или еще лучше имя callback функции для фильтрации и валидации данных',
                    ...,
                    'имя_ключа_из_ПОСТ' => 'разрешенный тип или еще лучше имя callback функции для фильтрации и валидации данных',
                    'имя_ключа_из_ПОСТ' => 'разрешенный тип или еще лучше имя callback функции для фильтрации и валидации данных',
);

дальше несложная функция
Код


function ourFilter($data, $allowed)
{
    $result = array();

    foreach ($allowed as $key => $validator) {
        if (array_key_exists($key, $data)) {
            // данные присутствуют, то фильтруем и валидируем их
            $result[$key] = call_user_func($validator, $data[$key]);
        } else {
            // данных нет, инициализируем по-умолчанию
            $result[$key] = '';
        }
    }
    return $result;
}


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

Код

$data = ourFilter($_POST, $allowed)
for(reset($data); list($k,$v)=each($data);) {$$k=$v;}

и работать как тебе привычно, но уже будучи твердо уверенной что данные у тебя везде правильные и корректные.

Добавлено через 3 минуты и 9 секунд
Цитата(nicka47 @  14.7.2008,  20:57 Найти цитируемый пост)
это как раздует обьемы и время написания моего нынешнего кода 

Если подобный, приведенному выше, код вынесешь в отдельный модуль, который будешь подключать в свои проекты...
Это кардинально сократит объемы и время написания твоего нынешнего кода. Вкупе с кардинально возросшей же безопасностью.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
nicka47
Дата 15.7.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 23.3.2005
Где: Грузия

Репутация: нет
Всего: нет



Код

   import_request_variables('p', 'p_');
   echo $p_username;


а как  насчет такого простого метода?
PM MAIL   Вверх
Страницы: (5) Все 1 2 [3] 4 5 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1044 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.