要实现留言功能,发送者和接受者必不可少,其次就是留言时间留言内容。

要实现的功能:

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> &nbsp;&nbsp;密码:<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>&nbsp;&nbsp;留言板</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的更多相关文章

  1. 2017/05/08 java 基础 随笔

    1.null pointer exception 指针变量obj 没有指向任何空间 你调用它的方法和属性就会出错 2.基本数据类型值传递,不改变原值,调用后就会弹栈,局部变量随时消失 引用数据类型值传 ...

  2. 用php(session)实现留言板功能----2017-05-09

    要实现留言功能,发送者和接受者必不可少,其次就是留言时间留言内容. 要实现的功能: 1.登录者只能查看自己和所有人的信息,并能够给好友留言 2.留言板页面,好友采取下拉列表,当留言信息为空时,显示提示 ...

  3. php......留言板

    部门内部留言板 一.语言和环境 实现语言 PHP 二.要求: 本软件是作为部门内员工之间留言及发送消息使用. 系统必须通过口令验证,登录进入.方法是从数据库内取出用户姓名和口令的数据进行校验. 用户管 ...

  4. python完成留言板功能

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="utf-8&quo ...

  5. 用 Express4 写一个简单的留言板

    Knowledge Dependence:阅读文本前,你需要熟悉 Node.js 编程.Express 以及相关工具和常用中间件的使用. Node.js 以其单线程异步非阻塞的特点,越来越被广大的 W ...

  6. 个人网页的留言板实现与sae的数据库账户配置

    个人网页(github)的留言板终于搞定了.总之后端的东西不会写,只有修改以前教程里面的文件.记录一下重要的过程. 使用了留言保存的send()函数,模版有注册登录功能.根据需求修改了一下,去掉了登录 ...

  7. (实用篇)php通过会话控制实现身份验证实例

    会话控制的思想就是指能够在网站中根据一个会话跟踪用户.这里整理了详细的代码,有需要的小伙伴可以参考下. 概述 http 协议是无状态的,对于每个请求,服务端无法区分用户.PHP 会话控制就是给了用户一 ...

  8. JSP简易留言板

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

  9. dede留言板BUG解决

    dede留言板刷新后空白BUG解决 DEDE留言板验证码留空或者不正确返回空白页面的解决方法 解决方法如下进入文件/plus/guestbook.php 找到代码ShowMsg("验证码不正 ...

随机推荐

  1. 看懂SqlServer查询计划 SQL语句优化分析

    转自 http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html 阅读目录 开始 SQL Server 查找记录的方法 SQL Ser ...

  2. java学习笔记 --- java基础语法

    一.java标识符,关键字,保留字 1.标识符 用来增强程序阅读性自定义的名字.类名,变量名,方法名等都可以被称为标识符 标识符的组成: 1.由数字(0-9),字母(a-z,A-Z),下划线(_),美 ...

  3. (转)Zabbix Agent-Windows平台配置指导

      原地址:http://blog.itpub.net/26739940/viewspace-1169538/   zabbix是一个CS结构的监控系统,支持ping,snmp等很多的监控,但是大部分 ...

  4. 当Node.js遇见Docker

    Node.js Best Practices - How to Become a Better Developer in 2017提到的几点,我们Fundebug深有同感: 使用ES6 使用Promi ...

  5. 百度cdn资源公共库共享及常用开发接口

    CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用 网站:http://cdn.code.baidu.com/ 常用资源: jquery: http://libs.baidu.c ...

  6. Tomcat源码分析(一)

    这段时间简单的看了一下Tomcat的源码,在这里做个笔记!   1. tomcat 架构图 Catalina: tomcat的顶级容器,main()方法中就是通过,创建Catalina 对象实例,来启 ...

  7. C++ 头文件系列(exception)

    内容概览 一图解百问,但是有些地方我们需要特别指出: 类型在这里指通过typedef重定义的,例如函数类型.指针类型等. exception_ptr 在标准中是未定义具体实现的,因此它可能是类也可能是 ...

  8. 老李分享:大数据框架Hadoop和Spark的异同 1

    老李分享:大数据框架Hadoop和Spark的异同   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨 ...

  9. VS窗体选择BackGroupImage属性报错:已添加具有相同键的项

    高墙我今天第一次遇见这个问题.既然说是"已添加具有相同键的项."那我自然地认为会不会是文件夹哪里命名了两个相同的文件名.然后在这个Exception上越走越远. 好了不说废话.出现 ...

  10. [转载]转载一篇好文章作为Java与面向对象之随感(3)

    关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用, 那实在没法很 ...