要實現留言功能,發送者和接受者必不可少,其次就是留言時間留言內容。
要實現的功能:
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"); ?>
到這一步,一個簡單的留言功能就可以實現了~~~~