Кстати, забыл упомянуть (напомнила статья), что вместо вопросов, можно показывать посетителю фотографии или пиктограммы чтобы он написал что на них изображено (звери всякие, например). Это очень эффективный метод, оптимизированные картинки будут весить даже меньше чем картинка с текстом некоторых других капч.
Как вариант, только количество вариантов картинок должно быть достаточно большим и все же стоит контролировать количество неверных попыток.
Кстати, на счет каптчи с вопросами. Я хочу написать для себя именно такую, с элементарными вопросами аля "название планеты", но выводить вопросы не обычным текстом, а на картинке. Таким образом:
1) исключаем ситуацию накопления роботом базы вопросов по сайту
2) заставляем робота думать, что он имеет дело с обычной капчей
3) китайцы и индусы бессильны, против русского языка
Но, правда, вопрос интернализации тут снимается конечно, только русскоговорящая аудитория
Давайте представим ситуацию, когда у вас 16 полей не заполнено, а последнее 17 заполнено, как будет работать Ваш код?
На первых 16 вариантах он выставит $check в false, потому что первые 16 не заполнены. А вот на последнем, 17-ом шаге, $check чудесным образом становиться true, потому как 17 поле то заполнено. И на выходе из цикла мы имеем $check==true и система думает, что заполнены все поля!
if(empty($data[$i])$check=FALSE;//$check это просто флажок для проверки переменной
}
В этом случае получаем, что если хотя бы одно из полей не заполнено, то $check выставиться в false, в случае если поля заполнены все, при прохождении цикла $check никак не измениться и все будет хорошо.
робот распознает код, примерно, в 5-10 попытках из 100
а подробней можно? А то я в своем проекте заиспользовал её как альтернативу recaptcha.
Что бы Вы хотели подробнее узнать?
Распознавание изображений, и текста в том числе, в данный момент времени развито очень слабо. Да, есть алгоритмы распознаваний, но они, отнюдь, не 100% работоспособные.
Механизм большинства спам роботов позволяет распознавать коды с популярных каптч, но верность распознавания составляет лишь 5-6%. То есть при распознавании 100 картинок, верным будет 5-6.
Создаете объект класса, вызываете сначала первый метод, потом второй. Таким образом, функции из скриптов будут объявлены лишь внутри метода, в котором они инклудятся, и конфликта не возникнет. Результат выполнения первого и второго скриптов можно сохранять в свойствах класса - смотрите по ситуации.
- эта в том числе, я пробовал ее в своих проектах.
Но, есть один нюанс: робот распознает код, примерно, в 5-10 попытках из 100. Так что одно из решений можно выделить в следущем:
1) Отслеживать кол-во неверных попыток ввода
2) Отслеживать интервал времени между попытками ввода (робот будет отсылать запросы очень часто. Человеку на переотправку формы требуется минимум секунд 3-5, робот, думаю уложиться во время, меньшее секунды)
3) Не переусердствовать с 1 и 2 пунктами, что бы не страдали реальные пользователи
Это, конечно, не панацея, но количество спама сведет к минимуму.
Все же один из огромных минусов php - это отсутствие типизации и предварительного объявления переменных, от сюда возникает множество ошибок, подобных этой...
Если mysql_error() не возвращает ошибки, значит ее нет => запрос выполняется, но не затрагивает ни одной строки. А значит ни к одной строке не подходит условие WHERE. Попробуйте перед выполнением запроса вывести в браузер переменную $id:
Ничего удивительного в том, что запрос вернул пустой результат. Как одна и та же ячейка таблицы одновременно может равняться 10,15 и 27? В подобном запросе, думаю, уместней будет использовать or, а не and:
Так же можно проверить заголовки посылаемые браузером (в какой кодировке выводится html код страницы). От этого зависит в какой кодировке браузер будет посылать данные методом POST (если это не Ajax конечно, там только UTF-8). Ну и соответственно когда просматриваете файл - проверить установки редактора, через который просматриваете содержимое, на предмет кодировки. Все это должно быть одинаковым.
Либо же можно принудительно конвертировать строки перед записью, например $str=iconv('UTF-8','windows-1251', $str);