php+redis实战留言板(todolist)与互粉功能

Posted ghostwu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php+redis实战留言板(todolist)与互粉功能相关的知识,希望对你有一定的参考价值。

目的:通过留言板(todolist)与互粉功能,掌握php操作redis的方法

相关数据操作命令

1,keys * 查看数据库所有的key

2,type + key: 如 type uid     查看数据key的类型

3,批量删除key, 如redis-cli keys "auth:*" | xargs redis-cli del   这行命令在linux终端执行, 删除 auth: 开头的所有key

4。。。。其他基本常用命令, 参照百度或者redis手册

 

0,连接redis

1 <?php
2 
3 $redis = new Redis();
4 $redis->connect( "127.0.0.1", 6379 );
5 $redis->auth( "ghostwu" );
6 
7 ?>

 

1、注册功能( reg.php )

 1 <!doctype html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8" />
 5         <title>用户注册页面</title>
 6     </head>
 7     <body>
 8         <h3>用户注册</h3>
 9         <form action="do_reg.php" method="post">
10             <p>
11                 用户名: <input type="text" name="user" />
12             </p>
13             <p>
14                 密码:<input type="password" name="pwd" />
15             </p>
16             <p>
17                 年龄: <input type="text" name="age" />
18             </p>
19             <p>
20                 <input type="submit" value="注册" />
21                 <input type="reset" value="重置" />
22             </p>
23         </form>
24     </body>
25 </html>

2、处理注册( do_reg.php )

 1 <?php
 2 require "./redis_connect.php";
 3 
 4 $user = $_POST[‘user‘];
 5 $pwd = md5( $_POST[‘pwd‘] );
 6 $age = $_POST[‘age‘];
 7 
 8 $uid = $redis->get( "username:" . $user );
 9 if( empty( $uid ) ) {
10     $uid = $redis->incr( "userid" );
11     $redis->hMset( "user:" . $uid, array( "uid" => $uid, "user" => $user, "pwd" => $pwd, "age" => $age ) );
12     $redis->rpush( "uid", $uid );
13     $redis->set( "username:" . $user, $uid );
14     header( "Location:./list.php" );
15     exit();
16 }else {
17     die( "user already exists " );
18 }
19 
20 ?>

 

3,登录(login.php)

 1 <!doctype html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8" />
 5         <title>用户登录页面</title>
 6     </head>
 7     <body>
 8         <?php
 9             require "./redis_connect.php";
10             if( isset( $_POST[‘login‘] ) || $_POST[‘login‘] == ‘登录‘ ) {
11                 $user = $_POST[‘user‘];
12                 $pwd = $_POST[‘pwd‘];
13                 $uid = $redis->get( "username:" . $user );
14                 if( !empty( $uid ) ) {
15                     $db_pwd = $redis->hget( "user:" . $uid, "pwd" );
16                     if( md5( $pwd ) == $db_pwd ) {
17                         $auth = md5( time() . $user . rand() );
18                         $redis->set( "auth:" . $auth, $uid );
19                         setcookie( "auth", $auth, time() + 86400 );
20                         header( "Location:./list.php" );
21                     }else {
22                         echo "<script>alert(‘用户密码错误‘);</script>";
23                     }
24                 }else {
25                     echo "<script>alert(‘该用户不存在‘);</script>";
26                 }
27             }
28         ?>
29         <h3>用户登录</h3>
30         <form action="" method="post">
31             <p>
32                 用户名: <input type="text" name="user" />
33             </p>
34             <p>
35                 密码:<input type="password" name="pwd" />
36             </p>
37             <p>
38                 <input type="submit" value="登录" name="login" />
39             </p>
40         </form>
41     </body>
42 </html>

 

4,列表页( list.php )

  1 <meta charset="utf-8" />
  2 <?php
  3 require( "./redis_connect.php" );
  4 ?>
  5 <a href="./reg.php">注册</a>
  6 <?php
  7     if( !empty( $_COOKIE[‘auth‘] ) ) {
  8         $login_uid = $redis->get( "auth:" . $_COOKIE[‘auth‘] );
  9         $userName = $redis->hget( "user:" . $login_uid, "user" );
 10 ?>
 11     欢迎您:<?php echo $userName; ?> | <a href="./logout.php">退出</a>
 12 <?php
 13     }else {
 14 ?>
 15     <a href="./login.php">登录</a>
 16 <?php
 17     }
 18 ?>
 19 <?php
 20     $total = $redis->lsize( "uid" );
 21     $pageSize = 3;
 22     $p = isset( $_GET[‘p‘] ) ? $_GET[‘p‘] : 1;
 23     $page = ceil( $total / $pageSize );    
 24     $uids = $redis->lrange( "uid", ( $p - 1 ) * $pageSize, ( ( $p - 1 ) * $pageSize + $pageSize - 1  ) );
 25     $userList = array();
 26     foreach( $uids as $uid ) {
 27         $userList[] = $redis->hgetall( "user:" . $uid );
 28     }
 29 ?>
 30 
 31 <h3>列表数据</h3>
 32 <table>
 33     <tr>
 34         <th>uid</th>
 35         <th>用户名</th>
 36         <th>年龄</th>
 37         <th>操作</th>
 38     </tr>
 39     <?php
 40         foreach( $userList as $user ) {
 41     ?>
 42         <tr>
 43             <td><?php echo $user[‘uid‘]; ?></td>
 44             <td><?php echo $user[‘user‘]; ?></td>
 45             <td><?php echo $user[‘age‘]; ?></td>
 46             <td>
 47                 <a href="delete.php?uid=<?php echo $user[‘uid‘]; ?>">删除</a>
 48                 <a href="edit.php?uid=<?php echo $user[‘uid‘]; ?>">修改</a>
 49                 <?php
 50                     if( !empty( $_COOKIE[‘auth‘] ) && ( $login_uid != $user[‘uid‘] ) ) {
 51                 ?>
 52                         <a href="./do_fans.php?login_id=<?php echo $login_uid; ?>&uid=<?php echo $user[‘uid‘]; ?>">关注</a>
 53                 <?php
 54                     }
 55                 ?>
 56             </td>    
 57         </tr>
 58     <?php
 59         }
 60     ?>
 61         <!--分页开始-->    
 62         <tr>
 63             <td colspan="4">
 64                 <?php
 65                     for( $i = 1; $i <= $page; $i++ ) {
 66                 ?>
 67                         <a href="?p=<?php echo $i; ?>"><?php echo $i; ?></a>
 68                 <?php
 69                     }
 70                 ?>    
 71             </td>        
 72         </tr>    
 73 </table>
 74 
 75 <h3>我关注了谁</h3>
 76 <table>
 77     <tr>
 78         <th>uid</th>
 79         <th>用户名</th>
 80         <th>年龄</th>
 81     </tr>
 82     <?php
 83         $myWatchIds = $redis->smembers( "user:" . $login_uid . ":watch" );
 84         foreach( $myWatchIds as $wId ){
 85             $watchList = $redis->hgetall( "user:" . $wId );
 86 ?>
 87     <tr>
 88         <td><?php echo $watchList[‘uid‘]; ?></td>
 89         <td><?php echo $watchList[‘user‘]; ?></td>
 90         <td><?php echo $watchList[‘age‘]; ?></td>
 91     </tr>
 92 <?php
 93         }
 94     ?>
 95 </table>
 96 <h3>我的fans</h3>
 97 <table>
 98     <tr>
 99         <th>uid</th>
