Участник получает членство: начисление баллов

#php #mysql #ajax #email

#php #mysql #ajax #Адрес электронной почты

Вопрос:

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

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

form.php

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

action.php

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

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

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

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

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

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

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

Огромное спасибо!

Комментарии:

1. Вы имеете в виду прикрепление хэша к URL-адресу, а затем сохранение этого хэша в таблице и пометку его как завершенного по завершении обработки? что-то вроде этого?

Ответ №1:

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

Ответ №2:

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

 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]
  

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

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

Дайте мне знать, если вам нужны дополнительные пояснения 🙂

Ответ №3:

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

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

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

Комментарии:

1. Не система голосования, а система «пригласи друга»