本文为大家分享了PHP在线书签系统,感兴趣的小伙伴们可以参考一下
1、需求分析
首先,需要识别每个用户。应该有验证机制。
其次,需要保存单个用户的书签。用户应该能够添加和删除书签。
再次,需要根据对他们的了解,向用户建议他们可能感兴趣的站点。
2、解决方案
2.1 系统流程图
2.2 PHPbookmark中的文件列表
3、实现数据库
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?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
1
|
2
3
4
5
6
7
8
9
10
11
12
|
<?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、实现用户身份验证
5.1 register_form.php
1
|
2
3
4
5
6
7
8
9
10
11
12
13
|
<?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
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
<?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
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<?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
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<?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
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<?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
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<?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、实现书签的存储和检索
6.1 add_bms.php
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<?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
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
<?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
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<?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在线书签系统的详细代码,希望对大家的学习有所帮助。