(详细)php实现留言板---会话控制-----------2017-05-08
要实现留言功能,发送者和接受者必不可少,其次就是留言时间留言内容。
要实现的功能:
1、登录者只能查看自己和所有人的信息,并能够给好友留言
2、留言板页面,好友采取下拉列表,当留言信息为空时,显示提示,并停留在当前页面
3、查看过的信息,消息显示已读
4、用$_SESSION[]获取登陆者,并用$_SESSION[]防止用户绕过登录直接进入主页面
第一步建数据库:
需要用到的三张表分别为:friend表,yuangong表,chenai表
yuangong表:
friend表:
chenai表
第二步写登录页面:
1、denglu.php
效果图:(简单)
代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> .aa{ height: 200px; width: 300px; margin: 100px auto; border: 1px solid black; text-align: center; line-height: 20px; padding-top: 50px; } </style> </head> <body> <div class="aa"> <form method="post" action="chuli.php"> <div>用户名:<input type="text" name="username"/></div></br> <div> 密码:<input type="text" name="pwd"/></div></br> <input type="submit" value="登录" /> </form> </div> </body> </html>
2、登录页面的处理页面chuli.php
<?php session_start(); //开始会话控制 $users = $_POST["username"]; $pwd = $_POST["pwd"]; require "DB.class.php"; $db = new DB(); $sql = "select password from yuangong where UserName = '{$users}'"; //echo $sql; $arr = $db->query($sql); //判断用户名和密码是否和数据库匹配 if(count($arr)){ if($arr[0][0]==$pwd && !empty($pwd)){ $_SESSION["username"]="$users"; //存取数据,便于后面的php页面调用 header("location:main.php"); } } ?>
第三步主页面main.php
效果图:
注:如上图所示:“陈一“为登陆者,故此处为陈一,显示的都是陈一接收到的信息。
代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <?php //防止用户绕过登录 session_start(); if(empty($_SESSION["username"])) { header("location:denglu.php"); exit; } require "DB.class.php"; $db = new DB(); $zr = $_SESSION["username"]; //显示登录者,并据此只显示接收者是登陆者的留言和群发的留言 $sql2 = "select name from yuangong where username ='{$zr}'"; $arr2 = $db->query($sql2); $zr = $arr2[0][0]; //取出员工表中username ='{$zr}'的name echo $zr.",请查看您的留言信息:"; ?> <table border="1px" cellpadding="0px" cellspacing="0px" width="50%"> <tr> <td>发送人</td> <td>接收人</td> <td>发送时间</td> <td>信息内容</td> <td>是否已读</td> </tr> <?php //遍历输出属于登陆者的留言和群发消息 $sql ="select * from chenai where Receiver = '{$zr}' or receiver = 'all'"; $arr = $db->query($sql); foreach($arr as $v){ //当为群发时,显示所有人,不显示all. 如果前面为汉字“所有人”,则不需要此步骤 if($v[2]=="all"){$v[2]="所有人";} // 实现状态的转变 //var_dump($v[5]); $str = ""; if($v[5]) { $str = "<span >已读</span>"; } else{ $str = " <a href='zt-chuli.php?ids={$v[0]}'> 未读</a>"; } echo"<tr> <td>{$v[1]}</td> <td>{$v[2]}</td> <td>{$v[3]}</td> <td value='{$v[4]}'> <a href='xx-chuli.php?ids={$v[0]}'> {$v[4]} </a></td> <td>{$str}</td> </tr>"; } ?> </table> <a href="fabu.php">返回留言页面</a> <a href="exit.php">退出系统</a> </body> </html>
第四步写留言页面:
1、发布页面fabu.php
效果图:
实现功能:
下拉列表是陈一的好友
留言板内容不能为空!
代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> .aa{ height: 100px; width: 300px; margin: 0px auto; } .bb{ height: 200px; width: 300px; margin: 0px auto; } </style> </head> <body> <div class="aa"> <h2> 留言板</h2> <?php session_start(); if(empty($_SESSION["username"])) { header("location:denglu.php"); exit; } require "DB.class.php"; $db = new DB(); $username= $_SESSION["username"]; //获取发送者 $sql3 = "select name from yuangong where username='{$username}'"; $arr3 = $db->query($sql3); $lyz= $arr3[0][0]; echo "欢 迎 ".$lyz.", 请 留 言!"; ?> </div> <div class="bb"> <form method="post" action="nr-chuli.php" id="bb"> <div>接收人: <!-- 有问题,从用工表里读出的人并不一定都是我的好友,所以应该从friend表里读取属于我的好友,这样读出来的好友不包含我--> <!--用下拉列表输出所有好友--> <select name="receive"> <?php $sql4 = "select Friend from friend where me='{$lyz}'"; echo $sql4; $arr4 = $db->query($sql4); var_dump($arr4); foreach($arr4 as $v){ echo"<option value='{$v[0]}'>{$v[0]}</option>"; } ?> <!--也可以直接把all换成所有人,后面就可以不用转换--> <option value="all" value="all">All</option> </select> </div> <div>留言:<br /><textarea name="nr" cols="30" rows="10" id="cc"></textarea></div> <input type="submit" value="发送" onclick="panduan()" /></br> <a href="denglu.php" >返回登录页面</a> <a href="main.php">查看我的留言</a> </form> </div> </body> </html> <!--当留言为空时--> <script> function panduan(){ var a = document.getElementById("cc").value; if(a=="") { //给提示 alert ("留言不能为空,您难道对您的好友这么无语么?哈哈请重新输入!"); //页面不跳转 document.getElementById("bb").removeAttribute("action"); } } </script>
2、发布处理页面:nr-chuli.php
<?php session_start(); $_SESSION["username"]; if(empty($_SESSION["username"])) { header("location:denglu.php"); exit; } $receive = $_POST["receive"]; $comment = $_POST["nr"]; $t=date("Y-m-d H:i:s"); $sender = $_SESSION["username"]; //var_dump($sender); require "DB.class.php"; $db = new DB(); //获取发送者 $sql = "select name from yuangong where username='{$sender}'"; $arr = $db->query($sql); $sender = $arr[0][0]; //var_dump($arr); //往chenai表里添加信息 $sql2 = "insert into chenai values ('','$sender','$receive','$t','$comment',0)"; if($db->query($sql2,0)) { echo "留言成功!"; } echo " <a href='fabu.php'>继续留言</a> "; echo " <a href='main.php'>查看我的留言</a> "; ?>
第五步:信息处理页面xx-chuli.php
实现功能:点击最后一条留言内容,跳转到上面第二图,返回我的留言查看会发现最后一条信息变成已读
代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> .aa{ height: 200px; width: 300px; margin-left: 100px; border: 1px solid black; } </style> </head> <body> <?php session_start(); $ids = $_GET["ids"]; $zrname=$_SESSION["username"]; //防止用户绕过登录 if(empty($_SESSION["username"])) { header("location:denglu.php"); exit; } //var_dump($ids); //var_dump($_SESSION["username"]); require "DB.class.php"; $db =new DB(); //调取登陆者的姓名 $sql = "select name from yuangong where username = '{$zrname}'"; $arr = $db->query($sql); $zrname=$arr[0][0]; //var_dump($zrname); //获取发送者的姓名 $sql2 = "select sender from chenai where ids='{$ids}'"; $arr2 = $db->query($sql2); $name=$arr2[0][0]; //var_dump($name); echo $zrname.", 这是".$name."给您的留言:"."</br> </br>"; $sql3 = "select comment from chenai where ids='{$ids}'"; $arr3 = $db->query($sql3); $nr=$arr3[0][0]; echo "<div class='aa'> {$nr} </div>"; //改变是否已读的状态 $sql4 = "update chenai set states=1 where ids='{$ids}'"; $db->query($sql4,0); //echo "<a href='zt-chuli.php?ids={$ids}'>我的留言</a>"; // 这样也可以传值 //echo "<a href='fabu.php'>去留言</a>"; ?> <a href="main.php">我的留言</a> <a href="fabu.php">去留言</a> </body> </html>
如果不想查看内容,可直接点击未读也可以转成已读:zt-chuli.php
<?php $ids = $_GET["ids"]; require "DB.class.php"; $db =new DB(); $sql = "update chenai set states=1 where ids='{$ids}'"; var_dump($db->query($sql,0)); if($db->query($sql,0)){ header("location:main.php"); } ?>
第六步退出登录exit.php
<?php session_start(); unset($_SESSION["username"]); header("location:denglu.php"); ?>
到这一步,一个简单的留言功能就可以实现了~~~~
it's a good day~~~
(详细)php实现留言板---会话控制-----------2017-05-08的更多相关文章
- 2017/05/08 java 基础 随笔
1.null pointer exception 指针变量obj 没有指向任何空间 你调用它的方法和属性就会出错 2.基本数据类型值传递,不改变原值,调用后就会弹栈,局部变量随时消失 引用数据类型值传 ...
- 用php(session)实现留言板功能----2017-05-09
要实现留言功能,发送者和接受者必不可少,其次就是留言时间留言内容. 要实现的功能: 1.登录者只能查看自己和所有人的信息,并能够给好友留言 2.留言板页面,好友采取下拉列表,当留言信息为空时,显示提示 ...
- php......留言板
部门内部留言板 一.语言和环境 实现语言 PHP 二.要求: 本软件是作为部门内员工之间留言及发送消息使用. 系统必须通过口令验证,登录进入.方法是从数据库内取出用户姓名和口令的数据进行校验. 用户管 ...
- python完成留言板功能
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="utf-8&quo ...
- 用 Express4 写一个简单的留言板
Knowledge Dependence:阅读文本前,你需要熟悉 Node.js 编程.Express 以及相关工具和常用中间件的使用. Node.js 以其单线程异步非阻塞的特点,越来越被广大的 W ...
- 个人网页的留言板实现与sae的数据库账户配置
个人网页(github)的留言板终于搞定了.总之后端的东西不会写,只有修改以前教程里面的文件.记录一下重要的过程. 使用了留言保存的send()函数,模版有注册登录功能.根据需求修改了一下,去掉了登录 ...
- (实用篇)php通过会话控制实现身份验证实例
会话控制的思想就是指能够在网站中根据一个会话跟踪用户.这里整理了详细的代码,有需要的小伙伴可以参考下. 概述 http 协议是无状态的,对于每个请求,服务端无法区分用户.PHP 会话控制就是给了用户一 ...
- JSP简易留言板
写在前面 在上篇博文JSP内置对象中介绍JSP的9个内置对象的含义和常用方法,但都是比较理论的知识.今天为大家带来一个小应用,用application制作的简易留言板. 包括三个功能模块:留言提交.留 ...
- dede留言板BUG解决
dede留言板刷新后空白BUG解决 DEDE留言板验证码留空或者不正确返回空白页面的解决方法 解决方法如下进入文件/plus/guestbook.php 找到代码ShowMsg("验证码不正 ...
随机推荐
- SharePoint 配置传出电子邮件设置
1. 环境参数说明 A) Windows Server 2012 R2 B) SharePoint 2016 C) 第三方邮件服务器(smtp.3th.com - 有负载均衡,即对应多个IP服务器) ...
- Ubuntu 16.04 设置MySQL远程访问权限
本文记录一下在Ubuntu 16.04版本下设置MySQL数据库的远程访问. 第一步:修改配置文件的端口绑定 打开的目录可能会根据MySQL的版本稍有不同,可以先尝试打开/etc/mysql/my.c ...
- 【机器学习】代价函数(cost function)
注:代价函数(有的地方也叫损失函数,Loss Function)在机器学习中的每一种算法中都很重要,因为训练模型的过程就是优化代价函数的过程,代价函数对每个参数的偏导数就是梯度下降中提到的梯度,防止过 ...
- Confluence安装&破解&汉化
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...
- SPOJ - BITDIFF: Bit Difference [神妙の预处理]
tags:[数学][预处理]题解:我们用一种巧妙的预处理姿势:记录下每一个数位上分别出现了多少个1.如果第i个数位上出现了cnt[i]个1,那么,在这个数位上产生的"差异值"为:2 ...
- 【Electron】Electron开发入门
Electron简介: Electron提供了丰富的本地(操作系统)的API,使你能够使用纯JavaScript来创建桌面应用程序,并且跨平台(win,mac,linux等各种PC端平台).与其它各种 ...
- 分享一个低配VPS下运行的mysql配置文件
在各种内存CPU核心只有1/2核,内存只有512M/1G的vps下,内存.CPU.硬盘都不是太充裕.因此主要思路是,禁止吃内存大户innodb引擎,默认使用MyISAM.禁止吃硬盘大户log-bin, ...
- 老李分享:jvm结构简介 1
老李分享:jvm结构简介 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...
- 老李分享:开发python的unittest结果输出样式
老李分享:开发python的unittest结果输出样式 Python的unittest结果命令行输出,格式比较乱.为了提高格式输出的可读性,实现可以不同的颜色标识.所以准备扩展Python的un ...
- Java ClassLoader加载机制
一.体系结构(自上向下) 1.Bootstrap ClassLoader(BootStrapClassLoader) --- 启动类加载器或者叫引导类加载器,加载jdk核心的APIs,这些APIs一般 ...