November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Wednesday, August 22nd, 2007 02:58 pm
Прям хоть на собеседованиях разработчикам предлагай.
Вот этот кусок кода на 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 цвет, как все волшебным образом начинает работать правильно.

Утащено отсюда. Но прежде чем смотреть там правильные ответы, попробуйте понять сами.
Thursday, August 23rd, 2007 06:52 am (UTC)
Дим, язык _не принципиален_. Не то, чтобы я очень любил PHP, но в данном случае ты на него наехал не по делу. Это могло быть написано на перле, ASP, JSP, чистой джаве, ColdFusion и на любом другом серверном языке. С тем же результатом.

PHP уже давно умеет хранить state в абстракции под названием "сессия". http://www.php.net/manual/en/ref.session.php

Я не знаю точно, чтО имел в виду автор кода, но по-моему, именно протоколирование показов страницы, а не запоминание состояния. Во втором случае был бы какой-нибудь UPDATE или комбинация его с INSERT'ом.
Поведение получилось формально правильное, но не то, которое имелось в виду. Потому что запросов было два, они и посчитались, а показов только один, причем про второй достоверно известно, что его никто никогда увидеть не может :)
Friday, August 24th, 2007 06:44 am (UTC)
Ну - может. Без знания более общей картины, конечно, трудно разобраться.