Форум сетевых администраторов Страницы (3): « 1 [2] 3 »
Показаны 39 сообщений на этой странице

Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- Оптимизация кода, и новые фичи (http://netadmin.ws/forum/showthread.php?threadid=7563)


Помещено he][es 31-01-2004 в 09:43:

А у меня такое вопрос, стоит ли делать так:

PHP:


if ( isset($_GET['act']) ) {
    
$act = $_GET['act'];
    if (
$act != "vote" AND $act != "show_miss" AND $act != "show_all_miss" AND $act != "add_compliment" AND $act != "show_news" AND $act != "show_all_news" AND $act != "show_all_quotes" AND $act != "logout") {
        print 
"<h1 align=\"center\"><bR />&nbsp;<bR />&nbsp;<bR />ПОПАЛСЯ ХАКЕÐ_!!!</h1>";
        exit;
    }
}


Или не стоит $act = $_GET['act'];
И нужно обращаться на прямую к $_GET['act']?

__________________
Админ - вождь Апачей...


Помещено polo 31-01-2004 в 11:38:

А в чем проблема так делать? Ð_то ничему не грозит.

__________________
Всегда есть решение.


Помещено he][es 31-01-2004 в 13:47:

polo ну я имею ввиду оптимальность. а) Что бы скрипт меньше ресурсов жрал...
б) Чтоб проблем невзникло непредвиденных...

__________________
Админ - вождь Апачей...


Помещено MarKer 31-01-2004 в 15:37:

Вообще, полная оптимальность - это конечно бы без $act = $_GET['act'];. Но если у тебя в $_GET['act'] особо объемистых данных не будет... для удобства можно сделать и копию с "нормальным" именем - на потребляемых ресурсах это отразится лишь теоретически.

P.S. Кстати, вместо print() и exit; можно воспользоваться одной функцией - exit() (или её альясом die()).


Помещено he][es 31-01-2004 в 19:12:

MarKer ну в приведенном примере значения маленькие, но есть др. функции (подобные) в которых происходит добавление статей в БД, и там поля до longtext 65т. с коп. символов, я это так же делаю, из $_POST['var'] записываю в $var а потом подставляю в SQL запрос...

__________________
Админ - вождь Апачей...


Помещено MarKer 31-01-2004 в 19:35:

Ну... как говорится - копейка рубль бережет
В таких случаях лучше конечно же не делать копии... или делать unset() для "неудобной" переменной после создания копии.


Помещено whisk 31-01-2004 в 23:04:

Можно просто воспользоваться символьной (или символической?) ссылкой:
$act =& $_GET['act'];
he][es Кстати, по твоему примеру - так делать не стоит имхо Слишком много условий - криво. Либо надо делать
if ... elseif ... elseif ... else, или что-то вроде этого:
$actions = array ('add', 'del', 'edit', 'etc...');
if (in_array($act, $actions) == false) {...}
Т.е. можно и как ты, но в таком месиве можно легко допустить фотальную ашипку.


Помещено he][es 01-02-2004 в 08:17:

whisk я просто с такими "фишками" плохо разбираюсь, объясни поподробнее плз...

__________________
Админ - вождь Апачей...


Помещено zyablik 01-02-2004 в 09:54:

in_array - возвращает TRUE, если значение существует в массиве.

quote:
$actions = array ('add', 'del', 'edit', 'etc...');
if (in_array($act, $actions) == false) {...}


читай так:
создать массив экшнс содержащий значения (эдит,добавить, и т.д.)
если ( функция ин_аррай возвращает ложь, (тоесть переменная акт отстутствует в массиве экшн) то ) {замечен хакер.}

во..

Кстати.. с точки зрения производительности лучше использовать &&, || вместо AND, OR соответсвенно.

__________________
http://www.best-pills-store.com


Помещено Искатель 01-02-2004 в 12:14:

------------
$act =& $_GET['act'];
-------------

& Ð_то указатель.
$act =& $_GET['act']; в данном случае переменная $act будет ссылаться на тот же участок памяти что и $_GET['act'].

__________________
http://faq.pp.ru/read_mee/


Помещено he][es 01-02-2004 в 16:16:

Пасибо большое... заюзаю...

he][es добавил 01-02-2004 в 16:27:27:
А вот такие конструкции допустимы?
$vote_add =& (int) $_GET['vote_add'];
Судя по ошибке или нет, или пишу не так...

__________________
Админ - вождь Апачей...


Помещено polo 01-02-2004 в 18:37:

php имеет свойства сам определять тип переменной. Если тебе надо быть уверенным что в $_GET['vote_add'] именно целое число то пиши intval($_GET['vote_add']).

__________________
Всегда есть решение.


Помещено he][es 01-02-2004 в 21:08:

polo т.е. пишу
$vote_add =& intval($_GET['vote_add']);
???

__________________
Админ - вождь Апачей...


Помещено polo 02-02-2004 в 14:19:

да, только & нафига здесь. & создает ссылку на переменную, это здесь ни к чему. Ð_то полезно например использовать в функциях
при передачи параметров и чтобы глобальные переменные тоже менялись. Посмотри пример и сделай выводы:

PHP:


$a 
= 1;
function 
print_a ($a) {
              
$a++;
              echo 
$a;
}

print_a($a); // выведет 2
echo $a; // выведет 1 
print_a(&$a); // выведет 2
echo $a; // выведет 2

__________________
Всегда есть решение.


Помещено he][es 02-02-2004 в 20:55:

Блин, я ещё больше запутался...
если мы делая так:
$k=5;
$a =& $k;
print $a; // 5
Делаем ссылку, на область памяти и не делаем новой переменной, (как я понимаю изменение $k повлечет соотв. изменение $a), то вызывая ф-ию с параметром &$a мы чего делаем???
если ф бы было $b = & print_a($a);
я б понял но как с параметром ссылки...ээ...
Я просто не догоняю как это работает?

$a=5 -> function($a=5) -> $a++ -> 6
это понятно, а
$a=5 -> function(&$a=5) я не понимаю...

__________________
Админ - вождь Апачей...


Формат времени GMT. Текущее время 13:48. Страницы (3): « 1 [2] 3 »
Показаны 39 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.