会话用法 和留言板例题
先来说一下留言例题
首先要在数据库建这样一张表备用:
之前都学过登录注册页面,在这里还需要一个登录页面
简单的建一个
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <body> <h1>开发部内部留言板</h1> <form action="denglu1.php" method="post"> <div>用户名:<input type="text" name="yh" /></div> <br /> <div>口令:<input type="text" name="mm" /></div> <br /> <div><input type="submit" value="登录" /><input type="reset" value="复位" /></div> </form> </body> </html>
这里的复位用的是以前学过的一个重置按钮
要想完成登录还需要一个页面,就是上面表单提交的页面,是个纯php页面
<?php session_start(); //用的session来储存数据 include("./fengzhuang.php"); $db = new fengzhuang(); $yh = $_POST["yh"]; $mm = $_POST["mm"]; $sql = "select mm from zhuce where yh = '{$yh}'"; $attr = $db->Query($sql); $mima = $attr[0][0]; if(!empty($mm) && $mm==$mima) //这里是密码非空,并且密码等于用于输入的密码 { $_SESSION["yh"] = $yh; //session中存的用户名等于用户输入的用户名 header("location:liuyan.php"); } else { echo "登录失败!"; }
如果用户登录成功的话,会直接打到主页面
下面再来做一下主页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <?php session_start(); //可以控制登陆 //echo $_SESSION["yh"]; if(empty($_SESSION["yh"])) //判断如果用户名为空,则直接打到登录页面 { header("location:denglu.php"); exit; } /*$yh = $_SESSION["yh"]; include("./fengzhuang.php"); $db = new fengzhuang(); $sql= "select xm from zhuce where yh='{$yh}'"; $attr = $db->Query($sql);*/ ?> <body> <?php //echo "<h1>欢迎登陆:{$attr[0][0]}</h1>"; //注释的如果运行的话,会输出欢迎登陆加用户的姓名 ?> <div><a href="fabu.php">发布信息</a><br /> <a href="denglu.php" onclick=" return confirm('确定退出么?')">退出系统</a> </div> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>发送人</td> <td>发送时间</td> <td>接收人</td> <td>信息内容</td> </tr> <?php include("./fengzhuang.php"); $db = new fengzhuang(); $sql =" select * from xinxi"; $attr = $db->Query($sql); foreach( $attr as $v) { echo " <tr> <td>{$v[1]}</td> <td>{$v[2]}</td> <td>{$v[3]}</td> <td>{$v[4]}</td> </tr>"; } ?> </table> </body> <script type="text/javascript"> </script> </html>
SESSION也可以用来控制登录,如果不走登录界面,直接打上主页面的地址也是可以进入的,所以网页必须要用SESSION控制一下
如果在浏览器上第一次打开主页面,它会返回登录界面,如果在浏览器上有已经登录成功窗口的话,再打开主页面,是可以进的
主页面运行后,是这样子的:
然后再做发布信息的页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <body> <div> <a href="liuyan.php">查看信息</a><br /> <a href="denglu.php" onclick=" return confirm('确定退出么?')">退出系统</a> </div> <h1>信息发送</h1> <form action="fabuchuli.php" method="post"> <input type="hidden" name="fsr" /> <div>接收人:<input type="text" name="jsr"/></div> <input type="hidden" name="fssj" /> <br /> <div>信息内容:<input type="text" name="xxnr" /></div> <div><input type="submit" value="发送" /><input type="reset" value="复位" /></div> </form> </body> </html>
运行后:
当然光这样,填写的信息是发不出去的,最重要的就是它的处理页面
<?php session_start(); $yh = $_SESSION["yh"]; include("./fengzhuang.php"); $db = new fengzhuang(); $sql= "select xm from zhuce where yh='{$yh}'"; $attr = $db->Query($sql); ?> <?php $fsr = "{$attr[0][0]}"; //发送人,也就是取得用户的姓名 $fssj = date("Y-m-d",time()); //当前时间 $jsr = $_POST["jsr"]; $xxnr = $_POST["xxnr"]; //造连接对象 $db = new MySQLi("localhost","root","726","text11"); //写SQL语句 $sql = "insert into xinxi values('','{$fsr}','{$fssj}','{$jsr}','{$xxnr}')"; //执行 $r=$db->query($sql); if($r) { header("location:liuyan.php"); } else { echo "添加失败";
发布后立即返回留言页面,看一下发布后的样子:
页面中多了一条数据,接收人是小红,发送人是用户的姓名
退出系统那里可以加个点击事件,确定退出后打到登录界面
所学知识可以灵活运用
下面再来说一下会话用法
主要讲用SESSION 的用法
购物车类型的可以用SESSION做,只是暂时把数据暂时存在SESSION里,退出再登录就会没有了
下面来做个例子
之前讲过水果表的做法,那就引用个水果表
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <body> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>名称</td> <td>价格</td> <td>产地</td> <td>库存</td> <td>操作</td> </tr> <?php include("./fengzhuang.php"); $db = new fengzhuang(); $sql = "select * from fruit"; $attr = $db->Query($sql); foreach($attr as $v) { echo "<tr> <td>{$v[1]}</td> <td>{$v[2]}</td> <td>{$v[3]}</td> <td>{$v[4]}</td> <td><a href='jiagwc.php?code={$v[0]}'>加购物车</a></td> </tr>"; } ?> </table> </body> </html>
水果表已经做好,只是多加了一个购物车,重要的是它的第二个页面,运用SESSION 来存它传递过来的数据
<?php session_start(); //将传过来的水果加到购物车 $code = $_GET["code"]; //$_SESSION["gwc"]; //1.如果是第一次点击加购物车,做一个二维数组扔到SESSION里 //2.如果不是第一次点击加购物车并且该水果第一次点击,做一个该水果的一维数组扔到SESSION的二维数组里面 //3.如果不是第一次点击加购物车并且该水果不是第一次点击,将SESSION数组里面该水果的数量加1 if(empty($_SESSION["gwc"])) { //1.如果是第一次点击加购物车,做一个二维数组扔到SESSION里 $attr = array( array($code,1) ); $_SESSION["gwc"] = $attr; } else { //判断该水果代号是否在SESSION数组里面出现 $attr = $_SESSION["gwc"]; if(PanDuan($code,$attr)) { //3.如果不是第一次点击加购物车并且该水果不是第一次点击,将SESSION数组里面该水果的数量加1 /*foreach($attr as $v) { if($code == $v[0]) { $v[1] = $v[1]+1; } }*/ for($i=0;$i<count($attr);$i++) { if($code == $attr[$i][0]) { $attr[$i][1]++; } } $_SESSION["gwc"]=$attr; } else { //2.如果不是第一次点击加购物车并且该水果第一次点击,做一个该水果的一维数组扔到SESSION的二维数组里面 $arr = array($code,1); $attr[] = $arr; $_SESSION["gwc"]=$attr; } } var_dump($_SESSION["gwc"]); //判断v是不是在arr里面出现 function PanDuan($v,$arr) { $n = 0; foreach($arr as $a) { if($v == $a[0]) { $n++; } } if($n==0) { return false; } else { return true; } }
我们可以来试一下
点击加购物车
这是第一次点,点击了第一个,下面再返回点击最后一个
这样就一个传入了两条数据,只要不关浏览器,数据都是叠加的,关闭浏览器,重新开一次,上次的数据就会没有了