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和ACCESS写聊天室(二)
Oct 09 PHP
PHP面向对象的使用教程 简单数据库连接
Nov 25 PHP
深入PHP nl2br()格式化输出的详解
Jun 05 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
php生成xml时添加CDATA标签的方法
Oct 17 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 PHP
PHP list() 将数组中的值赋给变量的简单实例
Jun 13 PHP
Laravel中间件实现原理详解
Oct 09 PHP
PHP微信分享开发详解
Jan 14 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
PHP实现用户登录的案例代码
May 10 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下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
PHP 模拟$_PUT实现代码
2010/03/15 PHP
PHP、Java des加密解密实例
2015/04/27 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
js倒计时小程序
2013/11/05 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
javascript折半查找详解
2015/01/26 Javascript
JavaScript中return false的用法
2015/03/12 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
详解angularjs 学习之 scope作用域
2018/01/15 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
Django admin美化插件suit使用示例
2017/12/12 Python
python3实现磁盘空间监控
2018/06/21 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
Python如何计算语句执行时间
2019/11/22 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
安徽导游词
2015/02/12 职场文书
Python进度条的使用
2021/05/17 Python