вторник, 31 июля 2007 г.

В данный момент стоит задача сделать нормальное прикрепление файлов к материалу. Из-за этого всплыла такая конструкция в HTML (упрощённо):


<form method=post>
<input type=text name=name1>
<form></form>
<input type=text name=name2>
<input type=submit>
</form>
<?print_r($_POST);die();>


И тут начинается веселье: ни Firefox, ни IE не передают name2 в посте. Такая конструкция решает дело в Firefox (фактически, получается что это две разных формы, а где завершение какой из них известно):

<form method=post>
<input type=text name=name1>
<div><form></form></div>
<input type=text name=name2>
<input type=submit>
</form>
<?print_r($_POST);die();>


Но IE и тут не соображает. Вариантов решения пока не придумал.

ПС можете поэксперементировать с такими формами - в процессе начинаешь лучше понимать как работает парсер дома в IE и Firefox.

пятница, 27 июля 2007 г.

Так уж вышло, что на хакинг всего пхп меня постоянно не хватает. Поэтому я изредка верю мануалам. А еще иногда я эти мануалы не дочитываю до конца. Исходя из этого вызов функции call_user_func с параметрами передающимися по ссылке всегда реализоввывались как:

$tmp="callbackfunc";
// function callbackfunc(&$p1,&$p2){...}
$object->$tmp($param1,$param2);


Сегодня узнал что есть вариант лучше, да и описан он в мануале на одной из последних строчек.
call_user_func_array(array($obj,"callbackfunc"), array(&$param1,&$param2));


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