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()函数则删除一行。