PHP: головоломка

24 Авг 2007

PHPХотите поломать голову над задачкой по веб-программированию ? Пожалуйста. Есть код:

<table><tr><td background=#fff7eb id=message>
<?php mysql_query("INSERT INTO `res_action` (`type`, `date`, `id`, `from`, `to`, `text`, `viewed`, `hidden`)
VALUES ('hate', '08/08/07 12:15', 1070808121557, 'foo', 'bar', '', '0', '0')"); ?>
</td></tr></table>

При обработке такого кода происходит ошибка — запись добавляется в базу два раза. Стоит убрать из таблицы цвет фона — ошибка исчезает. В продолжении — ответ на задачу. Кто сообразит без подсказки ?

Программист перепутал атрибуты background и bgсolor. В результате td background=#fff7eb вызывает страницу еще раз с якорем #fff7eb, а страница добавляет ещё одну запись в базу. Имхо, шикарный пример ошибки, возникшей на грани HTML и PHP.






 

vladstar@livejournal     .

Написано 24 августа 2007 года в 01:10


Забавно…

 

Alex     .

Написано 24 августа 2007 года в 04:01


На самом деле атрибута background для TD не предусмотрено. Поэтому наверное сильно умный браузер думает, что это из css пришло и пытается его так обработать. По идее не должны исправить положение даже кавычки. И на самом деле ошибка все-таки не в PHP а в html. Хотя если бы в php была проверка, к примеру, на IP в течение определенного времени, то повторный просмотр можно было бы игнорировать. Но это уже друга история, а пример поучительный…

 

Жилинcкий Владимир     .

Написано 24 августа 2007 года в 08:27


Абсолютно верно. Добавлю, что background — свойство элементов в CSS, поэтому перепутать было вполне реально.

 

бомж     .

Написано 24 августа 2007 года в 12:46


У меня выполняется один раз всегда.

 

Жилинcкий Владимир     .

Написано 24 августа 2007 года в 12:51


Там ещё от понимания браузером бэкграунда зависит на самом деле =)

 

Антон Шевчук     .

Написано 24 августа 2007 года в 14:54


Поучительно…

 

medar     .

Написано 24 августа 2007 года в 16:19


Владимир!! Благодетель!! :)
Несколько дней назад писал плагин к cms — как раз с показом форм и записью в базу — и не мог понять, почему записи дублируются при сохранении. Похоже, дело как раз в этом :))

 

Жилинcкий Владимир     .

Написано 24 августа 2007 года в 16:59


Ржу всем офисом :-D

 

Жилинcкий Владимир     .

Написано 24 августа 2007 года в 17:41


Картинку нашёл :-D :
PHP

 

Evgeny Sergeev     .

Написано 24 августа 2007 года в 19:57


Вова, извини, но ответ дан не совсем полно.

Во-первых, ошибка не в PHP, а в HTML.
Во-вторых, атрибут background — задает фоновый рисунок,в данном случае ячейки (к сожалению не помню в какой версии стандарта HTML это описано). Например:
.
В-третьих, решетка, как ты правильно заметил, в урле используется как якорь. Например:

Теперь ответить на вопрос почему приведенные код грузит страницу два раза совсем просто, для этого достаточно переписать его текст так:

Очевидно, что если empty_url=»» (пустой урл) то браузер автоматически подставит урл текущей страницы.

Так же рекомендую ответить для себя на вопрос почему , тоже загрузит страницу два раза, а уже нет! :-)

 

Evgeny Sergeev     .

Написано 24 августа 2007 года в 20:00


Блин, косяк с кодом на HTML получился :-(
Смысл в том, что <td background=»some_url#tess»< будет грузить текущую страницу повторно (вместо фона!) если some_url будет пустым (по умолчанию браузер подставит текущий location)

 

Жилинcкий Владимир     .

Написано 24 августа 2007 года в 20:00


Ну теги у тебя вырезало (спецсимволы рулят), но я тебя понял =)
Прекрасно понимаю, что ты имел в виду, я просто не стал расписывать это, считая, что все поймут намёк ;-)

 

Evgeny Sergeev     .

Написано 24 августа 2007 года в 20:03


И еще раз, в догонку.

Возможно более понятно будет на таком примере:

>img src=#fff7eb /<

при таком раскладе тоже бы дублировались записи в БД

 

Evgeny Sergeev     .

Написано 24 августа 2007 года в 20:05


Все… Мне пора спать!!! :-))

>img src=#fff7eb /<

Теперь вроде правильно!

 

Evgeny Sergeev     .

Написано 24 августа 2007 года в 20:06


Блин… Опять не правильно… РРРРРРРРРРРРРРРРРРРРР…

<img src=#fff7eb >

Все… Теперь спать… А то после пива у меня уже голова еле варит!

 

Thorn     .

Написано 27 августа 2007 года в 09:36


Очень забавно :) Серьезно )

 

Valentyn Shybanov     .

Написано 27 августа 2007 года в 16:20


Для тех, у кого стало один раз писаться в базу замечу, что броузера могут кэшировать ресурсы, и ресурс «someurl##fff7eb», которая как фон кэшируется броузером и при следующих запросах может не закружатся.

 

Thorn     .

Написано 28 августа 2007 года в 13:57


это понятно )

 

антон     .

Написано 30 августа 2007 года в 23:58


bgcolor — цвет
background — рисунок

в данном случае использовать background для цвета является ошибкой

 

Жилинcкий Владимир     .

Написано 3 сентября 2007 года в 23:24


1. Нет, как в голову взбредёт.
2. Прекратить линк-спам.

 

Андрей     .

Написано 3 сентября 2007 года в 23:20


И этот некорректный код все браузеры обрабатывают одинаково? IE, Opera, Firefox?

 

Евгений     .

Написано 5 сентября 2007 года в 15:28


>Прекратить линк-спам.

Вам не кажется, что это паранойя, своеобразная мания преследования комментаторами :)

Может стоит отключить комментарии :)

 

Жилинcкий Владимир     .

Написано 5 сентября 2007 года в 16:09


Да нет, просто когда человек вместо своего блога пишет какой-нить hentai — bondge — xxx — giperhard porno — паранойя уже уместна =)

 

Евгений     .

Написано 5 сентября 2007 года в 16:23


Ну если так, то конечно.

 

Valentyn Shybanov     .

Написано 5 сентября 2007 года в 16:26


Ну тогда следовало бы конкретней писать о том, к кому имено адресовалось замечание про «линк-спам».
Ибо каждый мог воспринять его на свой счёт.

 

Жилинcкий Владимир     .

Написано 5 сентября 2007 года в 16:29


Ну здесь если всмотреться, то можно заметить древовидную структуру комментариев, а моё сообщение про линк-спам — ответное на сообщение Андрея, именно ему и адресовано.
Не переживайте вы так, может у мну просто настроение было плохое )))

 

farik     .

Написано 10 сентября 2007 года в 14:30


Супер пример, всем начал загадывать, еще никто правильно не ответил.

 

cinic     .

Написано 8 апреля 2008 года в 17:18


А помоему ничего необычного, вы насильно пытаетесь запутать браузер, Валидней верстать и выносить всё оформление в цсс.

Оставить комментарий:

You must be logged in to post a comment.

© 2007-2010 Блог интернет-разработчика, автор — Zhilinsky.ru.
При использовании информации ссылка на источник обязательна.