php初學者,
現在想要的網頁有
搜尋關鍵字給資料庫模糊搜尋 的功能
換頁 的功能
目前的情況:
搜尋後的結果網址不會更動
換頁之後的結果會網址後面會多出 p=頁數
這樣子會造成一個問題
就是如果我在p=2的時候搜尋別的關鍵字
會連接到該關鍵字搜尋結果的第2頁
請問要怎麼樣讓搜尋之後的結果去掉p=2呢?
目前嘗試過把搜尋按鈕從 input 改成 a href
但是這樣我COOKIE要存的變數好像會存不到
這是php
<?php
//商品查詢系統
function item_list()
{
global $itemname,$smarty,$itname,$choose;
//這個if可以讓cookie存的東西不會慢一步顯示
if($_POST['choose']!=""){
$choose = $_REQUEST['choose'];
setcookie("choosecookie", $choose, time()+3600);
$smarty->assign('choose',$choose);
}
elseif($_COOKIE['choosecookie']!=""){
$choose = $_COOKIE['choosecookie'];
$smarty->assign('choose',$choose);
}
if($_POST['itemname']!=""){
$itemname=($_POST['itemname']);
setcookie("itcookie", $itemname, time()+3600); //讓搜尋後頁碼會獲得cookie存的值
$itname=$_REQUEST['itemname'];
item_list_choose();
$smarty->assign('itname',$itname);
}
elseif($_COOKIE['itcookie']!=""){
$itemname=$_COOKIE['itcookie'];
$itname=$_COOKIE['itcookie'];
item_list_choose();
$smarty->assign('itname',$itname);
}
else{
item_list_choose();
$smarty->assign('itname',$itname);
}
}
//商品比價與心得
function price_form($item_page)
{
global $smarty,$mysqli,$item_page;
$sql ="SELECT * FROM info INNER JOIN price ON info.info_page = price.price_page JOIN review ON info.info_page = review.review_page and info.info_page=$item_page";
$result=$mysqli->query($sql) or die($mysqli->connect_error);
$i=$item_page;
$item = $result->fetch_assoc();
$price_item[$i] = $item;
$smarty->assign('price_item',$price_item);
}
function item_list_choose()
{
global $smarty,$mysqli,$itemname,$choose;
// $itname=$_REQUEST['itemname'];
if($choose==''){
$sql ="SELECT * FROM info,price where info.info_itemname like '%$itemname%' and info.info_page = price.price_page";
$result=$mysqli->query($sql) or die($mysqli->connect_error);
$Num = $result->num_rows;
$show = 24;
if (!isset($_GET["p"])){ //假如$_GET["page"]未設置
$p=1; //則在此設定起始頁數
} else {
$p = intval($_GET["p"]); //確認頁數只能夠是數值資料
}
$start=($p-1)*$show;
$result=$mysqli->query($sql.' LIMIT '.$start.', '.$show) or die($mysqli->connect_error);
$pages = ceil($Num/$show);
$i = 1;
while($item = $result->fetch_assoc()){
$all_item[$i] = $item;
$i++;
}
$smarty->assign('all_item',$all_item);
$smarty->assign('totalNum',$Num); //宣告變數給前端
$smarty->assign('choose',$choose);
$smarty->assign('pages',$pages);
$smarty->assign('p',$p);
// $smarty->assign('itname',$itname);
}
接下來是html
這是html
<div class="col-xs-12 col-sm-12 col-md-4" align="center">
<form id="form1" name="form1" method="post" action="">
<div style="font-size: 2.5vmin;">商品關鍵字:
<input name="itemname" type="text" id="itemname" value="{$itname}" style="text-align:center;" /></div></div>
<div> </div>
<div class="col-xs-12 col-sm-12 col-md-4" align="center">
<input class="btn btn-danger btn-lg" type="submit" name="button" id="button" value="點此查詢商品!"/>
<!-- <a href ="index.php?op=item_list" class="btn btn-danger" type="submit" name="button" id="button">點此查詢商品!</a> -->
</form>
<!-- 換頁 -->
{if (($p-3)<0)}
{for $a=1;$a<=$pages and ($a-$p<=9);$a++}
<a href="index.php?op=item_list&p={$a}">{$a}</a>
{/for}
{elseif (($p-3)>0)}
{for $a=($p-3);$a<=$pages and ($a-$p<=3);$a++}
<a href="index.php?op=item_list&p={$a}">{$a}</a>
{/for}
{/if}
<a href="index.php?op=item_list&p={$pages}">末頁</a>
</div>
<div style="text-align: center;">共有{$pages}頁</div>
</div>
一般來說,比較簡單的處理方式,就是搜尋直接指定第一頁了。
也就是你的action就不能用本頁直接post運行這樣的處理。你要直接指定網址讓他不會再送p值。
另外一般最好還是統一get處理。
如果怕被攻擊刷頁的話。就採用記錄式的方式。
我個人的做法也的確是將搜尋用post處理。然後再將其post的搜尋條件給session下來。跟做一個key處理。
之後的傳送才會用get的方式處理。但get的方式就也只會送頁碼而已
先不論 其他人說的安全性
我個人的習慣是 使用Jquery 去控制所有事件
我不使用html 內建的,透過jquery 可以事先檢查所有條件是否合法
透過js 可以 去偵測 有沒有變更搜尋條件,當發現 搜尋條件變更,就可把頁碼 改道第一頁
透過 js 可以隨意決定要用submit的方式送出,還是使用ajax 的方式