Colix Опубликовано 20 апреля, 2008 Жалоба Поделиться Опубликовано 20 апреля, 2008 Собственно всё реализовать я не прошу, просто есть такая ситуация: человек подписан на рассылку на сайте, он хочет отписаться, заходит на сайт и на странице подписки вводит свой e-mail, куда затем присылается уведомление о попытке отписки с обычной ссылкой для подтверждения, какую делают при попытках регистрации и т.д. Так вот вопрос в том, как её реализовать эту самую ссылку, а точнее, допустим у меня есть страница unsubsrcibe.php, какие переменные нужно туда передавать для подтверждения? Просто почтовый адрес - не надёжно, значит его надо шифровать, если да, то как? Ссылка на комментарий Поделиться на другие сайты Поделиться
Darhazer Опубликовано 21 апреля, 2008 Жалоба Поделиться Опубликовано 21 апреля, 2008 Генерируеш GUID (уникальний код, в php.net есть примери как сделать), записиваеш его и e-mail в БД, в ссылке соответствено передаеш e-mail и guid P.S. Простейшей GUID - md5(time()); Ссылка на комментарий Поделиться на другие сайты Поделиться
Colix Опубликовано 22 апреля, 2008 Автор Жалоба Поделиться Опубликовано 22 апреля, 2008 Генерируеш GUID (уникальний код, в php.net есть примери как сделать), записиваеш его и e-mail в БД, в ссылке соответствено передаеш e-mail и guid P.S. Простейшей GUID - md5(time()); То есть потом просто сравнить md5 хэши и всё? Так все делают? Ссылка на комментарий Поделиться на другие сайты Поделиться
Darhazer Опубликовано 22 апреля, 2008 Жалоба Поделиться Опубликовано 22 апреля, 2008 Не только хеш, но и 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;}}?> 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Colix Опубликовано 22 апреля, 2008 Автор Жалоба Поделиться Опубликовано 22 апреля, 2008 (изменено) Не только хеш, но и 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 ){//отписиваем} Ничего себе, ты всё написал... Спасибо! Изменено 23 апреля, 2008 пользователем Darhazer Ссылка на комментарий Поделиться на другие сайты Поделиться
Increazon Опубликовано 20 сентября, 2011 Жалоба Поделиться Опубликовано 20 сентября, 2011 Помогло. Использовал саму идею. Правда рандом генератор не такой, вообще без хеш функций :bye1: Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения