这篇文章,可能是淘宝天猫内部优惠券最后一篇了,中间也遇到许多问题,毕竟自己也就会写一点点前端,所以给这篇文章先来个总结:
1、excel转dat文件类型,把dat文件做数据库,php操作dat数据库;
2、dat文件读取编码问题(会乱码);
3、dat文件读取内容(foreach循环),文件的打开和关闭操作就不提了;
4、多个关键字和数据库中的信息比对,提取需要的信息(strstr用法);
5、重点来了,我们要开始分页了(array_slice用法);
6、分页问题,分页第一页正常,点击第二页开始,后面都没有数据;
针对【分页失败】问题主要是由于关键字查询是post过来,点击分页后是get方法,导致数据不一致;解决方法如下:
1、在搜索框下来一个隐藏的input做页码接收(默认值是页码1);
2、在分页链接上接收搜索关键字和页面参数;
3、用jq接收分页链接中的关键字和页码,并取消分页链接的点击事件的默认动作,把提前到的数据修改到form表单中,并提交表单,模拟post过程;
4、如有更好的分页解决方式,欢迎回复。
7、以上提到的问题,均在代码上加注释了,如有其他好的方法,欢迎提供其他好方法。
<?php
ini_set("error_reporting","E_ALL & ~E_NOTICE");
function webalert($Key){
$html="<script>\r\n";
$html.="alert(\'".$Key."\');\r\n";
$html.="history.go(-1);\r\n";
$html.="</script>";
exit($html);
}
function charaget($data){
if(!empty($data) ){
$fileType = mb_detect_encoding($data , array(\'UTF-8\',\'GBK\',\'LATIN1\',\'BIG5\')) ;
if( $fileType != \'UTF-8\'){
$data = mb_convert_encoding($data ,\'UTF-8\' , $fileType);
}
}
return $data;
}
if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\') {
$trimmed = array_map(\'trim\', $_POST);
$key=$trimmed[\'key\'];
$page=$trimmed[\'page\'];
if(empty($key)) {
webalert(\'亲,您确认下输入!\');
}
$keyword = explode(" ", $key); //拆分关键字为数组
$keycount = count($keyword); //统计关键字个数
$files = "taobao.dat";
$filer = fopen($files, "r") or webalert(\'无法打开文件!\');
$data = []; // 最终的数据
while (!feof($filer)) {//检测是否已到达文件末尾
$row = fgets($filer);//从文件指针中读取一行
$rows = trim(charaget($row));//转UTF-8,并移除字符串两侧的空白字符或其他预定义字符
//var_dump($rows);
if ($rows) {
$e_rows = explode("\t", $rows);
$b=0; //初始化关键字,比对次数
foreach($keyword as $val){
if (strstr( $e_rows[0] , $val ) !== false ){ //搜索框中的关键字和数据库中的标题匹配
$b++;
if ($b == $keycount) {//筛选出多个关键字出现在同一个标题中
$c++;//筛选后,查询结果进行编号
//var_dump($e_rows);
array_push($data,$e_rows);
}
}
}
}
}
//echo "$c";
if ($c < 1) {
echo \'<table cellspacing="0"><tr>\';
echo "<td colspan=2>没有查询到相关信息哦。<br>";
echo "<strong>可能原因及建议:</strong><br>";
echo "1. 如果没有结果请尝试减少或更换查询关键词。<br>";
echo "2. 多关键词用空格隔开,参考:毛衣 加厚 男。<br>";
echo "3. 只涵盖部分类目:有些类目的商品查询不到。</td>";
echo \'</tr></table>\';
}
fclose($filer);
}
//var_dump($data);
//计算筛选出来的数组条数
$num = count($data);
//规定每页显示的条数
$display = 5;
//计算总页面数
$countpage = ceil($num/$display);
//判断当前页面是否为空 如果为空就表示为第一页面
$page=(empty($page))?\'1\':$page;
//计算每次分页的开始位置
$start = ($page-1)*$display;
$pagedata=array();
$pagedata = array_slice($data,$start,$display,true);
//var_dump($pagedata);exit;
//echo "$num == $display === $countpage";
//exit;
?>
<!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>淘宝天猫优惠券dome-分页版</title>
</head>
<body>
<form class="navbar-form navbar-left" action="<?php echo $_SERVER[\'PHP_SELF\']; ?>" method="post">
<div class="form-group">
<input type="text" name="key" id="key" class="form-control" placeholder="Search">
<input type="hidden" name="page" value="1" id="page">
</div>
<button type="submit" class="btn btn-default">搜索</button>
</form>
<?php
foreach($pagedata as $k => $v){
?>
<table>
<tbody>
<tr>
<td><?php echo $v[\'0\']; ?></td>
<td><img src="<?php echo $v[\'1\']; ?>" width="100" /></td>
<td><a target="_blank" href="<?php echo $v[\'2\']; ?>">购买链接</a></td>
<td>商品价格(单位:元):<?php echo $v[\'3\']; ?></td>
<td>商品月销量:<?php echo $v[\'4\']; ?></td>
<td>店铺名称:<?php echo $v[\'5\']; ?></td>
<td>平台类型:<?php echo $v[\'6\']; ?></td>
<td>优惠券面额:<?php echo $v[\'7\']; ?></td>
<td>优惠券开始时间:<?php echo $v[\'8\']; ?></td>
<td>优惠券结束时间:<?php echo $v[\'9\']; ?></td>
<td><a target="_blank" href="<?php echo $v[\'10\']; ?>">商品优惠券推广链接</a></td>
</tr>
</tbody>
</table>
<?php
}
?>
<?php
if($page>1){
echo \'<p><a href="?page=1&key=\'.$key.\'">首页</a></p>\';
echo \'<p><a href="?page=\'.($page-1).\'&key=\'.$key.\'">上一页</a></p>\';
}
if($page<$countpage)
{
echo \'<p><a href="?page=\'.($page+1).\'&key=\'.$key.\'">下一页</a></p>\';
echo \'<p><a href="?page=\'.$countpage.\'&key=\'.$key.\'">末页</a></p>\';
}
?>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<script language="javascript">
$(function(){
$("p a").click(function(event) {
// 获取这个a标签的href中的url
url = $(this).attr("href");
page=url.split(\'=\')[1];
key=url.split(\'=\')[2];
// 取消点击事件的默认动作
event.preventDefault();
// 修改form中的action动作
$("#page").attr("value", page);
$("#key").attr("value", key);
// 提交表单
$("form").submit();
});
});
</script>
</body>
</html>