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

(0)

相关推荐

  • 在线竞拍系统的PHP实现框架(二)

    上回说完了商品的列表显示方法.下面来谈谈显示商品详细信息的方法,这与我们在论坛中常用的显示帖子的方法大同小异. ********显示详细信息的文件*********** detail.php <?php include "config.inc.php"; //显示商品详细信息 //用全局变量来做,可以方便地取到多个字段的值. //有id,名字,价格,介绍,当前价,单位,图片,结束时间. function ReadDetail(){ global $WARE_TABLE; glob

  • PHP实现简单的新闻发布系统实例

    本文实例讲述了PHP实现简单的新闻发布系统.分享给大家供大家参考.具体如下: 本人小白,一直在公司用模板和框架写PHP,发现有时候连基本的sql语句都忘记了,所以有空想把PHP基础复习下,巩固下.分页和搜索,以及排序,还没写,后期继续更新...(代码修改:添加搜索和分页功能) articlePublish.html: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3

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

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

  • php小型企业库存管理系统的设计与实现代码

    双专业毕业论文做了一个小型企业库存管理系统,使用PHP&mysql组合进行开发.头一次开发稍微大一点的东西,php也是自学的.这里想跟大家一起分享一下 check_login 模块 复制代码 代码如下: <!--用户登陆检验模块--> <?php session_start(); $workid=$_GET['wid'];//获取工作号 if($workid!=$_SESSION['$workid']||$workid==''){ echo "<script la

  • PHP多用户博客系统分析[想做多用户博客的朋友,需要了解]第1/3页

    01,LxBlog 博客系统 这是phpwind推出的博客系统,值得推荐吧,国内推出php多用户博客的不多,如果你英文不好,就只能用这个系统了! PHPWind 博客系统 是一套基于php+mysql 数据库平台架构的多用户博客系统,该系统融合了Blog的最新元素,拥有强大的个人主页系统,独立的二级域名功能,灵活的用户模版系统,丰富的朋友圈和个性相册功能. 网站统筹化 1. 使用论坛整合接口,让博客论坛容为一体 在论坛里可以设置用户组权限,让特定的用户组有权限使用博客个人主页系统 用户在论坛里浏

  • 简单的php新闻发布系统教程

    简单的php新闻发布系统教程(第一版)第一讲:用 phpmyadmin 建立数据库首先建立一个数据库,名为 yayu .在这个数据库下建立一个数据表,名为 news .下面进入一个重点,那就是在表 news 下建立各个字段. 那么,什么叫字段呢?通俗点,就是一类事物的总称.比如说,所有的新闻发表时间用一个名词来代表(从偶的经验来看,用 phpmyadmin 建立 字段可以用中文,但从习惯来说还是用英文,没办法,计算机美国最牛嘛).偶们用" time "来表示.在字段 time 下可以有

  • 在线竞拍系统的PHP实现框架(一)

    前面我给了一个分页显示mysql记录的类,却没给出使用的例子,现在,我整理了我刚写的一个在线竞拍系统框架程序,来说明这个类的使用方法,而且也就在线竞拍的实现方法与大家一起来讨论一下. 首先声明,我不是高手,也不是行家,只是一个fans,所以这个程序肯定有不少漏洞,但我之所以敢拿出来,是因为我很希望能自由地与大家分享PHP带给我们的快乐.(其实是想多加点分好弄个支持mysql的空间^_^) 我觉得竞拍系统与一般的供求信息发布系统相比,最大的不同有两点,一点是出价者开的新价要及时地反映在商品的价格上

  • php实现模拟登陆方正教务系统抓取课表

    课程格子和超级课程表这两个应用,想必大学生都很熟悉,使用自己的学号和教务系统的密码,就可以将自己的课表导入,随时随地都可以在手机上查看. 其实稍微了解一点php的话,我们也可以做一个类似这样的web 应用. 1,解决掉验证码 其实这是正方的一个小bug,当我们进入登陆界面时,浏览器会去请求服务器,服务器会生成一个验证码图片.如果我们不去请求这个图片,那么正方后台也不会生成相应的        验证码,于是这样我们就有了可乘之机,让我高兴会儿~这时,我们在不填写验证码的情况下,可以很流畅的进入.大

  • PHP在线书签系统分享

    本文为大家分享了PHP在线书签系统,感兴趣的小伙伴们可以参考一下 1.需求分析 首先,需要识别每个用户.应该有验证机制. 其次,需要保存单个用户的书签.用户应该能够添加和删除书签. 再次,需要根据对他们的了解,向用户建议他们可能感兴趣的站点. 2.解决方案 2.1 系统流程图 2.2 PHPbookmark中的文件列表 3.实现数据库 create database bookmarks; use bookmarks; create table user ( username varchar(16

  • iOS9 系统分享调用之UIActivityViewController

    UIActivityViewController类是一个标准的view controller,通个使用这个controller,你的应用程序就可以提供各种服务. 系统提供了一些通用的标准服务,例如拷贝内容至粘贴板.发布一个公告至社交网.通过email或者SMS发送内容. 应用程序同样可以自定义服务.(我的微信分享就属于自定义服务, 之后将会写一篇教程介绍) 你的应用程序负责配置.展现和解雇这个view controller. viewcontroller的配置涉及到viewcontroller需

  • Android编程实现调用系统分享功能示例

    本文实例讲述了Android编程实现调用系统分享功能.分享给大家供大家参考,具体如下: /** * 调用系统的分享功能 * Created by admin on 15-4-13. */ public class ShareActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV

  • php实现在线考试系统【附源码】

    说明:本篇文章是为了记录下学习开发思路,程序不具备商业价值,明白开发思路,商用需二次升级! 效果图如下: 题库首页展示 试题在线测试 分数统计 通过该小项目目的是练习PHP基础知识,通过对数组操作实现考题信息存储加载,引入模板文件,实现考题数据的调用布局. 1.由于小项目未使用数据库,考题以数组的形式存储在PHP文件中,部分代码如下: <?php//考试题库二return [ //题库标题 'title' => 'PHP基础语法考试题(二)', //答题时限(秒数) 'timeout' =&g

  • DCloud的native.js调用系统分享实例Android版代码

    DCloud的Native.js技术,简称NJS,是一种将手机操作系统的原生对象转义,映射为JS对象,在JS里编写原生代码的技术 Native.js虽然强大和开放,但很多web开发者因为不熟悉原生API而难以独立完成,今天为大家分享一下利用native.js如何调用系统分享功能的Android版实例代码 function share(shareTip,shareText){ //导入Java类对象 var Context = plus.android.importClass("android.c

  • Android实现调用系统分享功能示例的总结

    Android分享-调用系统自带的分享功能 实现分享功能的几个办法 1.调用系统的分享功能 2.通过第三方SDK,如ShareSDK,友盟等 3.自行使用各自平台的SDK,比如QQ,微信,微博各自的SDK Android调用系统分享文本信息.单张图片.多个文件和指定分享到微信.QQ的实例代码: //www.jb51.net/article/112057.htm 同时分享图片和文字 private void share(String content, Uri uri){ Intent shareI

  • Java项目实战之在线考试系统的实现(系统介绍)

    1.本系统和现在有的考试系统有以下几种优势: a.和现在有的系统比较起来,本系统有科目.章节.老师.学生.班级等信息的管理,还有批阅试卷查看已批阅试卷等.传统的考试系统划分并不细,业务功能简单. b.和学校的考试系统还有外面的考试系统比较起来,本系统是B/S结构,学校的考试系统一般为C/S结构,性能方面不如B/S结构,并且C/S接口需要安装客户端,客户端压力很大,我的系统只需要电脑具有浏览器,在同一局域网就可以进行考试. c.从架构方面来讲,我们的系统为分布式架构,传统的考试系统没有我们的架构合

  • Java实现在线考试系统与设计(学生功能)

    学生模块功能比较少,就是进行考试和查看自己成绩两个大的功能. 学生进行考试的功能比较复杂(首先做了校验,不在考试时间范围内,不能进行考试) 考试试题是数据库根据发布考试时的条件随机产生的一套试题.因为每次考试题型题量都是不同的,因此我们继续采用JSON的格式去保存数据,当状态为1:表示正在考试:状态为2:表示已经考试结束:状态为3:表示老师已经阅完试卷 (1)当考试考试的时候,会给考上随机产生一套试题,并存储到数据库中,如果考试中电脑突然坏了可以保证重新打开还是之前的试题 (2)考试时间结束会自

  • 解决Android调用系统分享给微信,出现分享失败,分享多文件必须为图片格式的问题

    解决Android调用系统分享图片给微信,出现分享失败,分享多文件必须为图片格式 近期应公司需求,分享多图片到微信的功能,之前一直是用微信自己家SDK实现分享,但是查看微信的原生SDK是不具备多图分享的.在网上查找解决办法,直接调用手机系统进行分享,进行系统分享时分享给QQ,微博等都可以,但分享微信时就会出现分享失败,分享多文件必须为图片格式,看网上各路大神都各显神通都没解决具体问题,于是自己就总结出此篇文章为后来者少踩些坑,让你更快完成公司交给你的任务,让产品经理对你刮目相看,话不多说直接上干

随机推荐