Инициализация переменных

player

Новичок
Инициализация переменных

Всем привет!
Сегодня прочитал на счет безопасности РНР, и что надо инициализировать переменные еще до их употребления. Вопрос: как?

например если я ожидаю

$_POST[submit];
$_POST[name];
$_POST[pass];

Заранее спасибо
 

ForJest

- свежая кровь
Это относится к переменным, которые получаются в результате использования register_globals = On.
т.е. раньше это нужно было писать
$a = 0, потому что злоумышленник мог передать
script.php?a=10
$_POST, $_GET и остальные суперглобальные массивы не нужно инициализировать.
 

player

Новичок
ок, сенкс. А если вдруг register_globals = On?? мой код не будет тогда дырявый?
 

ForJest

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

Dreammaker

***=Ф=***
Re: Инициализация переменных

Автор оригинала: player
например если я ожидаю

$_POST[submit];
$_POST[name];
$_POST[pass];
ожидай $_POST['submit'];
и т. д.

Иначе будет выводить undefined index..

Кроме того, делай проверку на [m]isset[/m] или [m]empty[/m] в зависимости от потребностей.

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

В принципе всё-таки лучше сразу привыкнуть делать что-то типа
$var='';
или
$var=0;
для переменных.
 

player

Новичок
ожидай $_POST['submit'];
и т. д.

Иначе будет выводить undefined index..
Я пробовал, написал
$_POST[submit];
$_POST[name];
$_POST[pass];
но это конечно неправильно. Как делать?
Если написать $_POST[name]=""; то оно же обнулится

В принципе всё-таки лучше сразу привыкнуть делать что-то типа
$var='';
или
$var=0;
значит просто в начале скрипта всегда как и в других языках программирования инициализация. ОК, спасиб за советы
 

Dreammaker

***=Ф=***
Имя индекса в кавычках.. !
$_POST['pass']

если же числовой индекс, то без кавычек..

как вариант можно использовать такие конструкции:

$var=(isset($_POST['pass']))?$_POST['pass']:'';

И дальше в коде плясать от этого..
 

player

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

ForJest

- свежая кровь
player
Суперглобальный массивы не нужно инициализировать даже если включен глобалс. Это делает PHP.
 

Фанат

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

SiZE

Новичок
Помоему я отупел. При грамотном использовании кода register_globals = on не является помехой. Так-то вы проверяйте все переменные прежде чем их использовать даже с register_globals = off
 

ForJest

- свежая кровь
SiZE
Речь в топике шла не про проверку а про инициализацию переменных. Это два разных процесса проверка и иницализация.
Инциализация это чаще всего присваивание.
Проверка же чаще всего содежит условные конструкции типа if, switch.
 

kugu

Новичок
В любом случае использование инициализированных переменных на порядок быстрее (относительно).
А если, вдруг, придется перейти на уровень вывода ошибок E_ALL то без инициализации ваще ппц).

З.Ы.
К $_POST, $_GET ... etc. вышесказанное отношения не имеет).
 
Сверху