在实现了与用户账户相关的功能后,现在,我们开始讨论如何保存、检索和删除书签。
27.6.1 添加书签
用户点击用户菜单上的"Add BM"链接可以添加书签。该链接将用户带到如图27-9所示的页面。
图 27-9 add_bm_form.php脚本将提供一个表单,用户在此可以将书签添加到他们的书签页中同样,由于这段脚本也是非常简单的,并且只调用了一些输出函数,因此,我们也不深入讨论。当表单被提交的时候,系统调用add_bms.php脚本,该脚本如程序清单27-21所示。
程序清单27-21 add_bms.php——该脚本添加新书签到用户的个人页面
<?php
require_once('bookmark_fns.php');
session_start;
//create short variable name
$new_url=$_POST['new_url'];
do_html_header('Adding bookmarks');
try{
check_valid_user;
if(!filled_out($_POST)){
throw new Exception('Form not completely filled out.');
}
//check URL format
if(strstr($new_url,'http://')===false){
$new_url='http://'.$new_url;
}
//check URL is valid
if(!(@fopen($new_url,'r'))){
throw new Exception('Not a valid URL.');
}
//try to add bm
add_bm($new_url);
echo'Bookmark added.';
//get the bookmarks this user has saved
if($url_array=get_user_urls($_SESSION['valid_user'])){
display_user_urls($url_array);
}
}
catch(Exception$e){
echo$e->getMessage;
}
display_user_menu;
do_html_footer;
?>
这段脚本也遵循了验证、数据库输入和输出的模式。
要验证用户身份,我们应该首先调用filled_out函数检查该用户是否完全填写表单。然后,再执行两项检查URL的操作。首先,调用strstr函数,检查URL是否以http://开头。如果不是,我们就将其添加到URL的开头。完成此操作后,就可确切地检查该URL是否存在。回顾一下第20章“使用网络函数和协议函数”,我们可以调用fopen函数打开一个以http://开头的URL。如果可以打开这个文件,就假定该URL是有效的,并调用add_bm函数将其添加到数据库中。
本函数和其他与书签相关的函数都保存在函数库url_fns.php中。程序清单27-22显示了add_bm函数的代码。
程序清单27-22 url_fns.php文件中的add_bm函数——该函数将用户提交的新书签添加到数据库中
<?php
require_once('bookmark_fns.php');
session_start;
//create short variable name
$new_url=$_POST['new_url'];
do_html_header('Adding bookmarks');
try{
check_valid_user;
if(!filled_out($_POST)){
throw new Exception('Form not completely filled out.');
}
//check URL format
if(strstr($new_url,'http://')===false){
$new_url='http://'.$new_url;
}
//check URL is valid
if(!(@fopen($new_url,'r'))){
throw new Exception('Not a valid URL.');
}
//try to add bm
add_bm($new_url);
echo'Bookmark added.';
//get the bookmarks this user has saved
if($url_array=get_user_urls($_SESSION['valid_user'])){
display_user_urls($url_array);
}
}
catch(Exception$e){
echo$e->getMessage;
}
display_user_menu;
do_html_footer;
?>
该函数也很简单。它检查用户是否在数据库中已经有了该书签(尽管他们不可能两次输入同一个书签,但很可能要更新该页)。如果书签是新的,它就被添加到数据库中。
回头看看add_bm.php函数库,可以看出,它最后执行的操作是调用get_user_urls函数和display_user_urls函数,这与member.php是相同的。我们将在接下来的内容中继续讨论这些函数。