Ничего удивительного - настройки в файле php.ini (Master Value - register_globals = On) были переопределены в файле .htaccess (Local Value - register_globals = Off).
А что за странная переменная $find в качестве условия для if. Я так понимаю, никакого поиска и не будет, потому что условие всегда FALSE (если register_globals=Off).
этим он хотел сказать, что $find - имя его сабмита. Поиск будет в принципе и при отключённом register_globals.[/quote]
По мысли автора проверка if($find) должна защитить скрипт от поиска пустой строки. Это я так думаю. Но при register_globals=Off эта переменная Undefined, что трактуется PHP как FALSE. Вот результат работы этого скрипта:
Notice: Undefined index: find in C:worklocalhostwwwfind.php on line 2
Notice: Undefined index: in in C:worklocalhostwwwfind.php on line 3
Notice: Undefined variable: find in C:worklocalhostwwwfind.php on line 4
Переменная find=
Notice: Undefined variable: find in C:worklocalhostwwwfind.php on line 6
// Здесь выводится форма
Откровенно говоря, я и не заметил, что автор присвоил двум переменным в форме одинаковые имена - find. В этом случае при register_globals=On скрипт всегда будет искать одну и ту же строку "Search"
В новых версиях MySQL (начиная с 4.1.0) изменился порядок работы с национальными кодировками, поэтому старый код может вызывать появление в таблице базы данных знаков вопроса '????????' вместо русского текста. Для того, чтобы этого не возникало, в начало PHP-скрипта, после установки соединения с базой данных, следует поместить следующие строки:
А что за странная переменная $find в качестве условия для if. Я так понимаю, никакого поиска и не будет, потому что условие всегда FALSE (если register_globals=Off).
Мы все дальше отклоняемся от темы . Вопрос изначально стоял так: можно ли при передаче методом GET переменных из формы часть из них передать в атрибуте action элемента form, а часть - через элементы input формы. Т.е.
До того, как я столкнулся с этой проблемой, я полагал, что после отправки формы скрипту будут доступны четыре переменные var1, var2, var3, var4, переданные методом GET, т.е.
test.php?var1=value1&var2=value2&var3=value3&var4=value4
Notice: Undefined index: var1 in D:worklocalhost8wwwtest.php on line 13
Переменная var1=
Notice: Undefined index: var2 in D:worklocalhost8wwwtest.php on line 14
Переменная var2=
Переменная var3=value3
Переменная var4=value4
Такой вопрос не мог меня не заинтересовать -- а ПОЧЕМУ, собственно?
Логика подсказывает, что перед отправкой формы браузер отсекает подстроку "?var1=value1&var2=value2" в атрибуте action тега form и уже после этого добавляет к имени скрипта подстроку "?var3=value3&var4=value4".
Полагаю, что нашел ответ на свой вопрос. Из спецификации HTML:
* get: методом "get" HTTP набор данных формы присоединяется к URI, определённому атрибутом action (со знаком "?" в качестве разделителя), и этот новый URI высылается программе-обработчику.
* post: методом "post" HTTP набор данных формы включается в тело формы и высылается программе-обработчику.
Другими словами, в изложенном мной случае имеет место следующая ситуация
test.php?action=action?test=test
При разборе такой неоднозначной ситуации значащим считается второй знак "?" и именно пары var=value, указанные после второго "?" становятся доступными внутри скрипта.
Тему можно считать закрытой. Спасибо всем, кто принял участие в обсуждении.
А можно чуть-чуть поподробнее? Я понимаю, что action=action обрезается. Но ПОЧЕМУ? Я пробовал передавать переменные формы методом POST, при этом в атрибуте action тега form прописывл action='test.php?action=action' -- и получал в в скрипте переменные $GET["action"] и $_POST["test"]. Но прописать одновременно две переменные, передаваемые GET - одна в строке URL, а другая в элементе <input ... > -- не получается.
После нажатия кнопки "Go!" получаю
Notice: Undefined index: action in D:/work/localhost8/www/test.php on line 11
Переменная action=
Переменная test=test
А почему? Что-то идеологически неверно?
Просьба советов поменять метод GET на метод POST или создать внутри формы дополнительный элемент <input type="hidden" name="action" value="action"> не давать. Мне интересно знать ПОЧЕМУ, а не как обойти проблему.