PHP在线书签系统分享

5年以前  |  阅读数:230 次  |  编程语言: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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
贪吃蛇
文件下载
获取IMEI
双位运算符
发送邮件
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
提取后缀名
年的日历图
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例