PHP页签,一个容易的PHP在线书签系统

一个简单的PHP在线书签系统

1、需求分析

首先,需要识别每个用户。应该有验证机制。

其次,需要保存单个用户的书签。用户应该能够添加和删除书签。

再次,需要根据对他们的了解,向用户建议他们可能感兴趣的站点。

2、解决方案

2.1 系统流程图

145656505.jpg

2.2 PHPbookmark中的文件列表

文件名

描述

bookmarks.sql

创建PHPbookmark的数据库SQL语句

login.php

包含系统登录表单的页面

register_form.php

系统中用户注册表单

register_new.php

处理新注册信息的脚本

forgot_form.php

用户忘记密码后需要填写的表单

forgot_passwd.php

重新设置遗忘密码的脚本

member.php

用户的主页面,包含该用户所有的当前书签

add_bm_form.php

添加书签的表单

add_bms.php

将书签真正添加到数据库中的脚本

delete_bms.php

从用户的书签列表中删除选定书签的脚本呢

recommend.php

基于用户以前的操作,推荐用户可能感兴趣的书签

change_passwd_form.php

用户修改密码时要填写的表单

change_passwd.php

修改数据库中用户密码的表单

logout.php

将用户注销的脚本

bookmark_fns.php

应用程序的包含文件集合

data_valid_fns.php

确认用户输入数据有效的函数

db_fns.php

连接数据库的函数

user_auth_fns.php

用户身份验证的函数

url_fns.php

增加和删除书签的函数

output_fns.php

以HTML形式格式化输出的函数

bookmark.gif

PHPbookmark的logo图标

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、实现基本的网站

4.1 login.php

/**

* @author switch

* @copyright 2015

* 包含系统登录表单的页面

*/

//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

/**

* @author switch

* @copyright 2015

* 应用程序的包含文件集合

*/

//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、实现用户身份验证

5.1 register_form.php

/**

* @author switch

* @copyright 2015

* 系统中用户注册表单

*/

//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

/**

* @author switch

* @copyright 2015

* 处理新注册信息的脚本

*/

//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

/**

* @author switch

* @copyright 2015

* 用户的主页面,包含该用户所有的当前书签

*/

//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

/**

* @author switch

* @copyright 2015

* 将用户注销的脚本

*/

//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.
';

do_html_URL('login.php','Login');

}

else //不成功

{

echo 'Could not log you out.
';

}

}

else

{

echo 'You were not logged in, and so have not been logged ot.
';

do_html_URL('login.php','Login');

}

do_html_footer();

?>

5.5 change_passwd.php

/**

* @author switch

* @copyright 2015

* 修改数据库中用户密码的表单

*/

//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

/**

* @author switch

* @copyright 2015

* 重新设置遗忘密码的脚本

*/

//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.
';

}

catch(exception $e)

{

echo 'Your password could not be reset - please try again later.';

}

do_html_URL('login.php','Login');

do_html_footer();

?>

6、实现书签的存储和检索

6.1 add_bms.php

/**

* @author switch

* @copyright 2015

* 添加书签的表单

*/

//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

/**

* @author switch

* @copyright 2015

* 从用户的书签列表中删除选定书签的脚本呢

*/

//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 '

You have not chosen any bookmarks to delete.
Please try again.

';

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) .'.
';

}

else

{

echo 'Could not delete '. htmlspecialchars($url) .'.
';

}

}

}

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

/**

* @author switch

* @copyright 2015

* 基于用户以前的操作,推荐用户可能感兴趣的书签

*/

//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();

?>

7、源代码

下载地址

版权声明:本文为博主原创文章,未经博主允许不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值