#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. Не система голосования, а система «пригласи друга»