PHP在线书签系统分享_php实例

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

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

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

2.2 PHPbookmark中的文件列表

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
在线书签系统
在线文档分享系统、重装系统chrome书签、重装系统后书签、安装系统后自带的书签、数据库系统设计实例,以便于您获取更多的相关知识。

时间: 2024-07-30 11:29:53

PHP在线书签系统分享_php实例的相关文章

Android应用中使用及实现系统“分享”接口实例_Android

为了应用的推广.传播,很多的应用中都有"分享"功能,一个按钮,点击后会出现短信.微博等等一切实现了分享功能的应用列表.这一篇文章主要介绍怎么调用分享功能和怎么实现分享接口让自己应用出现分享列表中.Android应用中能很方便的完成这些功能,这也正是Android的伟大之处,他能很简单的完成应用之间的沟通以相互整合. 调用分享功能 1.分享文本 分享功能使用的隐式启动Activity的方法,这里的Action使用的是 ACTION_SEND. Intent sendIntent = ne

PHP+MySQL投票系统的设计和实现分享_php实例

系统不大,完成这个系统的过程我分了三个步骤 •数据库设计 •系统框架设计 •前端美化 数据库的设计 设计三张表:投票结果统计表(count_voting),投票人记录表(ip_votes),用户表(user) 投票结果统计表用于统计最后的投票记录,我给它弄了4个字段:被投票项的名称(SelectName),被投票项标签名(LabelName)(起到分类的作用),票数(CountVotes). 投票人记录表用于登记投票人的ip(IP),地理位置(Location),投票时间(VoteTime),被

一个比较不错的PHP日历类分享_php实例

说到对时期和时间的处理,就一定要介绍一下日历程序的编写.但一提起编写日历,大多数人都会认为日历的作用只是为了在页上显示当前的日期,其实日历在我们的开发中有更重要的作用.例如我们开发一个"记事本"就需要通过日历设定日期,还有一些系统中需要按日期去排任务,也需要日历,等等.本例涉及的日期和时间函数并不是很多,都是前面介绍的内容,主要是通过一个日历类的编写,巩固一下前面介绍过的面向对象的语法知识,以及时间函数应用,最主要的是可以提升初学者的思维逻辑和程序设计能力.将日历类Calendar声明

PHP支付系统设计与典型案例分享_php实例

由于公司业务需要,花两周时间实现了一个小型的支付系统,麻雀虽小五脏俱全,各种必须的模块如账户加锁,事务性保证,流水对帐等都是有完整实现的,整个开发过程中有很多经验积累,再加上在网上搜索了一下,大部分都是些研究性的论文,对实际使用价值不大,所以这次特意拿出来和大家分享一下. 这个系统可以用作小型支付系统,也可以用做第三方应用接入开放平台时的支付流水系统. 原来的需求比较负责,我简化一点说: 对每个应用,对外需要提供 获取余额,支付设备,充值 等接口 后台有程序,每月一号进行清算 账户可以被冻结 需

php等比例缩放图片及剪切图片代码分享_php实例

php等比例缩放图片及剪切图片代码分享 /** * 图片缩放函数(可设置高度固定,宽度固定或者最大宽高,支持gif/jpg/png三种类型) * Author : Specs * * @param string $source_path 源图片 * @param int $target_width 目标宽度 * @param int $target_height 目标高度 * @param string $fixed_orig 锁定宽高(可选参数 width.height或者空值) * @ret

PHP中数据库单例模式的实现代码分享_php实例

首先我们要知道明确单例模式这个概念,那么什么是单例模式呢? 单例模式顾名思义,就是只有一个实例. 作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类我们称之为单例类. 单例模式的要点有三个: 一是某个类只能有一个实例: 二是它必须自行创建这个实例: 三是它必须自行向整个系统提供这个实例. 下面我们讨论下为什么要使用PHP单例模式? 多数人都是从单例模式的字面上的意思来理解它的用途, 认为这是对系统资源的节省, 可以避免重复实例化, 是一种"计划

又一个PHP实现的冒泡排序算法分享_php实例

经典的冒泡排序法一直是许多程序沿用的其中一种排序法,话说冒泡排序法在效率上比PHP系统函数sort更高效.本章不讨论性能,所以就不拿它来跟系统性能做对比了. 冒泡排序大概的意思是依次比较相邻的两个数,然后根据大小做出排序,直至最后两位数.由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序.但其实在实际过程中也可以根据自己需要反过来用,大树往前放,小数往后放. <?php /** * PHP中的冒泡排序法使用 */ // 预先声明一个数组 $arr = array (1

一个经典的PHP文件上传类分享_php实例

文件上传是项目开发中比较常见的功能,但文件上传的过程比较繁琐,只要是有文件上传的地方就需要编写这些复杂的代码.为了能在每次开发中降低功能的编写难度,也为了能节省开发时间,通常我们都会将这些反复使用的一段代码封装到一个类中.帮助开发者在以后的开发中,通过编写几条简单代码就可以实现复杂的文件上传功能.对于基础薄弱的读者,只要会使用本类即可,而对一些喜欢挑战的朋友,可以尝试去读懂它,并能开发一个属于自己的文件上传类. 一.需求分析 要球自定义文件上传类,即在使用非常简便的前提下,又可以完成以下几项功能

2个比较经典的PHP加密解密函数分享_php实例

项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理. 最常见的应用在用户登录以及一些API数据交换的场景. 笔者收录了一些比较经典的PHP加密解密函数代码,分享给大家.加密解密原理一般都是通过一定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果.1.非常给力的authcode加密函数,Discuz!经典代码(带详解): 复制代码 代码如下: function authcode(