Еще, потом (после того, как с этим разберешся), почитай вот это:
(что бы не давать ссылку на свою страницу, пишу здесь):
Защита от накрутки "массовых" голосований и счетчиков
Вариант один - это куки. Но это не выход. Отключить их очень несложно, и тогда это уже не поможет.
Запоминать IP - тоже не надежно, но все-таки более реально.
Как я понимаю, "небольшой скриптик" не является супер-навороченым проектом, который необходимо защищать от накрутки, как счет в ЦБ РФ...
Тогда есть три варианта решения:
1) Отслеживать IP
2) Писать Куки
3) И то и другое.
Как я понимаю, этот скрипт пойдет в массовое пользование. Если так, то применение MySQL для такой несложной задачи неприемлемо.
Тогда остаются текстовые файлы.
Но обо всем по порядку:
Если есть MySQL:
просто создаем таблицу с тремя полями:
IP | SID | IDTEEM
Где:
IP - ip-адрес голосующего
SID - может быть и не SID, но любое число, унифицирующее юзера, которое хранится в сессии.
IDTEEM - Id того голосования, за которое голосовал.
Далее при попытке голосования, запрашиваем в базе:
Сначала IP и IDTEEM, и если результат нулевой (ноль записей),
то запрашиваем SID и IDTEEM.
Если и здесь результат нулевой, значит:
а) пользователь и вправду впервые голосует
б) пользователь очень хочет Вас обмануть, и ничего Вам не поможет :-)
Далее принимаем голосование, и ставим ему в броузер SID, и в базе сохраняем SID и IP.
Как же работать с текстовыми файлами?
А элементарно:
Для каждой темы голосования создаем 2 своих текстовых файла. Назовем их, скажем
"ip".$IDTEEM.dat (ip1.dat) и "SID".$IDTEEM.dat.
Получаются пары, вроде:
ip1.dat sid1.dat - файлы с ip и sid первого голосования
ip2.dat sid2.dat - файлы с ip и sid Второго голосования и т.д.
При заходе просто перебираем файл с IP и SID данного голосования построчно (file()), и preg\'ом ищем совпадения.
Если нашли, то юзер уже голосовал. Если нет - то нет...
Естественно, это вариант с файлами не годится для сайтов с посещением 1000 человек в день...
Но нагрузку, голосов в 500-1000 на голосование он, думаю, потянет...