Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Как сделать отписку от рассылки?


Рекомендуемые сообщения

Собственно всё реализовать я не прошу, просто есть такая ситуация: человек подписан на рассылку на сайте, он хочет отписаться, заходит на сайт и на странице подписки вводит свой e-mail, куда затем присылается уведомление о попытке отписки с обычной ссылкой для подтверждения, какую делают при попытках регистрации и т.д. Так вот вопрос в том, как её реализовать эту самую ссылку, а точнее, допустим у меня есть страница unsubsrcibe.php, какие переменные нужно туда передавать для подтверждения? Просто почтовый адрес - не надёжно, значит его надо шифровать, если да, то как?

Ссылка на комментарий
Поделиться на другие сайты

Генерируеш GUID (уникальний код, в php.net есть примери как сделать), записиваеш его и e-mail в БД, в ссылке соответствено передаеш e-mail и guid

P.S. Простейшей GUID - md5(time());

Ссылка на комментарий
Поделиться на другие сайты

Генерируеш GUID (уникальний код, в php.net есть примери как сделать), записиваеш его и e-mail в БД, в ссылке соответствено передаеш e-mail и guid

P.S. Простейшей GUID - md5(time());

То есть потом просто сравнить md5 хэши и всё? Так все делают?

Ссылка на комментарий
Поделиться на другие сайты

Не только хеш, но и e-mail

Примерно у нас noabuse@example.com хочеть отписаться

делаем так:

$email = noabuse@example.com;$guid = md5(uniqid(rand(), true)); mysql_query("INSERT INTO `guids`(`email`, `guid`) VALUES(''$email', '$guid')");// генерируем ссилку .php?act=unsubscribe&email=urlencode($email)&guid=$guid;

Потом проверяем

