PHP实现cookie浏览历史纪录
1.思路:用户查看物品id的时候,记录查看物品id,以及物品的其他信息,[以ID-物品信息,ID-物品信息]格式存入cookie
数据库Helper:mysqlHelper.class.php
<?php /* @author:luowen @time:2013-12-17 @desc:mysql helper */ class MysqlHelper{ private static $instance = null; private $host = null; private $username = null; private $password = null; private $database = null; private $conn = null; final private function __construct($conf){ $this -> host = $conf['host']; $this -> username = $conf['username']; $this -> password = $conf['password']; $this -> database = $conf['database']; $this -> conn(); $this -> query("use " . $this -> database); } private function __clone(){} private function conn(){ $this -> conn = mysql_connect($this -> host,$this -> username, $this -> password); if(!$this -> conn){ die(mysql_error()); } } public static function getInstance($conf){ if(!(self::$instance instanceof self)) MysqlHelper::$instance = new self($conf); return MysqlHelper::$instance; } public function getOne($sql){ $source = $this -> query($sql); $resSource = null; if($row = mysql_fetch_assoc($source)){ $resSource = $row; } $this -> freeSource($source); return $resSource; } public function getAll($sql){ $source = $this -> query($sql); $resSource = array(); while($row = mysql_fetch_assoc($source)) { $resSource[] = $row; } $this -> freeSource($source); return $resSource; } public function query($sql){ return mysql_query($sql,$this -> conn); } public function close(){ mysql_close($this -> conn); } private function freeSource($resource){ mysql_free_result($resource); } }
2,数据库配置文件db.inc.php
<?php /* db configure file */ $conf = array( "host" => "localhost", "username" => "root", "password" => "luowen", "database" => "test" );
3,数据表模型luowenModel.class.php
<?php /* luowen表模型 */ class LuowenModel{ private $tableName = "luowen"; private $dbInstance = null; public function __construct($db){ $this -> dbInstance = $db; } public function getOne($id){ $sql = "select * from " . $this -> tableName . " where id = " . $id; $res = $this -> dbInstance -> getOne($sql); return $res; } public function getAll(){ $sql = "select * from " . $this -> tableName; return $this -> dbInstance -> getAll($sql); } }
4,首页index.php
<?php /* @author:luowen @time:2013-12-17 @desc:web view history store */ include_once("./db.inc.php"); include_once("./mysqlHelper.class.php"); include_once("./luowenModel.class.php"); $db = MysqlHelper::getInstance($conf); $luowenModel = new LuowenModel($db); //获取所有数据 $res = $luowenModel -> getAll(); ?> <html> <head> <title>index</title> </head> <body> <table cellspacing = 0 cellpadding=0 style='border-collapse:collapse;' border = '1'> <thead> <th>Id</th> <th>Username</th> <th>Age</th> <th>Date</th> <th>CreateTime</th> <th>Detial</th> </thead> <tbody> <?php foreach($res as $k => $v){ ?> <tr> <?php foreach($v as $val){ ?> <td><?php echo $val; ?></td> <?php } ?> <td><a href="./detial.php?id=<?php echo $v["id"] ?>">查看详情</a></td> </tr> <?php } ?> </tbody> <table> <h1>浏览历史</h1> <table border="1"cellpadding=0 cellspacing=0 style="border-collapse:collapse;"> <thead> <th>ID</th> <th>Name</th> </thead> <tbody> <?php //获取cookie里面存的数据 格式为:ID1-name1,ID2-name2 @$list = $_COOKIE['viewHistory']; $viewArr = array_reverse(explode(',',$list)); foreach($viewArr as $val){ ?> <tr> <td><?php echo substr($val,0,strpos($val,'-'));?></td> <td> <?php echo substr($val,strpos($val,'-')+1,strlen($val));?></td> </tr> <?php } ?> </tbody> </table> <hr/> </body> </html>
5,物品详细页
<?php include_once("./db.inc.php"); include_once("./mysqlHelper.class.php"); include_once("./luowenModel.class.php"); $db = MysqlHelper::getInstance($conf); $luowenModel = new LuowenModel($db); @$id = $_GET['id']; if(!is_numeric($id)){ echo "ID错误!"; echo "<br/><a href='./index.php'>返回首页</a>"; return; } $res = $luowenModel -> getOne($id); if($res == null) { echo "没有此数据!"; return; } $name = $res['name']; buildCookie($id, $name); //构造history历史记录 function buildCookie($id,$name){ $viewArr = array(); @$viewBooks = $_COOKIE['viewHistory']; if(!isset($viewBooks)){ setCookie("viewHistory",$id.'-'.$name,time()+3600); return; } $list = explode(',',$viewBooks); foreach($list as $key => $val){ $flag = isInArr($list,$val,$key,$id,$name); if($flag)break; } if(!$flag){ if(count($list) >= 10){ unset($list[0]); array_push($list,$id.'-'.$name); }else{ array_push($list,$id.'-'.$name); } } $resHistory = implode(',',$list); //$trimHistory = substr($resHistory,0,strlen($resHistory)); setCookie("viewHistory",$resHistory,time()+1000); return; } //判断是否在数组中 function isInArr(&$list,$val,$key,$id,$name) { if($val == $id.'-'.$name){ unset($list[$key]); array_push($list,$id."-".$name); return true; } } ?> <html> <head> <title>detial </title> </head> <body> <h1>detial</h1> <hr/> <table border='1' cellspacing=0 style="border-collapse:collapse;" cellpadding='0'> <thead> <th>Id</th> <th>name</th> <th>age</th> <th>date</th> <th>createdate</th> </thead> <tbody> <tr> <?php foreach($res as $val){ ?> <td><?php echo $val; ?></td> <?php } ?> </body> </html>