目的:通过留言板(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

 <?php

 $redis = new Redis();
$redis->connect( "127.0.0.1", 6379 );
$redis->auth( "ghostwu" ); ?>

1、注册功能( reg.php )

 <!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>用户注册页面</title>
</head>
<body>
<h3>用户注册</h3>
<form action="do_reg.php" method="post">
<p>
用户名: <input type="text" name="user" />
</p>
<p>
密码:<input type="password" name="pwd" />
</p>
<p>
年龄: <input type="text" name="age" />
</p>
<p>
<input type="submit" value="注册" />
<input type="reset" value="重置" />
</p>
</form>
</body>
</html>

2、处理注册( do_reg.php )

 <?php
require "./redis_connect.php"; $user = $_POST['user'];
$pwd = md5( $_POST['pwd'] );
$age = $_POST['age']; $uid = $redis->get( "username:" . $user );
if( empty( $uid ) ) {
$uid = $redis->incr( "userid" );
$redis->hMset( "user:" . $uid, array( "uid" => $uid, "user" => $user, "pwd" => $pwd, "age" => $age ) );
$redis->rpush( "uid", $uid );
$redis->set( "username:" . $user, $uid );
header( "Location:./list.php" );
exit();
}else {
die( "user already exists " );
} ?>

3,登录(login.php)

 <!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>用户登录页面</title>
</head>
<body>
<?php
require "./redis_connect.php";
if( isset( $_POST['login'] ) || $_POST['login'] == '登录' ) {
$user = $_POST['user'];
$pwd = $_POST['pwd'];
$uid = $redis->get( "username:" . $user );
if( !empty( $uid ) ) {
$db_pwd = $redis->hget( "user:" . $uid, "pwd" );
if( md5( $pwd ) == $db_pwd ) {
$auth = md5( time() . $user . rand() );
$redis->set( "auth:" . $auth, $uid );
setcookie( "auth", $auth, time() + 86400 );
header( "Location:./list.php" );
}else {
echo "<script>alert('用户密码错误');</script>";
}
}else {
echo "<script>alert('该用户不存在');</script>";
}
}
?>
<h3>用户登录</h3>
<form action="" method="post">
<p>
用户名: <input type="text" name="user" />
</p>
<p>
密码:<input type="password" name="pwd" />
</p>
<p>
<input type="submit" value="登录" name="login" />
</p>
</form>
</body>
</html>

4,列表页( list.php )

 <meta charset="utf-8" />
<?php
require( "./redis_connect.php" );
?>
<a href="./reg.php">注册</a>
<?php
if( !empty( $_COOKIE['auth'] ) ) {
$login_uid = $redis->get( "auth:" . $_COOKIE['auth'] );
$userName = $redis->hget( "user:" . $login_uid, "user" );
?>
欢迎您:<?php echo $userName; ?> | <a href="./logout.php">退出</a>
<?php
}else {
?>
<a href="./login.php">登录</a>
<?php
}
?>
<?php
$total = $redis->lsize( "uid" );
$pageSize = 3;
$p = isset( $_GET['p'] ) ? $_GET['p'] : 1;
$page = ceil( $total / $pageSize );
$uids = $redis->lrange( "uid", ( $p - 1 ) * $pageSize, ( ( $p - 1 ) * $pageSize + $pageSize - 1 ) );
$userList = array();
foreach( $uids as $uid ) {
$userList[] = $redis->hgetall( "user:" . $uid );
}
?> <h3>列表数据</h3>
<table>
<tr>
<th>uid</th>
<th>用户名</th>
<th>年龄</th>
<th>操作</th>
</tr>
<?php
foreach( $userList as $user ) {
?>
<tr>
<td><?php echo $user['uid']; ?></td>
<td><?php echo $user['user']; ?></td>
<td><?php echo $user['age']; ?></td>
<td>
<a href="delete.php?uid=<?php echo $user['uid']; ?>">删除</a>
<a href="edit.php?uid=<?php echo $user['uid']; ?>">修改</a>
<?php
if( !empty( $_COOKIE['auth'] ) && ( $login_uid != $user['uid'] ) ) {
?>
<a href="./do_fans.php?login_id=<?php echo $login_uid; ?>&uid=<?php echo $user['uid']; ?>">关注</a>
<?php
}
?>
</td>
</tr>
<?php
}
?>
<!--分页开始-->
<tr>
<td colspan="4">
<?php
for( $i = 1; $i <= $page; $i++ ) {
?>
<a href="?p=<?php echo $i; ?>"><?php echo $i; ?></a>
<?php
}
?>
</td>
</tr>
</table> <h3>我关注了谁</h3>
<table>
<tr>
<th>uid</th>
<th>用户名</th>
<th>年龄</th>
</tr>
<?php
$myWatchIds = $redis->smembers( "user:" . $login_uid . ":watch" );
foreach( $myWatchIds as $wId ){
$watchList = $redis->hgetall( "user:" . $wId );
?>
<tr>
<td><?php echo $watchList['uid']; ?></td>
<td><?php echo $watchList['user']; ?></td>
<td><?php echo $watchList['age']; ?></td>
</tr>
<?php
}
?>
</table>
<h3>我的fans</h3>
<table>
<tr>
<th>uid</th>
<th>用户名</th>
<th>年龄</th>
</tr>
<?php
$myFlowerIds = $redis->smembers( "user:" . $login_uid . ":flowers" );
foreach( $myFlowerIds as $fId ){
$flowerList = $redis->hgetall( "user:" . $fId );
?>
<tr>
<td><?php echo $flowerList['uid']; ?></td>
<td><?php echo $flowerList['user']; ?></td>
<td><?php echo $flowerList['age']; ?></td>
</tr>
<?php
}
?>
</table>

5,编辑 ( edit.php)

 <meta charset="utf-8" />
<?php
require "./redis_connect.php";
$uid = intval( $_GET['uid'] );
if( empty( $uid ) ){
header( "Location:./list.php" );
exit();
}
$userInfo = $redis->hgetall( "user:" . $uid );
?> <form action="do_edit.php" method="post">
<p>
用户名: <input disabled type="text" name="user" value="<?php echo $userInfo['user']; ?>" />
</p>
<p>
年龄:<input type="text" name="age" value="<?php echo $userInfo['age']; ?>" />
</p>
<p>
<input type="submit" value="修改" name="edit" />
</p>
<input type="hidden" value="<?php echo $userInfo['uid']; ?>" name="uid" />
</form>

6,处理更新( do_edit.php )

 <?php
require( "./redis_connect.php" );
$uid = intval( $_POST['uid'] );
$age = $_POST['age']; if( empty( $uid ) ) {
header( "Location:./edit.php" );
exit();
}
$res = $redis->hmset( "user:". $uid, array( "age" => $age ) );
if( $res ) {
header( "Location:./list.php" );
}else {
header( "Location:./edit.php" );
}
exit();
?>

7,删除(delete.php)

 <?php
require( "./redis_connect.php" );
$uid = intval( $_GET['uid'] );
if( empty( $uid ) ) {
header( "Location:./list.php" );
exit();
}
$userName = $redis->get( "user:" . $uid );
$redis->del( "user:" . $uid );
$redis->del( "username:" . $userName );
$redis->lrem( "uid", $uid );
header( "Location:./list.php" );
?>

8,注销( logout.php )

 <?php
require "./redis_connect.php";
if( isset( $_COOKIE['auth'] ) ){
$redis->del( "auth:" . $_COOKIE['auth'] );
setcookie( "auth", "", time() - 86400 );
header( "Location:./list.php" );
exit();
}
?>

9,互粉( do_fans.php )

 <?php
require "./redis_connect.php";
$login_id = intval( $_GET['login_id'] );
$uid = intval( $_GET['uid'] );
if( empty( $login_id ) || empty( $uid ) ) {
header( "Location:./list.php" );
exit();
}
//当前用户关注
$redis->sadd( "user:" . $login_id . ":watch", $uid );
//被当前用户关注
$redis->sadd( "user:" . $uid . ":flowers", $login_id );
header( "Location:./list.php" );
exit();
?>

php+redis实战留言板(todolist)与互粉功能的更多相关文章

  1. Flask实战-留言板-安装虚拟环境、使用包组织代码

    Flask实战 留言板 创建项目目录messageboard,从GreyLi的代码中把Pipfile和Pipfile.lock文件拷贝过来,这两个文件中定义了虚拟环境中需要安装的包的信息和位置,进入m ...

  2. [js高手之路] vue系列教程 - 实现留言板todolist(3)

    通过前面两篇文章的的学习,我们掌握了vue的基本用法. 本文,就利用这些基础知识来实现一个留言板, 老外把他称之为todolist. 第一步.使用bootstrap做好布局 <!DOCTYPE ...

  3. flask实战-留言板-Web程序开发流程

    Web程序开发流程 在实际的开发中,一个Web程序的开发过程要设计多个角色,比如客户(提出需求).项目经理(决定需求的实现方式).开发者(实现需求)等,在这里我们假设自己是一个人全职开发.一般来说一个 ...

  4. Flask实战-留言板-使用Faker生成虚拟数据

    使用Faker生成虚拟数据 创建虚拟数据是编写Web程序时的常见需求.在简单的场景下,我们可以手动创建一些虚拟数据,但更方便的选择是使用第三方库实现.流行的python虚拟数据生成工具有Mimesis ...

  5. Flask实战-留言板-使用Bootstrap-Flask简化页面编写

    使用Bootstrap-Flask简化页面编写 扩展Bootstrap-Flask内置了可以快速渲染Bootstrap样式HTML组件的宏,并提供了内置的Bootstap资源,方便快速开发,使用它可以 ...

  6. Flask实战-留言板-使用Flask-DebugToolbar调试程序、Flask配置的两种组织形式

    使用Flask-DebugToolbar调试程序 扩展Flask-DebugToolbar提供了一系列调试功能,可以用来查看请求的SQL语句.配置选项.资源加载情况等信息.这些信息在开发时会非常有用. ...

  7. django实战-留言板

    对应github链接:https://github.com/pshyms/django/tree/master/liuyanban 第一天 1. 创建一个新项目后,新建一个应用程序 python ma ...

  8. 写一个简单的HTML留言板

    最近有点懒,没码什么字,防止遗忘,从头开始码,写一个简单的HTML留言板.包含两个文件,book.html还有style.css,放在同一目录下. book.html 1 <!DOCTYPE h ...

  9. JSP简易留言板

    写在前面 在上篇博文JSP内置对象中介绍JSP的9个内置对象的含义和常用方法,但都是比较理论的知识.今天为大家带来一个小应用,用application制作的简易留言板. 包括三个功能模块:留言提交.留 ...

随机推荐

  1. angularJS详解

    这篇文章转载  kooky798 的博客,http://blog.csdn.net/yy374864125/article/details/41349417, 写到这么详细也是没谁了,必须粉一个 1 ...

  2. mybatis四大接口之 ResultSetHandler

    1. 继承结构 2. ResultSetHandler public interface ResultSetHandler { // 将Statement执行后产生的结果集(可能有多个结果集)映射为结 ...

  3. CSS之浏览器默认样式问题

    今天自己写css样式时,其中用到了<ul>标签,设置了一系列效果后运行,发现位置与设置有出入.chrome上打开检查项,发现<ul>标签的styles底部多了以下一段: ul, ...

  4. 阿里云centos7安装图形界面

    CentOS 7 系统下,本文以 MATE 桌面环境安装进行安装配置说明: 登录服务器,执行如下指令安装桌面环境: # 先安装 MATE Desktop    yum groups install & ...

  5. jieba分词(3)

    jieba分词中Tokenize的使用,Tokenize主要是用来返回词语在原文的弃之位置,下面贴上代码: #-*- coding:utf-8 -*- from __future__ import u ...

  6. 计算机网络 之 TCP协议报文结构

    前言:上学期实训课,由于要做一个网络通信的应用,期间遇到各种问题,让我深感计算机网络知识的薄弱.于是上网查找大量的资料,期间偶然发现了roc大神的博客,很喜欢他简明易懂的博文风格.本文受roc的< ...

  7. SpringSecurity学习之基于数据库的用户认证

    SpringSecurity给我们提供了一套最基本的认证方式,可是这种方式远远不能满足大多数系统的需求.不过好在SpringSecurity给我们预留了许多可扩展的接口给我们,我们可以基于这些接口实现 ...

  8. Linux 部署 ASP.NET Core 的一些问题记录

    异常错误: 关闭 IP6 #修改 vi /etc/sysctl.conf # 添加如下三条设置    net.ipv6.conf.all.disable_ipv6 = 1    net.ipv6.co ...

  9. Redis 缓存服务配置与使用

    缓存服务器Couchbase另外一种选择Redis documentation http://redis.io/documentation http://redis.cn/documentation. ...

  10. JavaScript -- Form

    -----048-Form.html----- <!DOCTYPE html> <html> <head> <meta http-equiv="co ...