Участник получает член: начисление очков - PullRequest
0 голосов
/ 20 апреля 2011

На моем сайте есть кнопка «Рекомендовать другу». Чтобы побудить людей использовать эту функциональность, я хочу наградить тех, кто ее использует, баллами (баллы будут погашены за призы ... пока не знаю).

Хорошо, у меня есть такая структура:

form.php

Здесь вы можете ввести адрес электронной почты вашего друга и сообщение ему / ей, если хотите. Также есть скрытый ввод, который будет отправлять ваш идентификатор пользователя в action.php.

action.php

- это то, где phpmailer использует магию и ваше сообщение, если таковое имеется, и вашему другу отправляется ссылка «посетить мой сайт» (ссылка на process.php на моем сайте, содержащая ваш идентификатор пользователя).

Ваш друг нажимает на ссылку и посещает process.php

Этот файл соединяется с моей таблицей базы данных MySQL, выбирает баллы, которые имеет отправленный идентификатор пользователя, добавляет еще 10 баллов за рекомендацию друга и вставляет финальные баллы обратно в таблицу. Тогда есть:

header("Location: http://www.mysite.com");

так что ваш друг не видит, как работает process.php.

Все отлично работает, но для: если ваш друг продолжает нажимать на ссылку, он / она будет бесконечно зарабатывать очки.

Как я могу это исправить?

Спасибо за тонну!

Ответы [ 3 ]

1 голос
/ 20 апреля 2011

Создайте уникальный токен для каждого отправляемого вами электронного письма и включите его в URL / ссылку внутри электронного письма.Также сохраните все токены в таблице базы данных.Когда кто-то нажимает на ссылку и посещает ваш сайт, найдите этот токен и отметьте его как посещенный.Добавляйте только 10 баллов, когда токен не был помечен как посещенный.

0 голосов
/ 20 апреля 2011

Мой предпочтительный способ заставить процесс происходить только один раз, когда они нажимают на ссылку в электронном письме, это иметь таблицу вроде:

CREATE TABLE friends (
   id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   hash VARCHAR(100),
   active TINYINT(1) DEFAULT 1,
   [user id's or other associative fields you want]
) TYPE=innodb;

затем, когда я сгенерирую URL для электронной почты, я добавлю хеш в конец так:

http://my.url.com/process.php?hash=[hash]

и сохраняю хэш и относительную информацию в базе данных, затем, когда они нажимают на ссылку, я использую хеш, чтобы получить идентификаторы пользователя и выполнить любую обработку и изменить ее с 1 на 0.

В следующий раз, когда они нажмут на ссылку, вы нажмете на запись, и если для параметра active установлено значение 0, вы просто вернетесь на страницу с надписью « У вас уже есть очки, которые вы обманули » :) или что-то в этом роде более профессионально (Я всегда хотел вызывать людей, но силы, которые будут всегда, останавливают меня)

Дайте мне знать, если вам нужны дальнейшие объяснения:)

0 голосов
/ 20 апреля 2011

Вы можете сохранить IP или SessionID в файле (возможно, в базе данных) и проверять каждый раз, когда кто-то голосует.

Если вы сохраните SessionID, они смогут снова голосовать, когда снова открывают браузер. Если вы сохраните IP-адрес, они смогут снова голосовать при изменении IP-адреса, в зависимости от того, что подходит вашему приложению.

Вот как бы я это сделал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...