
2.2 PHPbookmark中的文件列表

3、实现数据库
create database bookmarks; use bookmarks;create table user (username varchar(16) primary key,passwd char(40) not null,email varchar(100) not null );create table bookmark (username varchar(16) not null,bm_URL varchar(255) not null,index (username),index (bm_URL) );grant select, insert, update, delete on bookmarks.* to bm_user@localhost identified by "password";4、实现基本的网站
<?php/*** 包含系统登录表单的页面*/ //require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。 require_once("bookmark_fns.php");//应用程序的包含文件集合do_html_header(""); //HTML标题display_site_info();//HTML站点信息 display_login_form();//HTML登录信息do_html_footer();//HTML页脚 ?>4.2 bookmark_fns.php
<?php/*** 应用程序的包含文件集合*/ //require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。 require_once("data_valid_fns.php"); //确认用户输入数据有效的函数 require_once("db_fns.php"); // 连接数据库的函数 require_once("user_auth_fns.php"); //用户身份验证的函数 require_once("output_fns.php"); //以HTML形式格式化输出的函数 require_once("url_fns.php");//增加和删除书签的函数 ?>5、实现用户身份验证
<?php/*** 系统中用户注册表单*/ //require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。 require_once("bookmark_fns.php"); do_html_header("User Registration");//HTML标题display_registeration_form();//输出注册表单do_html_footer();//HTML页脚 ?>5.2 register_new.php
<?php/*** 处理新注册信息的脚本*/ //require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。 require_once("bookmark_fns.php");//创建变量 $email = $_POST["email"]; $username = $_POST["username"]; $passwd = $_POST["passwd"]; $passwd2 = $_POST["passwd2"];//开启会话 session_start();try { //检查表单是否填写满 if(!filled_out($_POST)) { throw new exception("You have not filled the form out correctly - please go back and try again."); }//检查邮件地址是否有效 if(!valid_email($email)) { throw new exception("That is not a vald email address. Please go back try again."); }//检查两次输入密码是否相同 if($passwd != $passwd2) { throw new exception("The passwords you entered do not match - please go back try again."); }//检查密码长度是否合格 if((strlen($passwd) < 6) || (strlen($passwd) > 16)) { throw new exception("Your password must be between 6 and 16 characters Please go back and try again."); }//尝试注册 register($username,$email,$passwd);//注册会话变量 $_SESSION["valid_user"] = $username;//提供成员页面链接 do_html_header("Registration successful"); //HTML标题 echo "Your registration was successful.Go to the members page to start setting up your bookmarks!"; //输出URL do_html_URL("member.php","Go to members page"); //HTML页脚 do_html_footer();//HTML页脚 } catch(exception $e) { do_html_header("Problem:"); echo $e->getMessage(); do_html_footer(); exit; } ?> 5.3 member.php<?php/*** 用户的主页面,包含该用户所有的当前书签*/ //require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。 require_once("bookmark_fns.php"); session_start();//创建变量 $username = @$_POST["username"]; $passwd = @$_POST["passwd"];if($username && $passwd) { try { login($username,$passwd); //如果该用户在数据库中,则注册会话变量 $_SESSION["valid_user"] = $username; } catch(exception $e) { //登录不成功 do_html_header("Problem:"); echo "You could not be logged in. You must be logged in to view this page."; do_html_URL("login.php","Login"); do_html_footer(); exit; } }do_html_header("Home"); check_valid_user();//获取用户的书签 if($url_array = get_user_urls($_SESSION["valid_user"])) display_user_urls($url_array); //获取用户菜单选项 display_user_menu();do_html_footer(); ?> 5.4 logout.php<?php/*** 将用户注销的脚本*/ //require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。 require_once("bookmark_fns.php"); session_start(); $old_user = $_SESSION["valid_user"];//注销会话变量 unset($_SESSION["valid_user"]); $result_dest = session_destroy();do_html_header("Logging Out");if(!empty($old_user)) { if($result_dest)//登出成功 { echo "Logged out.<br />"; do_html_URL("login.php","Login"); } else//不成功 { echo "Could not log you out.<br />"; } } else { echo "You were not logged in, and so have not been logged ot.<br />"; do_html_URL("login.php","Login"); } do_html_footer(); ?> 5.5 change_passwd.php<?php/*** 修改数据库中用户密码的表单*/ //require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。 require_once("bookmark_fns.php"); session_start(); do_html_header("Changing password");//创建变量 $old_passwd = $_POST["old_passwd"]; $new_passwd = $_POST["new_passwd"]; $new_passwd2 = $_POST["new_passwd2"];try { check_valid_user(); if(!filled_out($_POST)) throw new exception("You have not filled out the form completely.Please try again.");if($new_passwd != $new_passwd2) throw new exception("Passwords entered were not the same. Not changed.");if((strlen($new_passwd) > 16) || (strlen($new_passwd) < 6)) { throw new exception("New password must be between 6 and 16 characters. Try again."); }//尝试修改 change_password($_SESSION["valid_user"],$old_passwd,$new_passwd); echo "Password changed."; } catch(exception $e) { echo $e ->getMessage(); } display_user_menu(); do_html_footer(); ?> 5.6 forgot_paswd.php<?php/*** 重新设置遗忘密码的脚本*/ //require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。 require_once("bookmark_fns.php"); do_html_header("Resetting password");//创建变量 $username = $_POST["username"];try { $passwd = reset_password($username); notify_password($username,$passwd); echo "Your new password has been emailed to you.<br />"; } catch(exception $e) { echo "Your password could not be reset - please try again later."; } do_html_URL("login.php","Login"); do_html_footer(); ?> 6、实现书签的存储和检索<?php/*** 添加书签的表单*/ //require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。 require_once("bookmark_fns.php"); session_start();//创建变量 $new_url = $_POST["new_url"];do_html_header("Adding bookmarks");try { check_valid_user(); //检查用户有效性 if(!filled_out($new_url))//检查表单是否填写 throw new exception("Form not completely filled out."); if(strstr($new_url,"http://") === false) $new_url = "http://". $new_url; if(!(@fopen($new_url,"r"))) //可以调用fopen()函数打开URL,如果能打开这个文件,则假定URL是有效的 throw new exception("Not a valid URL."); add_bm($new_url);//将URL添加到数据库中 echo "Bookmark added."; 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(); ?> 6.2 delete_bms.php<?php/*** 从用户的书签列表中删除选定书签的脚本呢*/ //require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。 require_once("bookmark_fns.php"); session_start();//创建变量 $del_me = @$_POST["del_me"]; $valid_user = $_SESSION["valid_user"];do_html_header("Deleting bookmarks"); check_valid_user();if(!filled_out($del_me))// { echo "<p>You have not chosen any bookmarks to delete.<br />Please try again.</p>"; display_user_menu(); do_html_footer(); exit; } else { if(count($del_me) > 0) { foreach($del_me as $url) { if(delete_bm($valid_user,$url)) { echo "Deleted ". htmlspecialchars($url) .".<br />"; } else { echo "Could not delete ". htmlspecialchars($url) .".<br />"; } } } else { echo "No bookmarks selected for deletion"; } } if($url_array = get_user_urls($valid_user)) { display_user_urls($url_array); } display_user_menu(); do_html_footer(); ?> 6.3 recommend.php<?php/*** 基于用户以前的操作,推荐用户可能感兴趣的书签*/ //require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。 require_once("bookmark_fns.php"); session_start(); do_html_header("Recommending URLs"); try { check_valid_user(); $urls = recommend_urls($_SESSION["valid_user"]); display_recommended_urls($urls); } catch(exception $e) { echo $e ->getMessage(); } display_user_menu(); do_html_footer(); ?> 以上就是PHP在线书签系统的详细代码,希望对大家的学习有所帮助。