0

$_POST を介して検索結果ページに渡され、$term という変数に格納される値があります。変数はその後、検索結果を表示するために実行される MySQL クエリ内にあり、結果が 15 件を超える場合は、結果を複数のページに分割するページネーション php スクリプトがあります。

最初のページは素晴らしいです。正しい数の結果が見つかり、正しい数のページが利用可能です。変数をエコーすると、正しい値が格納されます。ただし、次の結果のロットを見ることを選択し、ページが更新された場合、テーブルのすべての行がリストされ (クエリが引数なしの SELECT * であるかのように)、変数は空になります。

これが私のコードです(少し長いです。申し訳ありませんが、別のページに大きなチャックを置き、正しく機能したら含めるつもりです)

    <?php
$tbl_name="accounts";
$adjacents = 3;


if (isset($_POST['basic_search_submit'])){
$term = $_POST['item'];}

$query = "SELECT COUNT(*) as num FROM accounts LEFT JOIN accounts_cstm ON accounts.id = accounts_cstm.id_c  WHERE accounts.name LIKE '%$term%' ORDER BY accounts.name";
$total_pages = mysql_fetch_array(mysql_query($query));
$total_pages = $total_pages[num];

    $targetpage = "search_results_play.php";    
$limit = 15;                                
$page = $_GET['page'];
if($page) 
    $start = ($page - 1) * $limit;          
else
    $start = 0;                             
    $sql = "SELECT * FROM accounts LEFT JOIN accounts_cstm ON accounts.id = accounts_cstm.id_c WHERE accounts.name LIKE '%$term%' ORDER BY accounts.name LIMIT $start, $limit";
$result = mysql_query($sql);
if ($page == 0) $page = 1;                  
$prev = $page - 1;                          
$next = $page + 1;                          
$lastpage = ceil($total_pages/$limit);      
$lpm1 = $lastpage - 1;                      
$pagination = "";

if($lastpage > 1)
{   
    $pagination .= "<div class=\"pagination\">";
            if ($page > 1) 
        $pagination.= "<a href=\"$targetpage?page=$prev\">&#60; &#60; previous</a>";
    else
        $pagination.= "<span class=\"disabled\">&#60; &#60; previous</span>";   

            if ($lastpage < 7 + ($adjacents * 2))
    {   
        for ($counter = 1; $counter <= $lastpage; $counter++)
        {
            if ($counter == $page)
                $pagination.= "<span class=\"current\">$counter</span>";
            else
                $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                 
        }
    }
    elseif($lastpage > 5 + ($adjacents * 2))    //enough pages to hide some
    {
                    if($page < 1 + ($adjacents * 2))        
        {
            for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
            {
                if ($counter == $page)
                    $pagination.= "<span class=\"current\">$counter</span>";
                else
                    $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                 
            }
            $pagination.= "...";
            $pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>";
            $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";       
        }
                    elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
        {
            $pagination.= "<a href=\"$targetpage?page=1\">1</a>";
            $pagination.= "<a href=\"$targetpage?page=2\">2</a>";
            $pagination.= "...";
            for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
            {
                if ($counter == $page)
                    $pagination.= "<span class=\"current\">$counter</span>";
                else
                    $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                 
            }
            $pagination.= "...";
            $pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>";
            $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";       
        }

        else
        {
            $pagination.= "<a href=\"$targetpage?page=1\">1</a>";
            $pagination.= "<a href=\"$targetpage?page=2\">2</a>";
            $pagination.= "...";
            for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
            {
                if ($counter == $page)
                    $pagination.= "<span class=\"current\">$counter</span>";
                else
                    $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                 
            }
        }
    }


    if ($page < $counter - 1) 
        $pagination.= "<a href=\"$targetpage?page=$next\">next &#62; &#62;</a>";
    else
        $pagination.= "<span class=\"disabled\">next &#62; &#62;</span>";
    $pagination.= "</div>\n";       
}
?>

  <? while ($row = mysql_fetch_array($result)){
 //table displaying results
 }
?>
<?=$pagination?>

どんな助けでも大歓迎です、ありがとう

4

2 に答える 2

3

PHP の変数はページ間で保持されません。もちろんそれらのいくつかを除いて、定期的$pageまたは$whatever永続的ではありません。ページをロードし、その中にいくつかの変数を入れます。ページがブラウザに完全にロードされると、それらの変数はなくなります。

session_start()すべてのページのスクリプトの先頭で使用し、$_SESSION['variable']=...変数を格納するために使用することをお勧めします。このようにして、それらはページ間で持続します。

最も簡単な修正:

$page = $_GET['page']; 

その行を次のように置き換えます。

$page = isset($_SESSION['page']) && is_numeric($_SESSION['page']) ? $_SESSION['page'] : 0;
$_SESSION['page'] = $page;

session_start()そして、すべてのスクリプトの先頭に追加します。共通のヘッド インクルード、または mysql 認証データを含む config.php がある場合は、それをそのファイルの先頭に配置します。

于 2012-07-24T20:53:23.360 に答える
0

もう 1 つの解決策は、GETrequest for search を使用して用語を取得$_GET['term']し、生成されたリンクに追加すること'&term='. $_GET['term']です。これは簡単にできます。usin の主な欠点は$_SESSION['term']、たとえばページをホームページに移動した場合、この変数はセッションが期限切れになるまで設定されたままになり、将来問題が発生する可能性があることです。

于 2012-10-19T01:10:40.047 に答える