Прям хоть на собеседованиях разработчикам предлагай.
Вот этот кусок кода на 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>
Но стоит убрать из td цвет, как все волшебным образом начинает работать правильно.
Утащено отсюда. Но прежде чем смотреть там правильные ответы, попробуйте понять сами.
Вот этот кусок кода на 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>
Но стоит убрать из td цвет, как все волшебным образом начинает работать правильно.
Утащено отсюда. Но прежде чем смотреть там правильные ответы, попробуйте понять сами.
Tags:
no subject
no subject
Дальше понял? :)
no subject
В результате td background=#fff7eb вызывает страницу еще раз с якорем #fff7eb
no subject
no subject
Это задача на банальную наблюдательность. Сам навряд ли опишешься так, а если напишешься, то в реальных условиях баг отловить просто.
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
Браузер-то ждет что ему отдадут урл в атрибуте бекграунд.
no subject
no subject
no subject
no subject
no subject
no subject
no subject
Старею :(
no subject
no subject
То есть: если этот код протоколирует показы страниц, то двойная запись - верное поведение.
Если нет - то двойная запись - неверное поведение ВНЕ зависимости от того, вызвал её неправильный атрибут или релоад в броузере.
no subject
PHP уже давно умеет хранить state в абстракции под названием "сессия". http://www.php.net/manual/en/ref.session.php
Я не знаю точно, чтО имел в виду автор кода, но по-моему, именно протоколирование показов страницы, а не запоминание состояния. Во втором случае был бы какой-нибудь UPDATE или комбинация его с INSERT'ом.
Поведение получилось формально правильное, но не то, которое имелось в виду. Потому что запросов было два, они и посчитались, а показов только один, причем про второй достоверно известно, что его никто никогда увидеть не может :)
no subject
no subject
Так давно не перечитывал мануал?
no subject
no subject
Наша пати до упора
no subject
no subject
no subject