eval. PHP программеры, помогите понять код в три строчки.

T
На сайте с 23.11.2005
Offline
298
15032

Что делает eval в этом коде.

Почему здесь проверка на $_GET и $_POST?

$register_poll_vars = array("poll_ident","option_id","action");

for ($i=0;$i<sizeof($register_poll_vars);$i++) {

if (isset($_POST[$register_poll_vars[$i]])) {

eval("\$$register_poll_vars[$i] = \"".trim($_POST[$register_poll_vars[$i]])."\";");

} elseif (isset($_GET[$register_poll_vars[$i]])) {

eval("\$$register_poll_vars[$i] = \"".trim($_GET[$register_poll_vars[$i]])."\";");

} else {

eval("\$$register_poll_vars[$i] = '';");

}

Cmit
На сайте с 16.11.2005
Offline
106
#1

имхо дурацкая функция ...

eval записывает в массив $register_poll_vars[] значения переданные из формы, независимо от метода передачи этих параметров (пост или гет)

чтоб увидеть в каком виде будет массив после выполнения этой функции сделайте:


echo "<pre>";
print_r($register_poll_vars);
die;

А вообще если вам нужны параметры берите их в массиве $_REQUEST там есть и гет и пост.

куплю ссылки -> оргтехника и близкие тематики. //Оставляйте историю переписки!//
T
На сайте с 23.11.2005
Offline
298
#2

Большое спасибо за объяснение,

посмотрел я массив :-)

и понял, что этот кусок кода мне совершенно не нужен.

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

массив $register_poll_vars[] нигде не фигурирует. :-)

Его совершенно не нужно было заполнять.

T
На сайте с 23.11.2005
Offline
298
#3

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

poll_ident, option_id и action с соответствующими значениями и на проверку равенству их соответствующим значениям var_dump стал говорить false. Вот что для меня не ясно, почему нигде больше не употребляется массив register_poll_vars, но функция данная необходима для работы форм? Возможно, здесь более широкйи смысл функции eval?

Cmit
На сайте с 16.11.2005
Offline
106
#4

вероятно плохо искали.

Если код работает, зачем его переделывать? Оставьте как есть. У меня местами есть такой код, что глаза могут лопнуть - писал его когда только учился. Так до сих пор работает, уж много лет прошло :) Есть проекты даже на перле написаннные :))

Главное чтоб ошибок не было.

T
На сайте с 23.11.2005
Offline
298
#5

Cmit, спасибо за комментарии.

Я разобрался. Несмотря на то, что сам массив register_poll_vars больше нигде не употребляется - употребляются значения из этого массива, например здесь:

... if ($action=="results" && $poll_id==$poll_ident) ...

Вот такое дело.

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

$register_poll_vars['$poll_ident'], а достаточно работать с самой переменной $poll_ident. Я этого раньше не знал.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий