Страница 1 из 1

Задача для HTML кодеров и PHP програмистов

Добавлено: Вт ноя 27, 2007 20:50
Unknown
Есть данный код (в HTML/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>
Дам семизнак тому кто первый догадается. Контест типо :gg:

Добавлено: Ср ноя 28, 2007 02:18
Злобный
чтобы запись добавилась дважды, твой код должен дважды выполниться, что означает, что или он дважды находится на странице (или находится внутри тела цикла), или страница дважды рендерится. в общем случае такого не произойдет, должны быть какие-то дополнительные условия для возникновения подобной ситуации.

[off]дисклэймер: пхп я в глаза не видел. если то, что я вижу, сильно отличается по логике работы от классического асп, то запрошую пардону.[/off]

Добавлено: Ср ноя 28, 2007 09:44
Weekers
Ничего тут дважды не добавляется.

Добавлено: Ср ноя 28, 2007 10:21
vivk
тоже ничего не увидел, автор в чем <a href=https://bugaga.ru/jokes/ target=_blank>прикол</a>??? )))


единственно что может быть, код в таблице, если в таблице поставить

Код: Выделить всё

<table border=1>
   <tr border=1>
...
то увидем 2 рамки, так же и код может выполнятса 2 раза, но проверять лень.

Добавлено: Ср ноя 28, 2007 12:07
ZorroGFS
vivk, садись, два.
долго и внимательно курить схему клиент-сервер, дабы выяснить где работает пхп, а где отображается хтмл.

Unknown,
в приведённом примере, кроме бессмысленности помещения инсерта в <табле> и дурного тона смешивания пхп с вывобом, ошибки, приводящий к двойной вставки данных в таблицу, нет.

Добавлено: Ср ноя 28, 2007 12:22
Weekers
ZorroGFS,
Точно подметил.

Добавлено: Ср ноя 28, 2007 13:00
vivk
ZorroGFS,
я же написал что невижу тут 2 вставки.
написал бы чел
<?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')"); ?>
вопросов не возникло бы, но не зря же он таблицу приплел, ошибка может быть связанна только с ней.
Вопрос в следующем еще, в каком браузере собственно это происходит? Может это какойто хитрый браузер который во время прорисовки таблицы выполняет 2 раза ее содержимое.

Добавлено: Ср ноя 28, 2007 13:08
Weekers
vivk,
Браузер ничего вставить не может. Браузер даже не получит строку <?php... ?>.

Добавлено: Ср ноя 28, 2007 13:26
vivk
Weekers,
мда, верно

хотелось бы тогда от автора узнать ответ

Добавлено: Ср ноя 28, 2007 13:29
ZorroGFS
Weekers, именно.


vivk, я тебе для этого и советовал всё ж таки почитать как и где работает пхп, а как и где браузер, и разобраться, что начиная со слов "какой-то хитрый браузер" ты сказал полную чушь.

Добавлено: Ср ноя 28, 2007 13:35
Weekers
Ждём афтара с объяснениями. :)

Добавлено: Ср ноя 28, 2007 16:14
Unknown
Решение задачи: Программист перепутал атрибуты background и bgсolor. В результате td background=#fff7eb вызывает страницу еще раз с якорем #fff7eb, а страница добавляет ещё одну запись в базу. Aтрибут background - задает фоновый рисунок, в данном случае ячейки...

Имхо, шикарный пример ошибки, возникшей на грани HTML и PHP.

Добавлено: Ср ноя 28, 2007 16:33
Weekers
Unknown,
Надо было указать и браузер тогда.
Не думаю, что все браузеры одинаково обрабатывают HTML.

Добавлено: Ср ноя 28, 2007 19:38
ZorroGFS
Unknown, в опере не работает :)
но подловил, признаю. с другой стороны это пример как плохо написанный код усложняет жизнь. ведь если бы вёрстка выполнялась бы отдельно от рабочего кода и использовала бы цсс то такой бы ошибки и не возникло :)

Добавлено: Пт фев 27, 2009 23:06
AnryFlame
Для таких задачи, вобщето существую автоматизированные клиенты обрабатывающие код! Пиши-ка товарищь, код в Adobe Dreamviewer CS 3 ! или в Php-Rapid. Довольно качественные программы,для обработки кода. И таких ошибок почти не будет.