Вот блин. Не могу найти исходник, но когда-то делал защиту без капчи. Кое-как работала. Идея такая - ловим бота, видя что:
- нет куков (страница, показавшая форму ставит куку, а принявшая данные - проверяет)
- нет HTTP_REFERER, или реферер явно левый
- нет HTTP_USER_AGENT
- нет JavaScript (генерим на JS лишнее hidden-поле)
- отключена графика (показываем 1px-картинку, которая отдается скриптом и записывает запросивший айпишник)
- в сообщении - только латиница, куски HTML- или BB-кода
По комбинации принимаем решение, не нра - показываем капчу, не попал в капчу - блокируем.
Палю тему: для разработки сателлитов удобнее VPS + одна БД на всю пачку + один экземпляр движка на весь хост (цепляется симлинком). И, разумеется, одна админка. В минимальном виде пишется за 2 дня. В расширенном - 2 года, и конца-края пока не видно :)
Судя по "boolean given", $this->connection_id устанавливается в false, т.е. скриптя не может подключиться к БД. Оттуда и копайте.
P.S. Пожалуйста, проверяйте сообщения spell checker'ом ;)
На самом деле, первоначальное значение и так хранится. Думаю, что это нужно в первую очередь для работы кнопки Reset, которая эти значения восстанавливает.
Для полей input[@type = 'text' or @type = 'password'] и textarea - см. свойство defaultValue, для input[@type = 'radio' or @type = 'checkbox'] - defaultChecked. С select хитрее - сохраняется свойство defaultSelected для каждого option, поэтому их приходится оббегать циклом.
При этом для обычных (не-multiple) селектов есть такая засада: если ни у одного option не установлен атрибут selected (т.е. значение не выбрано) - первому option выставляется свойство selected = true, что в некотором смысле логично. Я придумал, что можно обходить все option-ы, и, если выбран первый и ни у одного другого нет свойства defaultSelected == true - решать, что значение не изменилось. Возможно, будет шустрее работать, если сразу после загрузки формы сохранять для select'ов первоначальные значения.
Вот тут можно посмотреть пример, а заодно сообщить мне, работает ли оно в IE7 :)
В версии 2.2.2, с которой я в последний раз работал, все такие вещи делались в шаблонах. Шаблоны лежат в БД и правятся из админки. В процессе редактирования шаблонов нужно обильно посылать проклятья в адрес того, кто это придумал :) И еще, чтоб найти, в каком шаблоне лежит тот или иной кусок HTML-кода - удобно пользоваться поиском по `ibf_skin_templates` в phpMyAdmin, хотя в новых версиях может и сделали поиск по шаблонам.
$domain = 'google.com';$text = preg_replace("/<a[^>]+href=['\"]?http:\/\/(?!$domain|\w+\.$domain)[^>]*>.*?<\/a>/is",'',$text);
Так?
Но с preg_replace_callback кошерней :)\
P.S. Ура!! Тысячный пост :)
Sauce, Москва - желательно, но не обязательно. Если получится наладить быстрый фидбек - хоть Руанда или Конго, я ж не из патриотизма про Москву написал :) Присылайте работы, посмотрим.
m&m, разъясните, пожалуйста, чем они так разительно отличаются, что их даже нельзя сравнивать :) Вроде и на том, и на другом кодить можно, и даже примерно одинакового функционала приложения. Или Вы так, к словам придраться?
Я бы выбрал PHP - как минимум, не будет проблем с поддержкой, если спец свалит. Кроме того, проще найти консультантов для оценки качества кода (если Вы такое практикуете).
UPD:
m&m, полистал вики - может Вы и правы. Почему-то всегда думал, что ASP - это типа C# под веб :)
Предлагаю организовать профсоюз программистов, с целью регулировать цены на пиво ;)
А пусть они исходники ослика в открытый доступ выложат. Посмотрим, какие циферьки получатся :)