PHP在线书签系统分享


Posted in PHP onJanuary 04, 2016

本文为大家分享了PHP在线书签系统,感兴趣的小伙伴们可以参考一下

1、需求分析
首先,需要识别每个用户。应该有验证机制。
其次,需要保存单个用户的书签。用户应该能够添加和删除书签。
再次,需要根据对他们的了解,向用户建议他们可能感兴趣的站点。

2、解决方案
2.1 系统流程图

PHP在线书签系统分享

2.2 PHPbookmark中的文件列表

PHP在线书签系统分享

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

<?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、实现用户身份验证
5.1 register_form.php

<?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、实现书签的存储和检索
6.1 add_bms.php

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

PHP 相关文章推荐
PHP学习之PHP变量
Oct 09 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
Jul 02 PHP
解析thinkphp的左右值无限分类
Jun 20 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
Dec 25 PHP
thinkphp实现图片上传功能
Jan 13 PHP
PHP上传图片类显示缩略图功能
Jun 30 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
PHP互换两个变量值的方法(不用第三变量)
Nov 14 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
Apr 27 PHP
浅析PHP数据导出知识点
Feb 17 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 PHP
PHP数据库连接mysql与mysqli对比分析
Jan 04 #PHP
非常重要的php正则表达式详解
Jan 04 #PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
Jan 04 #PHP
隐藏Nginx或Apache以及PHP的版本号的方法
Jan 03 #PHP
PHP 读取文本文件内容并分页显示
Jan 02 #PHP
php实现概率性随机抽奖代码
Jan 02 #PHP
php实现给一张图片加上水印效果
Jan 02 #PHP
You might like
PHP中常用数组处理方法实例分析
2008/08/30 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
分享PHP header函数使用教程
2013/09/05 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
vuex实现简易计数器
2016/10/27 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
iview table render集成switch开关的实例
2018/03/14 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
vue实现的多页面项目如何优化打包的步骤详解
2020/07/19 Javascript
vue 判断元素内容是否超过宽度的方式
2020/07/29 Javascript
21行Python代码实现拼写检查器
2016/01/25 Python
python字典的常用操作方法小结
2016/05/16 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
全球异乡人的跨境社交电商平台:Kouhigh口嗨网
2020/07/24 全球购物
YII2 全局异常处理深入讲解
2021/03/24 PHP
项目计划书范文
2014/01/09 职场文书
消防战士优秀事迹材料
2014/02/13 职场文书
青蓝工程实施方案
2014/03/27 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle
Python中的tkinter库简单案例详解
2022/01/22 Python