$res = mysql_query("SELECT FROM `guids` WHERE `email` = '$email' AND `guid` = '$guid');if (mysql_num_rows($res) > 0 ){//отписиваем}

Кстате, вот похожий модул, только здесь пользуем логина...

<?if ( !defined("IN_ITL") ){header("Location: http://it-light.net");exit;}function Invite(){//check if inviter have nessesary permissionsif (!isset ($_SESSION['user'] ) ){	$html = '<table border="1" width=80% bordercolor="#000000" background-color="#eeeeee">';	$html .= '<tr><td>Нямате право да използвате тази функция</td></tr>';	$html .= '</table>';	echo $html;	return;}$sql = 'SELECT * FROM ibf_members WHERE id='.$_SESSION['user']->getUserID();$result = DBQuery($sql);if ( ! $result){	inv_db_error();	return;}$row = mysql_fetch_object($result);$available = $row->invites;if ( $row->invites < 1 ){	$html = '<table border="1" width=80% bordercolor="#000000" background-color="#eeeeee">';	$html .= '<tr><td>Нямате свободни покани</td></tr>';	$html .= '</table>';	return;}if (! isset($_SESSION['post']['invite'])){	echo '<form action=dispatcher.php method=post>';	echo '<input type=hidden name=forwardTo value="/index.php?mode=invite">';	echo 'Напишете ника на потребителя, който искате да поканите<br>';	echo '<input type=text name=invite>';	echo '<input type=submit value="Покани">';	return;}// get details for invited person$sql = 'SELECT * FROM ibf_members WHERE name=\''.DBEscape($_SESSION['post']['invite']).'\'';$result = DBQuery($sql);if ( ! $result){	inv_db_error();	return;}$invited = mysql_fetch_object($result);//generate guid$invite = md5(uniqid(time()));$sql = 'INSERT INTO itl_invites(to_id, guid) VALUES ( '.$invited->id.', \''.$invite.'\' ) ';$result = DBQuery($sql);if ( ! $result){	inv_db_error();	return;}//creare the PMsend_pm($_SESSION['user']->getUserID(), $invited->id, $invite, $_SESSION['user']->getUserName(), $invited->name);$i = $available-1;$sql = 'UPDATE ibf_members SET invites='.$i.' WHERE id='.$_SESSION['user']->getUserID();$result = DBQuery($sql);if ( ! $result){	inv_db_error();	return;}$_SESSION['user']->SetInvites($i);unset($_SESSION['post']['invite']);echo "Поканата е изпратена успешно";}function ValidateInvite(){if (!isset ($_SESSION['user'] ) ){	$html = '<table border="1" width=80% bordercolor="#000000" background-color="#eeeeee">';	$html .= '<tr><td>Нямате право да използвате тази функция</td></tr>';	$html .= '</table>';	echo $html;	return;}$invite = $_GET['id'];$sql = 'SELECT * FROM itl_invites WHERE to_id='.$_SESSION['user']->getUserID().' AND guid=\''.$invite.'\'';$result = DBQuery($sql);if ( ! $result){	inv_db_error();	return;}if (mysql_num_rows($result) == 0){	echo "невалидна покана";	return;}$sql = 'UPDATE ibf_members SET mgroup=8 WHERE id='.$_SESSION['user']->getUserID();$result = DBQuery($sql);echo "Честито. Вече сте член на нашия VIP клуб";}function inv_db_error(){echo '<table border="1" width=80% bordercolor="#000000" background-color="#eeeeee">';echo '<tr><td>Грешка при изпълнението на заявката.<br>Моля свържете се с администратора</td></tr>';echo '</table>';}function send_pm( $from, $to, $invite, $name_from, $name_to ){$to = strtolower(str_replace( '|', '|', $to) );$text = $name_to.',<br > '.$name_from.' Ви покани да станете член на VIP клуба на IT Light и да получите достъп до допълнителни ресурси';$text .= '<br > За да приемете поканата, щракнете на този линк: <br >';$text .= '<br > <a href="http://it-light.net/index.php?mode=invite&id='.$invite.'">http://it-light.net/index.php?mode=invite&id='.$invite.'</a>';//-----------------------------------------// Insert the message body//-----------------------------------------$sql = 'INSERT INTO ibf_message_text (msg_date, msg_post,msg_sent_to_count, msg_post_key, msg_author_id)';$sql .= ' VALUES(\''.time().'\', \''.$text.'\', 1, \''.md5($invite).'\', '.$from.')';$result = DBQuery($sql);if ( ! $result){	inv_db_error();	return;}$msg_id = mysql_insert_id();$sql = 'INSERT INTO ibf_message_topics(mt_msg_id, mt_date, mt_title, mt_from_id, mt_to_id, mt_vid_folder, mt_tracking, mt_hasattach, mt_owner_id, mt_hide_cc)';$sql .= ' VALUES('.$msg_id.',\''.time().'\', \'Покана за участие във VIP клуба\', '.$from.','.$to.', \'in\', 0, 0, '.$to.',0)';$result = DBQuery($sql);if ( ! $result){	inv_db_error();	return;}// update inbox count$sql = 'SELECT * FROM ibf_member_extra WHERE id='.$to;$result = DBQuery($sql);if ( ! $result){	echo $sql;	inv_db_error();	return;}$row = mysql_fetch_object($result);$vdir = $row->vdirs;$rebuild = array();foreach( explode( "|", $vdir ) as $dir ){	list ($id  , $data)  = explode( ":", $dir );	list ($real, $count) = explode( ";", $data );	if ( ! $id )	{		continue;	}	if ( $id == 'in' )	{		$count++;	}	$rebuild[$id] = $id.':'.$real.';'.intval($count);}$final = implode( '|', $rebuild );$sql = 'UPDATE ibf_member_extra SET vdirs=\''.$final.'\' WHERE id='.$to;$result = DBQuery($sql);if ( ! $result){	echo $sql;	inv_db_error();	return;}$sql = 'UPDATE ibf_members SET show_popup=1, msg_total=msg_total+1, new_msg=new_msg+1 WHERE id='.$to;$result = DBQuery($sql);if ( ! $result){	echo $sql;	inv_db_error();	return;}}?>
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Не только хеш, но и e-mail

Примерно у нас noabuse@example.com хочеть отписаться

делаем так:

$email = noabuse@example.com;$guid = md5(uniqid(rand(), true)); mysql_query("INSERT INTO `guids`(`email`, `guid`) VALUES(''$email', '$guid')");// генерируем ссилку .php?act=unsubscribe&email=urlencode($email)&guid=$guid;

Потом проверяем

$res = mysql_query("SELECT FROM `guids` WHERE `email` = '$email' AND `guid` = '$guid');if (mysql_num_rows($res) > 0 ){//отписиваем}

Ничего себе, ты всё написал... Спасибо!

Изменено пользователем Darhazer
Ссылка на комментарий
Поделиться на другие сайты

  • 3 года спустя...
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...