30.6.4 订阅与取消订阅
在图30-7所示的邮件列表中,每个邮件列表都有一个按钮可供用户订阅。与此类似,如果用户选择"Show My Lists"选项查看已经订阅的邮件列表,他们将看到在每个邮件列表后面都有一个"Unsubscribe"按钮。
这些按钮可以触发订阅或取消订阅的动作,这两个动作分别触发下面两段代码:
case'subscribe':
subscribe(get_email(),$_GET['id']);
display_items('Subscribed Lists',
get_subscribed_lists(get_email()),
'information','show-archive','unsubscribe');
break;
case'unsubscribe':
unsubscribe(get_email(),$_GET['id']);
display_items('Subscribed Lists',
get_subscribed_lists(get_email()),
'information','show-archive','unsubscribe');
break;
在每一种情况中,我们都将调用一个函数(subscribe()或unsubscribe())并调用display_items()函数重新显示该用户订阅的邮件列表。
subscribe()和unsubscribe()函数如程序清单30-12所示。
程序清单30-12 mlm_fns.php函数库中的subscribe()和unsubscribe()函数——这些函数可以为一个用户增加或删除邮件列表的订阅
//subscribe this email address to this list
function subscribe($email,$listid){
if((!$email)||(!$listid)||(!list_exists($listid))
||(!subscriber_exists($email))){
return false;
}
//if already subscribed exit
if(subscribed($email,$listid)){
return false;
}
if(!($conn=db_connect())){
return false;
}
$query="insert into sub_lists values('".$email."',$listid)";
$result=$conn->query($query);
return$result;
}
//unsubscribe this email address from this list
function unsubscribe($email,$listid){
if((!$email)||(!$listid)){
return false;
}
if(!($conn=db_connect())){
return false;
}
$query="delete from sub_lists where email='".$email."'and
listid='".$listid."'";
$result=$conn->query($query);
return$result;
}
subscribe()函数将在对应的sub_lists表中增加一行;而unsubscribe()函数则删除一行。