| |
|
|
| | Всем привет.
Недавно обнаружил, что если написать:
<?php
if (isset($_GET["a"]) & $_GET["a"] != "") echo $_GET["a"];
?>
<form action="">
<input type=text name=a><br>
<input type=submit>
</form>
то при первом вызове скрипта выдаётся сообщение об отсутствующем указателе "a".
А если "&" заменить на "and", этого не происходит (и страница не захламляется непотребным).
Получается, "&" и "and" неэквивалентны? | |
| |
|
|
| |
|
|
| |
для: An12
(24.01.2007 в 21:45)
| | | Вы уверены, что вам нужен &, а не &&?
& - побитовое 'И'.
&& и AND эквиваленты, отличается только их приоритет. | |
| |
|
|
| |
|
|
| |
для: An12
(24.01.2007 в 21:45)
| | | & побитовая операция, вычисляет оба аргумента.
and (равно как и &&) - логическая, и при ложном левом аргументе, правый даже не пытается вычислять. | |
| |
|
|
| |
|
|
| |
для: Trianon
(24.01.2007 в 21:48)
| | | Понятненько. | |
| |
|
|
| |
|
|
| |
для: An12
(24.01.2007 в 21:45)
| | | Обнаружил, что если в значении параметра BACKGROUND тега BODY знак вопроса, то выполнение встроенного скрипта работы с MySQL, в котором программа оформлена в виде функции, происходит так, что кроме значащей строки в БД помещается вторая пустая!
Кому интересно, можете посмотреть в приложенных файлах.
MySQL 5.1.16-beta
Php 5.2.0
Структура таблицы в БД:
+------------+--------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------+------+-----+---------+----------------+
| id_members | int(2) | NO | PRI | NULL | auto_increment |
| login | text | YES | | NULL | |
| passw | text | YES | | NULL | |
| about | text | YES | | NULL | |
+------------+--------+------+-----+---------+----------------+
|
Если тот же код оформить не как функцию, то ысё будет ОК. | |
| |
|
|
| |
|
|
| |
для: YellowMouse
(12.04.2007 в 14:11)
| | | Если учесть, что в значении параметра BACKGROUND тега BODY прописывается URL картинки, а скрипт, выдающий документ, перед занесением данных в БД не проверяет, как именно его вызвали, и передали ли ему параметры в $_POST, ничего необычного тут нет.
Скрипт вызывается дважды - из <form action= методом POST, и из <body background= методом GET. Во втором случае массив $_POST оказывается незаполненным - в таблице появляется пустая строка. | |
| |
|
|
| |
|
|
| |
для: Trianon
(12.04.2007 в 14:20)
| | | Я правильно вас понял:
значение параметр фона вида "?" распознаётся как "текущий документ" и он вместе со скриптом вставляется (пытается это сделать) вместо картинки?
Тогда почему если вытащить код из функции такого не происходит? Аа, наверное, одна строка вызова функции, будучи вставленной "вместо картинки" проходит, а многострочный код приводит к ошибке... | |
| |
|
|
| |
|
|
| |
для: YellowMouse
(12.04.2007 в 14:45)
| | | параметр URL распознается так:
если нет http: - используется схема доступа документа, порождающего запрос.
если нет //адрес_сервера - используется сервер документа, " " " " " " " " " " " " "
если нет /путь/ - используется каталог документа, " " " ....
если нет /имя_файла - используется файл документа, " " " ....
если нет ? - старая строка параметров не передается.
У Вас есть, правда пустая. | |
| |
|
|
| |
|
|
| |
для: Trianon
(12.04.2007 в 15:02)
| | | Я не совсем об этом, а о том, что второй вызов скрипта происходит потому, что нетоскоп, пытаясь найти рисунок, вставляет туда родительский документ (со скриптом) ? | |
| |
|
|
| |
|
|
| |
для: YellowMouse
(12.04.2007 в 16:30)
| | | А о чем Вы?
Вы указали там знак вопроса. На что Вы расчитывали?
Вопрос - и есть запрос родительского документа. | |
| |
|
|
| |
|
|
| |
для: Trianon
(12.04.2007 в 16:36)
| | | Не знал об этом, знал, что пустое место - запрос родителяю | |
| |
|
|
| |
|
|
| |
для: YellowMouse
(12.04.2007 в 17:04)
| | | Вопрос - явный признак того, что пустому месту (в Вашей терминологии) не будет передано строки параметров, которая передавалась (если передавалась) родителю. В любом случае - это не повод исполнять сам запрос.
Код без функции Вы не привели. Полагаю, что ему тоже есть здравое объяснение | |
| |
|
|
| |
|
|
| |
для: Trianon
(12.04.2007 в 17:28)
| | | >Вопрос - явный признак того, что пустому месту (в Вашей терминологии) не будет передано строки параметров
Так почему код скрипта вызывается второй раз?
- Потому что на место рисунка браузер пытается вставить текущий (родительский) документ
- В значении параметра стоит знак ? что является признаком идущий далее параметров для скрипта. Именно поэтому скрипт выполняется второй раз.
Иными словами, 2-е выполнение скрипта происходит потому что вызывается документ или потому что вызывается скрипт, должный обработать ожидаемые параметры?
* * *
Вот код без функции. | |
| |
|
|
| |
|
|
| |
для: YellowMouse
(13.04.2007 в 08:52)
| | | >Иными словами, 2-е выполнение скрипта происходит потому что вызывается документ или потому что вызывается скрипт, должный обработать ожидаемые параметры?
Ох....
второе выполнение скрипта происходит потому, что в теге <body>, Вы применили атрибут background, а в качестве ссылки на фоновый рисунок в нем (в атрибуте тега) указали адрес скрипта.
символ вопроса - это адрес скрипта, хотите Вы этого или нет.
В коде значимых отличий я не вижу... | |
| |
|
|
| |
|
|
| |
для: Trianon
(13.04.2007 в 10:07)
| | | Сейчас проверил этот второй код: то же самое, что и в первом (где-то я ошибся).
Во! Вроде что-то есть. Чтобы проверить явно, как скрипт вызывается через параметр тега, создал такую связку (приложение).
В браузерах Firefox 1.5, IE 6 скрипт eksperiment.php вызывается и исполняется, а в Opera 9.02 - нет. Создатели потрудились над безопасностью...? | |
| |
|
|
| |
|
|
| |
для: YellowMouse
(13.04.2007 в 11:59)
| | | >Создатели потрудились над безопасностью...?
Скорее - криво реализовали стандарт.
К безопасности тема ну совсем никакого отношения не имеет.
Или Вы под безопасностью понимаете угадывание браузером намерений разработчика? | |
| |
|
|
| |
|
|
| |
для: Trianon
(13.04.2007 в 12:09)
| | | Что-то мы с вами упорно друг друга не понимаем. С другой стороны, в споре рождается истина...
Вставка кода через атрибуты тегов - основа хакерских атак, называемых инъекциями кода. То, что Opera не реагирует на "кривое" изображение, вполне может оказаться не недоработкой в реализации стандарта, а как раз устойчивостью html-движка к таким вещам. | |
| |
|
|
| |
|
|
| |
для: YellowMouse
(13.04.2007 в 13:54)
| | | >Что-то мы с вами упорно друг друга не понимаем. С другой стороны, в споре рождается истина...
Абсолютно согласен с первой частью. Отчасти - со всторой :) Добавил бы "жаль, не в каждом..."
>Вставка кода через атрибуты тегов - основа хакерских атак, называемых инъекциями кода.
Согласен целиком и полностью.
>То, что Opera не реагирует на "кривое" изображение, вполне может оказаться не недоработкой в реализации стандарта, а как раз устойчивостью html-движка к таким вещам.
Категорически не согласен. Нарушение формальной логики:
Браузер и html-движок - суть вещи разные. И особенность браузера никак не может являться свойством движка. Тем более - положительным свойством. | |
| |
|
|
| |
|
|
| |
для: Trianon
(13.04.2007 в 14:01)
| | | Браузер и движок функционально отождествимы, если данный движок и браузер встречаются только в связке один с другим (как в случае Oper-ы). Поэтому особенность движка условно можно приписать браузеру. | |
| |
|
|
| |
|
|
| |
для: YellowMouse
(13.04.2007 в 14:45)
| | | Сюрр... | |
| |
|
|
| |
|
|
| |
для: YellowMouse
(13.04.2007 в 14:45)
| | | >встречаются только в связке один с другим (как в случае Oper-ы)
Гм... слово Gecko вам не кажется знакомым? | |
| |
|
|