本文为大家分享了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在线书签系统的详细代码,希望对大家的学习有所帮助。