Adiost
@Adiost

Проблемы с кодировкой при запросе данных из MySQL БД; блокировка IP

Добрый вечер, хабрагоспода!

Возникли у меня две проблемы.
Первая заключается в том, что в настройках таблицы какую я только кодировку не выставлял, а все равно знаки вопроса вместо кириллицы. Сам PHP-скрипт, выполняющий запрос обладает кодировкой Unicode UTF-8. В чем может быть проблема, как решить?

Вторая проблема заключается в необходимости запретить выполнять повторно один и тот же PHP-скрипт с таким же Post-запросом с одного IP. Как это лучше всего реализовать? Мне кажется, что заносить в БД IP абсолютно нерентабельно и вообще это лишняя нагрузка на сервер. Есть идеи?

Заранее искренне благодарю, господа!
  • Вопрос задан
  • 5405 просмотров
Пригласить эксперта
Ответы на вопрос 3
xaker1
@xaker1
По поводу кодировки:
mysql_query(«SET NAMES utf8»);
mysql_query(«SET COLLATION_CONNECTION=utf8_bin»);

По второй проблеме, мб механизм сессий использовать? Проверяем наличие флага — если есть, то отключаем скрипт. Если нету — создаем и работаем дальше. Правда подойдет только для реальных пользователей, браузеры которых сохраняют куки.
Ответ написан
slang
@slang
Чтобы защититься от повторных постов на тот же адрес от клиента с тем же айпи слепите из них мд5 какой-нить:
md5($_POST . $_SERVER['REMOTE_ADDR'] . __FILE__);//по хорошему тут URI нужен а не __FILE__
И в базу его. При следующих постах проверяйте. Также можно штамп времени добавить и периодически старые обнулять (чтобы база не раздулась). Нерентабельности тут нет, разве что только метод решения выбран неверно (например вы таким макаром защищаетесь от нечаянного даблклика по сабмиту).

По кодировке выше камент оставил.
Ответ написан
Комментировать
что бы не делать лишний запрос SET NAMES 'utf9' COLLATE 'utf8_unicode_ci', в файле my.cnf в секции [mysqld] можно добавить строчку init_connect='SET NAMES utf8' (насколько помню до версии мускула 4.1 было init-connect)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы