分頁php
要對列表頁進行分頁,須要知道:html
①用戶總數 $countredis
② 頁大小 $pageSize:用戶自定義數據庫
③ 當前頁:$page:GET 方式獲取 cookie
④ 總頁數:$pageCount = ceil($count / $pageSize)post
關鍵是用戶總數 $count 的獲取:ui
能夠採起的方案是,在用戶註冊時,把 uid 存入鏈表,統計鏈表中用戶 uid 的個數,即爲用戶總數 $count。spa
【操做】3d
reg.php:(line 14)orm
1 <?php 2 require 'redis.php'; 3 4 $username = $_POST['username']; 5 $password = md5($_POST['password']); 6 $age =$_POST['age']; 7 //uid 自加 8 //當有 userid 這個鍵時,執行 incr時該鍵的值加1;不存在該鍵時,建立一個 userid,值爲0,執行incr,值爲1 9 $uid = $redis->incr('userid'); 10 11 //向 hash 表中批量添加數據:hMset 12 $redis->hMset('user:'.$uid, array('uid'=>$uid, 'name'=>$username, 'password'=>$password, 'age'=>$age)); 13 //把用戶 id 存入鏈表 14 $redis->rpush('uid', $uid); 15 16 //跳轉 17 header('location:list.php');
在 redis 客戶端 flushdb 清除一下數據庫,從新註冊用戶;
註冊了 9 個用戶:
127.0.0.1:6379> keys * 1) "user:1" 2) "user:4" 3) "user:7" 4) "user:3" 5) "user:6" 6) "uid" 7) "user:8" 8) "user:5" 9) "user:9" 10) "user:2" 11) "userid"
key 爲 uid 的鍵便是保存用戶 uid 的鏈表:
127.0.0.1:6379> type uid list 127.0.0.1:6379> lrange uid 0 -1 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 6) "6" 7) "7" 8) "8" 9) "9"
前臺:
刪除用戶時,同時刪除鏈表結構中的對應的用戶的 uid :
del.php(line:7):
1 <?php 2 require 'redis.php'; 3 4 $uid = $_GET['uid']; 5 $redis->del('user:'.$uid); 6 //刪除鏈表中的用戶 uid 7 $redis->lrem('uid', $uid); 8 9 header('location:list.php');
刪除其中一個用戶(例如秦明),在 redis 客戶端獲取 list uid:
127.0.0.1:6379> lrange uid 0 -1 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 6) "6" 7) "7" 8) "9"
uid 爲 8 的值已經被刪掉了。
在 list.php 中能夠經過 $resid->lsize('uid'); 來獲取 key 爲 uid 的鏈表元素的個數(line:15),同時修改 for 循環爲 foreach 循環(line:36),分頁(line:13):
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用戶信息列表</title> 6 </head> 7 <body> 8 <a href="add.php">返回註冊頁面</a> 9 <a href="login.php">登陸</a> 10 <?php 11 require 'redis.php'; 12 13 /*分頁*/ 14 //用戶總數 15 $count = $redis->lsize('uid'); 16 //頁大小 17 $pageSize = 5; 18 //當前頁碼 19 $page = !empty($_GET['page'])?$_GET['page']:1; 20 //頁總數 21 $pageCount = ceil($count / $pageSize); 22 23 /* 24 第 1 頁:lrange 0 4 25 第 2 頁:lrange 5 9 26 第 3 頁:lrange 10 14 27 第 n 頁:lrange ($page - 1) * $pageSize ($page - 1) * $pageSize + ($pageSize - 1) 28 */ 29 $ids = $redis->lrange('uid', (($page - 1) * $pageSize), (($page - 1) * $pageSize + ($pageSize - 1))); 30 /* 31 var_dump($ids); 32 $page = 1 33 array(5) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" [4]=> string(1) "5" } 34 */ 35 36 foreach($ids as $v){ 37 $data[] = $redis->hgetall('user:'.$v); 38 } 39 ?> 40 <table border="1" cellspacing="0" cellpadding="5"> 41 <tr> 42 <th>uid</th> 43 <th>name</th> 44 <th>age</th> 45 <th>操做</th> 46 </tr> 47 <?php foreach($data as $v){ ?> 48 <tr> 49 <td><?php echo $v['uid']?></td> 50 <td><?php echo $v['name']?></td> 51 <td><?php echo $v['age']?></td> 52 <td><a href="del.php?uid=<?php echo $v['uid'];?>">刪除</a> | <a href="mod.php?uid=<?php echo $v['uid'];?>">編輯</a></td> 53 </tr> 54 <?php } ?> 55 <tr><td colspan="4"> 56 <a href="?page=<?php echo ($page-1)<=1?1:($page-1);?>">上一頁</a> 57 <a href="?page=<?php echo ($page+1)>$pageCount?$pageCount:($page+1);?>">下一頁 </a> 58 <a href="?page=1">首頁</a> 59 <a href="?page=<?php echo $pageCount;?>">尾頁</a> 60 當前<?php echo $page;?>頁 61 總共<?php echo $pageCount;?>頁 62 共<?php echo $count;?>用戶 63 </td> 64 </tr> 65 </table> 66 </body> 67 </html>
前臺:
登陸
須要判斷用戶輸入的用戶名是否已經註冊,實現的方法是:在用戶註冊的時候把用戶名存入字符串,修改 reg.php(註冊):
reg.php(line:15):
1 <?php 2 require 'redis.php'; 3 4 $username = $_POST['username']; 5 $password = md5($_POST['password']); 6 $age =$_POST['age']; 7 //uid 自加 8 //當有 userid 這個鍵時,執行 incr時該鍵的值加1;不存在該鍵時,建立一個 userid,值爲0,執行incr,值爲1 9 $uid = $redis->incr('userid'); 10 11 //向 hash 表中批量添加數據:hMset 12 $redis->hMset('user:'.$uid, array('uid'=>$uid, 'name'=>$username, 'password'=>$password, 'age'=>$age)); 13 //把用戶 id 存入鏈表 14 $redis->rpush('uid', $uid); 15 //把用戶名 name 存入字符串 16 $redis->set('username:'.$username, $uid); 17 18 //跳轉 19 header('location:list.php');
在 redis 客戶端 flushdb 清空數據庫,從新註冊;
增長 login.php:
1 <?php 2 header("content-type:text/html;charset=utf-8"); 3 require 'redis.php'; 4 if(isset($_POST) && !empty($_POST)){ 5 $username = $_POST['username']; 6 $pass = $_POST['password']; 7 //判斷用戶民是否存在 8 $id = $redis->get('username:'.$username); 9 if(!empty($id)){ 10 //用戶存在,對比密碼 11 $password = $redis->hget('user:'.$id, 'password'); 12 if(md5($pass) == $password){ 13 $auth = md5(time().$username.rand()); 14 $redis->set('auth:'.$auth, $id); 15 setcookie('auth', $auth, time()+86400); 16 header('location:list.php'); 17 } 18 } 19 }else{ 20 ?> 21 <!DOCTYPE html> 22 <html lang="en"> 23 <head> 24 <meta charset="UTF-8"> 25 <title>Document</title> 26 </head> 27 <body> 28 <form action="" method="post"> 29 <table align="left"> 30 <tr><td>用戶名:</td><td><input type="username" name="username"></td></tr> 31 <tr><td>密碼:</td><td><input type="password" name="password"></td></tr> 32 <tr><td><input type="submit" value="登陸"></td><td><input type="reset" value="重置"></td></tr> 33 </table> 34 </form> 35 </body> 36 </html> 37 <?php }?>
修改 list.php,增長 「退出」,「歡迎+用戶名」:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用戶信息列表</title> 6 </head> 7 <body> 8 <a href="add.php">返回註冊頁面</a> 9 <?php 10 require 'redis.php'; 11 if(!empty($_COOKIE['auth'])){ 12 //獲取 id 13 $id = $redis->get('auth:'.$_COOKIE['auth']); 14 //獲取用戶名 15 $name = $redis->hget('user:'.$id, 'name'); 16 echo ' 歡迎你, ',$name; 17 echo ' <a href="logout.php">退出</a>'; 18 }else{ 19 ?> 20 <a href="login.php">登陸</a> 21 <?php }?> 22 <?php 23 /*分頁*/ 24 //用戶總數 25 $count = $redis->lsize('uid'); 26 //頁大小 27 $pageSize = 5; 28 //當前頁碼 29 $page = !empty($_GET['page'])?$_GET['page']:1; 30 //頁總數 31 $pageCount = ceil($count / $pageSize); 32 33 /* 34 第 1 頁:lrange 0 4 35 第 2 頁:lrange 5 9 36 第 3 頁:lrange 10 14 37 第 n 頁:lrange ($page - 1) * $pageSize ($page - 1) * $pageSize + ($pageSize - 1) 38 */ 39 $ids = $redis->lrange('uid', (($page - 1) * $pageSize), (($page - 1) * $pageSize + ($pageSize - 1))); 40 /* 41 var_dump($ids); 42 $page = 1 43 array(5) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" [4]=> string(1) "5" } 44 */ 45 46 foreach($ids as $v){ 47 $data[] = $redis->hgetall('user:'.$v); 48 } 49 ?> 50 <table border="1" cellspacing="0" cellpadding="5"> 51 <tr> 52 <th>uid</th> 53 <th>name</th> 54 <th>age</th> 55 <th>操做</th> 56 </tr> 57 <?php foreach($data as $v){ ?> 58 <tr> 59 <td><?php echo $v['uid']?></td> 60 <td><?php echo $v['name']?></td> 61 <td><?php echo $v['age']?></td> 62 <td><a href="del.php?uid=<?php echo $v['uid'];?>">刪除</a> | <a href="mod.php?uid=<?php echo $v['uid'];?>">編輯</a></td> 63 </tr> 64 <?php } ?> 65 <tr><td colspan="4"> 66 <a href="?page=<?php echo ($page-1)<=1?1:($page-1);?>">上一頁</a> 67 <a href="?page=<?php echo ($page+1)>$pageCount?$pageCount:($page+1);?>">下一頁 </a> 68 <a href="?page=1">首頁</a> 69 <a href="?page=<?php echo $pageCount;?>">尾頁</a> 70 當前<?php echo $page;?>頁 71 總共<?php echo $pageCount;?>頁 72 共<?php echo $count;?>用戶 73 </td> 74 </tr> 75 </table> 76 </body> 77 </html>
此時在 redis 客戶端產看全部的 key:
127.0.0.1:6379> keys * 1) "user:4" 2) "user:1" 3) "user:6" 4) "user:3" 5) "uid" 6) "username:\xe5\x90\x89\xe5\xb8\x83\xe6\x96\xaf" 7) "username:\xe5\x88\x87\xe8\xb5\xab" 8) "auth:d3716d28fd2491c1983fc6bb4087c05b" 9) "user:5" 10) "username:\xe9\xbb\x98\xe5\xbe\xb7\xe8\x90\xa8\xe5\x85\x8b" 11) "userid" 12) "user:2" 13) "username:\xe5\xbe\xb7\xe5\xb8\x83\xe8\xa5\xbf" 14) "username:\xe5\x85\x8b\xe6\x96\xaf\xe5\x88\x87\xe5\xb0\x94\xe5\xb0\xbc" 15) "username:\xe5\x8a\xa0\xe5\xb8\x83\xe9\x87\x8c\xe5\x9f\x83\xe5\xb0\x94"
用戶列表前臺:
退出
logout.php:
1 <?php 2 setcookie('auth', '', time()-1); 3 header('location:list.php');
加關注
修改 list.php(列表界面 line:64)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用戶信息列表</title> 6 </head> 7 <body> 8 <a href="add.php">返回註冊頁面</a> 9 <?php 10 require 'redis.php'; 11 if(!empty($_COOKIE['auth'])){ 12 //獲取 id 13 $id = $redis->get('auth:'.$_COOKIE['auth']); 14 //獲取用戶名 15 $name = $redis->hget('user:'.$id, 'name'); 16 echo ' 歡迎你, ',$name; 17 echo ' <a href="logout.php">退出</a>'; 18 }else{ 19 ?> 20 <a href="login.php">登陸</a> 21 <?php }?> 22 <?php 23 /*分頁*/ 24 //用戶總數 25 $count = $redis->lsize('uid'); 26 //頁大小 27 $pageSize = 5; 28 //當前頁碼 29 $page = !empty($_GET['page'])?$_GET['page']:1; 30 //頁總數 31 $pageCount = ceil($count / $pageSize); 32 33 /* 34 第 1 頁:lrange 0 4 35 第 2 頁:lrange 5 9 36 第 3 頁:lrange 10 14 37 第 n 頁:lrange ($page - 1) * $pageSize ($page - 1) * $pageSize + ($pageSize - 1) 38 */ 39 $ids = $redis->lrange('uid', (($page - 1) * $pageSize), (($page - 1) * $pageSize + ($pageSize - 1))); 40 /* 41 var_dump($ids); 42 $page = 1 43 array(5) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" [4]=> string(1) "5" } 44 */ 45 46 foreach($ids as $v){ 47 $data[] = $redis->hgetall('user:'.$v); 48 } 49 ?> 50 <table border="1" cellspacing="0" cellpadding="5"> 51 <tr> 52 <th>uid</th> 53 <th>name</th> 54 <th>age</th> 55 <th>操做</th> 56 </tr> 57 <?php foreach($data as $v){ ?> 58 <tr> 59 <td><?php echo $v['uid']?></td> 60 <td><?php echo $v['name']?></td> 61 <td><?php echo $v['age']?></td> 62 <td align="center"><a href="del.php?uid=<?php echo $v['uid'];?>">刪除</a> 63 | <a href="mod.php?uid=<?php echo $v['uid'];?>">編輯</a> 64 <!-- 用戶登陸,列表中除本身以外的用戶 都顯示「加關注」--> 65 <?php if(!empty($_COOKIE['auth']) && $id != $v['uid']){ ?>| <a href="addAttention.php?id=<?php echo $v['uid'];?>&uid=<?php echo $id;?>">加關注</a><?php }?></td> 66 </tr> 67 <?php } ?> 68 <tr><td colspan="4"> 69 <a href="?page=<?php echo ($page-1)<=1?1:($page-1);?>">上一頁</a> 70 <a href="?page=<?php echo ($page+1)>$pageCount?$pageCount:($page+1);?>">下一頁 </a> 71 <a href="?page=1">首頁</a> 72 <a href="?page=<?php echo $pageCount;?>">尾頁</a> 73 當前<?php echo $page;?>頁 74 總共<?php echo $pageCount;?>頁 75 共<?php echo $count;?>用戶 76 </td> 77 </tr> 78 </table> 79 </body> 80 </html>
加關注用集合(set,有並集、交集、差集——能夠實現共同關注、好友推薦(a 關注了,可是 b 沒有關注,a 給 b 的好友推薦))來存儲
addAttenation.php:
1 <?php 2 require 'redis.php'; 3 4 //待加關注的用戶id 5 $id = $_GET['id']; 6 //用戶id 7 $uid = $_GET['uid']; 8 9 //當前用戶 uid 正在following(關注)id 10 $redis->sadd('user:'.$uid.':following', $id); 11 //用戶id的followers(粉絲):uid 12 $redis->sadd('user:'.$id.':followers', $uid); 13 14 header('location:list.php');
添加完關注之後,在 redis 客戶端:
127.0.0.1:6379> keys * 1) "user:4" 2) "user:1:followers" 3) "user:3" 4) "user:6" 5) "auth:a6ce443729f3d524f81c2bdcdba60278" 6) "uid" 7) "auth:556734b6f86b074b921349d616393c2e" 8) "username:\xe5\x88\x87\xe8\xb5\xab" 9) "user:2:followers" 10) "user:2" 11) "userid" 12) "user:1:following" 13) "auth:28e59ffccd991262bfb1b92c027a69ea" 14) "username:\xe5\xbe\xb7\xe5\xb8\x83\xe8\xa5\xbf" 15) "user:1" 16) "user:5:followers" 17) "username:\xe5\x90\x89\xe5\xb8\x83\xe6\x96\xaf" 18) "user:3:followers" 19) "user:5" 20) "auth:d3716d28fd2491c1983fc6bb4087c05b" 21) "username:\xe9\xbb\x98\xe5\xbe\xb7\xe8\x90\xa8\xe5\x85\x8b" 22) "auth:a2a03ba9c65d1716d7f19726372f83f7" 23) "user:2:following" 24) "user:4:followers" 25) "auth:8ae6684aecf41ee7259a288aaecca964" 26) "username:\xe5\x8a\xa0\xe5\xb8\x83\xe9\x87\x8c\xe5\x9f\x83\xe5\xb0\x94" 27) "username:\xe5\x85\x8b\xe6\x96\xaf\xe5\x88\x87\xe5\xb0\x94\xe5\xb0\xbc" 127.0.0.1:6379> smembers user:1:following 1) "2" 2) "4" 3) "5" 127.0.0.1:6379> smembers user:1:followers 1) "2" 127.0.0.1:6379> smembers user:2:following 1) "1" 2) "3" 3) "4" 127.0.0.1:6379> smembers user:2:followers 1) "1" 127.0.0.1:6379> sdiff user:1:following user:2:following #user:1 和 user:2 關注的差集,能夠user:1 能夠向 user:2 推薦好友 1) "2" 2) "5"
個人關注
修改 list.php(line:79):
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用戶信息列表</title> 6 </head> 7 <body> 8 <a href="add.php">返回註冊頁面</a> 9 <?php 10 require 'redis.php'; 11 if(!empty($_COOKIE['auth'])){ 12 //獲取 id 13 $id = $redis->get('auth:'.$_COOKIE['auth']); 14 //獲取用戶名 15 $name = $redis->hget('user:'.$id, 'name'); 16 echo ' 歡迎你, ',$name; 17 echo ' <a href="logout.php">退出</a>'; 18 }else{ 19 ?> 20 <a href="login.php">登陸</a> 21 <?php }?> 22 <?php 23 /*分頁*/ 24 //用戶總數 25 $count = $redis->lsize('uid'); 26 //頁大小 27 $pageSize = 5; 28 //當前頁碼 29 $page = !empty($_GET['page'])?$_GET['page']:1; 30 //頁總數 31 $pageCount = ceil($count / $pageSize); 32 33 /* 34 第 1 頁:lrange 0 4 35 第 2 頁:lrange 5 9 36 第 3 頁:lrange 10 14 37 第 n 頁:lrange ($page - 1) * $pageSize ($page - 1) * $pageSize + ($pageSize - 1) 38 */ 39 $ids = $redis->lrange('uid', (($page - 1) * $pageSize), (($page - 1) * $pageSize + ($pageSize - 1))); 40 /* 41 var_dump($ids); 42 $page = 1 43 array(5) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" [4]=> string(1) "5" } 44 */ 45 46 foreach($ids as $v){ 47 $data[] = $redis->hgetall('user:'.$v); 48 } 49 ?> 50 <table border="1" cellspacing="0" cellpadding="5"> 51 <tr> 52 <th>uid</th> 53 <th>name</th> 54 <th>age</th> 55 <th>操做</th> 56 </tr> 57 <?php foreach($data as $v){ ?> 58 <tr> 59 <td><?php echo $v['uid']?></td> 60 <td><?php echo $v['name']?></td> 61 <td><?php echo $v['age']?></td> 62 <td align="center"><a href="del.php?uid=<?php echo $v['uid'];?>">刪除</a> 63 | <a href="mod.php?uid=<?php echo $v['uid'];?>">編輯</a> 64 <!-- 用戶登陸,列表中除本身以外的用戶 都顯示「加關注」--> 65 <?php if(!empty($_COOKIE['auth']) && $id != $v['uid']){ ?>| <a href="addAttention.php?id=<?php echo $v['uid'];?>&uid=<?php echo $id;?>">加關注</a><?php }?></td> 66 </tr> 67 <?php } ?> 68 <tr><td colspan="4"> 69 <a href="?page=<?php echo ($page-1)<=1?1:($page-1);?>">上一頁</a> 70 <a href="?page=<?php echo ($page+1)>$pageCount?$pageCount:($page+1);?>">下一頁 </a> 71 <a href="?page=1">首頁</a> 72 <a href="?page=<?php echo $pageCount;?>">尾頁</a> 73 當前<?php echo $page;?>頁 74 總共<?php echo $pageCount;?>頁 75 共<?php echo $count;?>用戶 76 </td> 77 </tr> 78 </table> 79 <table cellspacing="0" cellpadding="2" border="1"> 80 <caption>個人關注</caption> 81 <?php 82 $data = $redis->smembers('user:'.$id.':following'); 83 foreach ($data as $value) { 84 $row = $redis->hgetall('user:'.$value); 85 ?> 86 <tr> 87 <td><?php echo $row['uid'];?></td> 88 <td><?php echo $row['name'];?></td> 89 <td><?php echo $row['age'];?></td> 90 </tr> 91 <?php 92 } 93 ?> 94 </table> 95 </body> 96 </html>
前臺顯示:
粉絲同理。
總結:
統計用戶總數能夠把用戶 uid 以鏈表(list)結構存儲;判斷用戶是否已經註冊能夠把用戶名以字符串(string)類型存儲;統計用戶的關注、粉絲以及推薦好友能夠使用集(set)數據類型。