(详细)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("验证码不正 ...
随机推荐
- Redhat
vm1 port:192.168.210.102 user:root;pwd:123456 user:openflowpwd:openflowKkm09!q esx4.1 server 安装一.修改I ...
- 【SCOI2008】着色方案
题目: http://oj.changjun.com.cn/problem/detail/pid/2027 pre.cjk { font-family: "Droid Sans Fallba ...
- 网站优化记录-通过命令预编译Asp.net 网站,成功优化到毫秒级别。
在去年一次项目上线时发现部署的站点首次访问跟回收后响应特别慢.(使用的是vs工具预编译的方式发布),在随后找到解决办法是通过命令预编译Asp.net 网站,成功解决站点响应在毫秒级别. 预编译 ASP ...
- iOS回顾笔记(09) -- Cell的添加、删除、更新、批量操作
iOS回顾笔记(09) -- Cell的添加.删除.更新.批量操作 项目中经常有对UITableViewCell做各种操作的需求: 添加一个新的cell 删除某行cell 刷新cell上某行数据(如修 ...
- 小练习,判断X的奇偶性
package lianxi1; public class text { public static void main(String[] args) { ; ==) { System.out.pri ...
- poj 3070 Fibonacci (矩阵快速幂乘/模板)
题意:给你一个n,输出Fibonacci (n)%10000的结果 思路:裸矩阵快速幂乘,直接套模板 代码: #include <cstdio> #include <cstring& ...
- Azure IoT 技术研究系列2-起步示例之设备注册到Azure IoT Hub
上篇博文中,我们主要介绍了Azure IoT Hub的基本概念.架构.特性: Azure IoT 技术研究系列1-入门篇 本文中,我们继续深入研究,做一个起步示例程序:模拟设备注册到Azure IoT ...
- mavne的创建
一.maven的前期准备 1.建议使用myeclipse2013的版本的因为在你创建web项目是它把你的目录结构给你创建好,myeclipse也自带maven插件 2.jdk1.6以上 3.maven ...
- 初学 Java Script (算数运算及逻辑术语)
在JS中常用的算数运算符与其他编程类语言类似,逻辑术语也近乎相同. 一.常用算数运算符 1.基本算数运算符 赋值运算符:= : 加号:+ : 减号: - : 乘号: * : 除号: / : 求余: % ...
- windows下使用wineshark分析抓取本地回环包
## 摘要 由于windows系统没有提供本地回环网络的接口,用Wireshark监控网络的话看不到localhost的流量. 想要获取本地的网络数据包,可以通过一款小巧的开源软件RawCap来进行抓 ...