100         <th>用户名</th>
101         <th>年龄</th>
102     </tr>
103     <?php
104         $myFlowerIds = $redis->smembers( "user:" . $login_uid . ":flowers" );
105         foreach( $myFlowerIds as $fId ){
106             $flowerList = $redis->hgetall( "user:" . $fId );
107 ?>
108     <tr>
109         <td><?php echo $flowerList[‘uid‘]; ?></td>
110         <td><?php echo $flowerList[‘user‘]; ?></td>
111         <td><?php echo $flowerList[‘age‘]; ?></td>
112     </tr>
113 <?php
114         }
115     ?>
116 </table>

 

5,编辑 ( edit.php)

 1 <meta charset="utf-8" />
 2 <?php
 3     require "./redis_connect.php";
 4     $uid = intval( $_GET[‘uid‘] );
 5     if( empty( $uid ) ){
 6         header( "Location:./list.php" );
 7         exit();
 8     }
 9     $userInfo = $redis->hgetall( "user:" . $uid );
10 ?>
11 
12 <form action="do_edit.php" method="post">
13     <p>
14         用户名: <input disabled type="text" name="user" value="<?php echo $userInfo[‘user‘]; ?>" />
15     </p>
16     <p>
17         年龄:<input type="text" name="age" value="<?php echo $userInfo[‘age‘]; ?>" />
18     </p>
19     <p>
20         <input type="submit" value="修改" name="edit" />
21     </p>
22     <input type="hidden" value="<?php echo $userInfo[‘uid‘]; ?>" name="uid" />
23 </form>

 

6,处理更新( do_edit.php )

 1 <?php
 2     require( "./redis_connect.php" );
 3     $uid = intval( $_POST[‘uid‘] );
 4     $age = $_POST[‘age‘];
 5 
 6     if( empty( $uid ) ) {
 7         header( "Location:./edit.php" );
 8         exit();
 9     }
10     $res = $redis->hmset( "user:". $uid, array( "age" => $age ) );
11     if( $res ) {
12         header( "Location:./list.php" );
13     }else {
14         header( "Location:./edit.php" );
15     }
16     exit();
17 ?>

 

7,删除(delete.php)

 1 <?php
 2     require( "./redis_connect.php" );
 3     $uid = intval( $_GET[‘uid‘] );
 4     if( empty( $uid ) ) {
 5         header( "Location:./list.php" );
 6         exit();
 7     }
 8     $userName = $redis->get( "user:" . $uid );
 9     $redis->del( "user:" . $uid );
10     $redis->del( "username:" . $userName );
11     $redis->lrem( "uid", $uid );
12     header( "Location:./list.php" );
13 ?>

 

8,注销( logout.php )

1 <?php
2     require "./redis_connect.php";
3     if( isset( $_COOKIE[‘auth‘] ) ){
4         $redis->del( "auth:" . $_COOKIE[‘auth‘] );
5         setcookie( "auth", "", time() - 86400 );
6         header( "Location:./list.php" );
7         exit();
8     }
9 ?>

 

9,互粉( do_fans.php )

 1 <?php
 2     require "./redis_connect.php";
 3     $login_id = intval( $_GET[‘login_id‘] );
 4     $uid = intval( $_GET[‘uid‘] );
 5     if( empty( $login_id ) || empty( $uid ) ) {
 6         header( "Location:./list.php" );            
 7         exit();
 8     }
 9     //当前用户关注
10     $redis->sadd( "user:" . $login_id . ":watch", $uid );
11     //被当前用户关注
12     $redis->sadd( "user:" . $uid . ":flowers", $login_id );
13     header( "Location:./list.php" );            
14     exit();
15 ?>

 

以上是关于php+redis实战留言板(todolist)与互粉功能的主要内容,如果未能解决你的问题,请参考以下文章

[js高手之路]Node.js+jade+mongoose实战todolist(分页,ajax编辑,删除)

Redis-PHP实战篇—Redis 数据结构使用场景

k8s+docker:部署留言板php+redis

k8s官方案例练习-使用 Redis 部署 PHP 留言板应用程序

使用Kubernetes创建PHP留言板系统

React 实战 Todolist (下)