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

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

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

© 2007-2026 Блог разработчика, страница об авторе.