Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Необычный эффект в php
 
 автор: An12   (24.01.2007 в 21:45)   письмо автору
 
 

Всем привет.

Недавно обнаружил, что если написать:

<?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" неэквивалентны?

   
 
 автор: Sergey89   (24.01.2007 в 21:47)   письмо автору
 
   для: An12   (24.01.2007 в 21:45)
 

Вы уверены, что вам нужен &, а не &&?
& - побитовое 'И'.
&& и AND эквиваленты, отличается только их приоритет.

   
 
 автор: Trianon   (24.01.2007 в 21:48)   письмо автору
 
   для: An12   (24.01.2007 в 21:45)
 

& побитовая операция, вычисляет оба аргумента.
and (равно как и &&) - логическая, и при ложном левом аргументе, правый даже не пытается вычислять.

   
 
 автор: An12   (24.01.2007 в 23:03)   письмо автору
 
   для: Trianon   (24.01.2007 в 21:48)
 

Понятненько.

   
 
 автор: YellowMouse   (12.04.2007 в 14:11)   письмо автору
 
   для: 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    |                |
+------------+--------+------+-----+---------+----------------+


Если тот же код оформить не как функцию, то ысё будет ОК.

   
 
 автор: Trianon   (12.04.2007 в 14:20)   письмо автору
 
   для: YellowMouse   (12.04.2007 в 14:11)
 

Если учесть, что в значении параметра BACKGROUND тега BODY прописывается URL картинки, а скрипт, выдающий документ, перед занесением данных в БД не проверяет, как именно его вызвали, и передали ли ему параметры в $_POST, ничего необычного тут нет.
Скрипт вызывается дважды - из <form action= методом POST, и из <body background= методом GET. Во втором случае массив $_POST оказывается незаполненным - в таблице появляется пустая строка.

   
 
 автор: YellowMouse   (12.04.2007 в 14:45)   письмо автору
 
   для: Trianon   (12.04.2007 в 14:20)
 

Я правильно вас понял:
значение параметр фона вида "?" распознаётся как "текущий документ" и он вместе со скриптом вставляется (пытается это сделать) вместо картинки?

Тогда почему если вытащить код из функции такого не происходит? Аа, наверное, одна строка вызова функции, будучи вставленной "вместо картинки" проходит, а многострочный код приводит к ошибке...

   
 
 автор: Trianon   (12.04.2007 в 15:02)   письмо автору
 
   для: YellowMouse   (12.04.2007 в 14:45)
 

параметр URL распознается так:
если нет http: - используется схема доступа документа, порождающего запрос.
если нет //адрес_сервера - используется сервер документа, " " " " " " " " " " " " "
если нет /путь/ - используется каталог документа, " " " ....
если нет /имя_файла - используется файл документа, " " " ....
если нет ? - старая строка параметров не передается.
У Вас есть, правда пустая.

   
 
 автор: YellowMouse   (12.04.2007 в 16:30)   письмо автору
 
   для: Trianon   (12.04.2007 в 15:02)
 

Я не совсем об этом, а о том, что второй вызов скрипта происходит потому, что нетоскоп, пытаясь найти рисунок, вставляет туда родительский документ (со скриптом) ?

   
 
 автор: Trianon   (12.04.2007 в 16:36)   письмо автору
 
   для: YellowMouse   (12.04.2007 в 16:30)
 

А о чем Вы?
Вы указали там знак вопроса. На что Вы расчитывали?
Вопрос - и есть запрос родительского документа.

   
 
 автор: YellowMouse   (12.04.2007 в 17:04)   письмо автору
 
   для: Trianon   (12.04.2007 в 16:36)
 

Не знал об этом, знал, что пустое место - запрос родителяю

   
 
 автор: Trianon   (12.04.2007 в 17:28)   письмо автору
 
   для: YellowMouse   (12.04.2007 в 17:04)
 

Вопрос - явный признак того, что пустому месту (в Вашей терминологии) не будет передано строки параметров, которая передавалась (если передавалась) родителю. В любом случае - это не повод исполнять сам запрос.

Код без функции Вы не привели. Полагаю, что ему тоже есть здравое объяснение

   
 
 автор: YellowMouse   (13.04.2007 в 08:52)   письмо автору
 
   для: Trianon   (12.04.2007 в 17:28)
 

