7、源代码
一个简单的PHP在线书签系统
1、需求分析
首先,需要识别每个用户。应该有验证机制。
其次,需要保存单个用户的书签。用户应该能够添加和删除书签。
再次,需要根据对他们的了解,向用户建议他们可能感兴趣的站点。
2、解决方案
2.1 系统流程图
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, deleteon bookmarks.*to [email protected] identified by 'password';
4、实现基本的网站
4.1 login.php
<?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
<?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
<?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
<?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
<?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
<?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.<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 /** * @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) getMessage(); } display_user_menu(); do_html_footer();?>
5.6 forgot_paswd.php
<?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.<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
<?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
<?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 '<p>You have not chosen any bookmarks to delete.<br>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) .'.<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 /** * @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、源代码
下载地址
版权声明:本文为博主原创文章,未经博主允许不得转载。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP在数据库操作和服务器端逻辑处理中使用MySQLi和PDO扩展进行数据库交互,并通过会话管理等功能处理服务器端逻辑。1)使用MySQLi或PDO连接数据库,执行SQL查询。2)通过会话管理等功能处理HTTP请求和用户状态。3)使用事务确保数据库操作的原子性。4)防止SQL注入,使用异常处理和关闭连接来调试。5)通过索引和缓存优化性能,编写可读性高的代码并进行错误处理。

PHP用于构建动态网站,其核心功能包括:1.生成动态内容,通过与数据库对接实时生成网页;2.处理用户交互和表单提交,验证输入并响应操作;3.管理会话和用户认证,提供个性化体验;4.优化性能和遵循最佳实践,提升网站效率和安全性。

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

PHP的核心优势包括易于学习、强大的web开发支持、丰富的库和框架、高性能和可扩展性、跨平台兼容性以及成本效益高。1)易于学习和使用,适合初学者;2)与web服务器集成好,支持多种数据库;3)拥有如Laravel等强大框架;4)通过优化可实现高性能;5)支持多种操作系统;6)开源,降低开发成本。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip
