Я случайно наткнулся на странную на мой взгляд вещь: скрипт нормально работал на моем компе (IIS 6 + PHP 5.2.6), а когда я его положил на хостинг, вдруг взбрыкнул: от строк, содержащихся в массиве, остались только первые буквы. "Методом скульптора" (отсечь все лишнее) я получил некий минимальный скрипт (ttt.php), который демонстрирует эту фичу. PHP: <html><head></head> <form method="post" action="ttt.php"> <select name="T" size=1> <option selected value="1"> Aaa </option> </select> <input type="submit" value="Set"> </form> <?php $T[0]="asdf"; echo "$T[0]"; phpinfo(); ?> </body> </html> А тут можно посмотреть его в работе на хостинговом сервере. Чтобы увидеть эффект надо нажать на кнопку и следить за словом под ней. Чтобы вторично насладиться, надо закрыть браузер и пойти по этой ссылке заново. phpinfo я вставил, пытаясь предвосхитить вопросы любопытных.. Как я уже сказал, этот скрипт минимальный (почти). Например, убирание тега "option" приводит к мсчезновению эффекта. Я проверял только в IE, но думаю, что это не важно. Так что это - ошибка версии 4.4.7 или результат неизвестных мне настроек на сервере?..
хм.. Но почему тогда: 1. в первый раз выводится вся строка; 2. на моей машине всегда выводится вся строка; 3. если убрать option выводится вся строка ??? Нда, нестрогая типизация - это мина в песочнице..
Потому что из формы приходит строка. А когда из формы ничего не приходит, то $T превращается в массив. Виной всему - regiter_globals и необъявленная переменная. Тоесть в данном примере поведение предсказуемо.
register_globals on Из формы приходит переменная $T, которая является строкой. Ты меняешь нулевой индекс строки, тоесть первый символ строки на "a". А затем его выводишь. register_globals off
Вот теперь врубился. Сработало случайное совпадение назвний переменной и элемента формы. И поскольку я никогда не пользовался register_globals (все больше $_POST), то и внимания не обратил.. Спасибо!