>Вопрос - явный признак того, что пустому месту (в Вашей терминологии) не будет передано строки параметров

Так почему код скрипта вызывается второй раз?
- Потому что на место рисунка браузер пытается вставить текущий (родительский) документ
- В значении параметра стоит знак ? что является признаком идущий далее параметров для скрипта. Именно поэтому скрипт выполняется второй раз.

Иными словами, 2-е выполнение скрипта происходит потому что вызывается документ или потому что вызывается скрипт, должный обработать ожидаемые параметры?

* * *

Вот код без функции.

   
 
 автор: Trianon   (13.04.2007 в 10:07)   письмо автору
 
   для: YellowMouse   (13.04.2007 в 08:52)
 

>Иными словами, 2-е выполнение скрипта происходит потому что вызывается документ или потому что вызывается скрипт, должный обработать ожидаемые параметры?

Ох....
второе выполнение скрипта происходит потому, что в теге <body>, Вы применили атрибут background, а в качестве ссылки на фоновый рисунок в нем (в атрибуте тега) указали адрес скрипта.
символ вопроса - это адрес скрипта, хотите Вы этого или нет.

В коде значимых отличий я не вижу...

   
 
 автор: YellowMouse   (13.04.2007 в 11:59)   письмо автору
 
   для: Trianon   (13.04.2007 в 10:07)
 

Сейчас проверил этот второй код: то же самое, что и в первом (где-то я ошибся).

Во! Вроде что-то есть. Чтобы проверить явно, как скрипт вызывается через параметр тега, создал такую связку (приложение).
В браузерах Firefox 1.5, IE 6 скрипт eksperiment.php вызывается и исполняется, а в Opera 9.02 - нет. Создатели потрудились над безопасностью...?

   
 
 автор: Trianon   (13.04.2007 в 12:09)   письмо автору
 
   для: YellowMouse   (13.04.2007 в 11:59)
 

>Создатели потрудились над безопасностью...?
Скорее - криво реализовали стандарт.
К безопасности тема ну совсем никакого отношения не имеет.
Или Вы под безопасностью понимаете угадывание браузером намерений разработчика?

   
 
 автор: YellowMouse   (13.04.2007 в 13:54)   письмо автору
 
   для: Trianon   (13.04.2007 в 12:09)
 

Что-то мы с вами упорно друг друга не понимаем. С другой стороны, в споре рождается истина...

Вставка кода через атрибуты тегов - основа хакерских атак, называемых инъекциями кода. То, что Opera не реагирует на "кривое" изображение, вполне может оказаться не недоработкой в реализации стандарта, а как раз устойчивостью html-движка к таким вещам.

   
 
 автор: Trianon   (13.04.2007 в 14:01)   письмо автору
 
   для: YellowMouse   (13.04.2007 в 13:54)
 

>Что-то мы с вами упорно друг друга не понимаем. С другой стороны, в споре рождается истина...
Абсолютно согласен с первой частью. Отчасти - со всторой :) Добавил бы "жаль, не в каждом..."


>Вставка кода через атрибуты тегов - основа хакерских атак, называемых инъекциями кода.
Согласен целиком и полностью.

>То, что Opera не реагирует на "кривое" изображение, вполне может оказаться не недоработкой в реализации стандарта, а как раз устойчивостью html-движка к таким вещам.

Категорически не согласен. Нарушение формальной логики:
Браузер и html-движок - суть вещи разные. И особенность браузера никак не может являться свойством движка. Тем более - положительным свойством.

   
 
 автор: YellowMouse   (13.04.2007 в 14:45)   письмо автору
 
   для: Trianon   (13.04.2007 в 14:01)
 

Браузер и движок функционально отождествимы, если данный движок и браузер встречаются только в связке один с другим (как в случае Oper-ы). Поэтому особенность движка условно можно приписать браузеру.

   
 
 автор: Trianon   (13.04.2007 в 15:28)   письмо автору
 
   для: YellowMouse   (13.04.2007 в 14:45)
 

Сюрр...

   
 
 автор: Loki   (16.04.2007 в 16:51)   письмо автору
 
   для: YellowMouse   (13.04.2007 в 14:45)
 

>встречаются только в связке один с другим (как в случае Oper-ы)
Гм... слово Gecko вам не кажется знакомым?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования