今日疑问(已解决): 数组作为关键字的搜索结果, 在翻页中传递的问题。。。。PHP
本帖最后由 Unbekannt 于 2009-4-1 14:21 编辑基本想法, 如图书馆一样, 当$data为空时, 则搜索全部, 成功, 翻页也没问题。。。
但是当$data有部分关键字时, 则作为一个数组对相应的文本框进行搜索, 现在搜索结果成功, 并且能正常显示, 但是是在翻页的时候。。。总是变成显示数据库里的全部数据。。。想了很多方法也没有能有效传递搜索值的。。。本来想用GET。。。不知道对不对。。。
另外, 已经在SQL中使用了limit。。。
以下是用到的程序。。。$data是从html中POST过来的搜索值。。。
怎么才能实现翻页呢。。。。郁闷阿。。。
========================已解决=====================
hehehe~~~~多谢了。。。我用了cookie解决了。。。Session我用于对用户组的判断了, 所以在这里就不跟搜索条件混在一起了。。。
就是每次从新搜索的时候得刷新cookie, 这里我用了笨方法, 就是当POST的时候把这里的cookies都清零。。。呵呵呵, 用了笨方法, 不过可以运行了。。。
p.s.: 刚才编辑贴子的时候本能的ctrl+s了一下。。。
====================search.php====================
if($_SERVER['REQUEST_METHOD']=='POST')
{
if($_POST['lastname'])
$data['F_BDT_AUTOR'] = $_POST['lastname'];
if($_POST['othername'])
$data['F_BDT_F_AUTOR'] = $_POST['othername'];
if($_POST['title'])
$data['F_BDT_TITEL'] = $_POST['title'];
if($_POST['utitle'])
$data['F_BDT_UTITEL'] = $_POST['utitle'];
if($_POST['pagenr'])
$data['F_BDT_PAGENR'] = $_POST['pagenr'];
if($_POST['year'])
$data['F_BDT_YEAR'] = $_POST['year'];
if($_POST['location'])
$data['F_BDT_LOC'] = $_POST['location'];
if($_POST['s01'])
$data['F_BDT_IS_S01'] = 1;
if($_POST['s02'])
$data['F_BDT_IS_S02'] = 1;
if($_POST['s03'])
$data['F_BDT_IS_S03'] = 1;
if($_POST['s04'])
$data['F_BDT_IS_S04'] = 1;
if($_POST['s05'])
$data['F_BDT_IS_S05'] = 1;
if($_POST['s06'])
$data['F_BDT_IS_S06'] = 1;
if($_POST['s07'])
$data['F_BDT_IS_S07'] = 1;
if($_POST['s08'])
$data['F_BDT_IS_S08'] = 1;
if($_POST['s09'])
$data['F_BDT_IS_S09'] = 1;
if($_POST['s10'])
$data['F_BDT_IS_S10'] = 1;
if($_POST['s11'])
$data['F_BDT_IS_S11'] = 1;
if($_POST['s12'])
$data['F_BDT_IS_S12'] = 1;
if($_POST['s13'])
$data['F_BDT_IS_S13'] = 1;
if($_POST['s14'])
$data['F_BDT_IS_S14'] = 1;
if($_POST['s15'])
$data['F_BDT_IS_S15'] = 1;
if($_POST['s16'])
$data['F_BDT_IS_S16'] = 1;
if($_POST['s17'])
$data['F_BDT_IS_S17'] = 1;
if($_POST['s18'])
$data['F_BDT_IS_S18'] = 1;
if($_POST['s19'])
$data['F_BDT_IS_S19'] = 1;
if($_POST['s20'])
$data['F_BDT_IS_S20'] = 1;
if($_POST['checkpdf'])
$data['F_BDT_PDF_YES'] = 1;
if($_POST['checkcontent'])
$data['F_BDT_CONTENT_YES'] = 1;
}
if(!$_GET['page'])
$curr_page = 1;
else
$curr_page = $_GET['page'];
$pagesize = 10;
$list = $doc->GetDocList($curr_page,$pagesize,$data);
if($data)
{
$DocCount = $doc->GetDocCount($data);
}else{
$DocCount = $doc->GetDocCount2($data);
}
$pagecount = ceil($DocCount / $pagesize);
if(!$pagecount) $pagecount=1;
<html>
...
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2">
<?php echo Page($pagecount,$curr_page,$pagesize,$DocCount);?>
...
... ================Page()方法=================
function ParseUrl()
{
$url = $_SERVER['REQUEST_URL'];
if(strpos($url,'?'))
{
$file = substr($url,0,strpos($url,'?'));
$para = substr($url, strpos($url,'?')+1,strlen($url));
$array = explode('&',$para);
for($i=0;$i<sizeof($array);$i++)
{
$tmp = array();
$tmp = explode("=",$array[$i]);
if($tmp!='page')
{
if($i!=0)
$link .= "&";
$link .= $array[$i];
}
}
$link = $file."?MenuId={$_GET['MenuId']}".$link."&";
}else{
$link = $url."?MenuId={$_GET['MenuId']}";
}
return $link;
}
function Page($pagecount,$curr_page,$pagesize,$DocCount)
{
$url = ParseUrl();
$prev = $curr_page-1;
$next = $curr_page+1;
$start = "<a href='".$url."'>Anfang</a>";
$prev_link = ($prev >= 1)?"<a href='".$url."&page=$prev'>letzte</a>":"letzte";
$next_link = ($next <= $pagecount)?"<a href='".$url."&page=$next'>nächste</a>":"nächste";
$end = "<a href='".$url."&page=$pagecount'>Ende</a>";
$str = "<form name='jump' method='get' action=''>";
$str .= "Es wurde ".$DocCount." Datensatz/Datensätze gefunden. Gesamt: ".$pagecount." Seiten; ".$pagesize." Datensätze werden maximal pro Seite angezeigt.<br>";
$str .= " ".$start." ".$prev_link." ".$next_link." ".$end;
$str .= " ".$curr_page."/".$pagecount;
$str .= " zur Seite: <input name='page' type='text' id='page' size='5'>";
$str .= " <input type='submit' name='Submit' value='GO'>";
$str .= "</form>";
return $str;
} ====================getDocList()===================
public function GetDocList($curr_page,$pagesize,$data)
{
if(!$data)
{
$start = ($curr_page-1)*$pagesize;
$sql = "SELECT * FROM EE_BOOKS_DETAIL ORDER BY F_ID DESC LIMIT $start, $pagesize";
return $this->select($sql);
}else{
$start = ($curr_page-1)*$pagesize;
$sql_fields = "*";
$sql_from = "EE_BOOKS_DETAIL";
$sql_where = " ";
if($data)
{
$i = 0;
$sql = "SELECT * FROM $sql_from WHERE";
$fields = array_keys($data);
$value = array_values($data);
foreach($data as $key)
{
$sql .= " ".$fields[$i]." LIKE '%".$value[$i]."%'";
if($i<count($data)-1)
{
$sql .= " AND";
$i++;
}
}
$sql_order = "F_ID DESC";
$sql .= " ORDER BY $sql_order LIMIT $start, $pagesize";
## $sql = "SELECT * FROM $sql_from WHERE $sql_where ORDER BY $sql_order LIMIT $start, $pagesize";
return $this->select($sql);
}
}
} $_POST['lastname']
把POST或者GET的数值放到SESSION里面去
<?php
session_start();
$_SESSION['lastname'] = $_POST['lastname'];
?>
这样在下一页里也可以使用这些数值了,SESSION对PHP至关重要,用用吧! hehehe~~~~多谢了。。。我用了cookie解决了。。。Session我用于对用户组的判断了, 所以在这里就不跟搜索条件混在一起了。。。
就是每次从新搜索的时候得刷新cookie, 这里我用了笨方法, 就是当POST的时候把这里的cookies都清零。。。呵呵呵, 用了笨方法, 不过可以运行了。。。 session is the best solution
页:
[1]