-3

私のphpコード(ネットで見つけたサンプルコードから採用)にページネーションスクリプトを実装しようとしましたが、ページはmysqlクエリの結果を返します。デフォルトは、データベースからすべてのデータを返す空の「キーワード」です。すべてのデータが返されたときにページネーションが機能する限り成功しましたが、キーワード検索で結果をフィルタリングすると、[次のページ] をクリックすると、フィルタリングされていない結果で次のページが返されます (つまり、検索されたキーワードが更新で失われます)。

これは関連するコードです(意味があることを願っています):

引用符

    $txt1='<A HREF="/memimomedia/music/128kb/';
    $txt2='" ><IMG src="/Save.png" width="24" height="24" align="middle" border="0"></A>';

    $txt9a='<a href="';
    $txt9b='" target="_blank">';
    $txt9c='</a>';

    $txt10a='<audio src="./128kb/';        
    $txt10d='" controls></audio>';


if(empty($_POST['searchkeywords']) && empty($_GET['searchkeywords']))     { $result = mysql_query("SELECT *

FROM ppl_tracks WHERE Mixed !='0' ORDER BY Track"); } if(!empty($_GET['searchkeywords'])) { $Searchword=$_GET['searchkeywords']; }

if(!empty($_POST['searchkeywords']))  { $Searchword=$_POST['searchkeywords']; }

$Totalresults = mysql_query("SELECT Track FROM (ppl_tracks LEFT JOIN TrackStyle ON ppl_tracks.RECNO = TrackStyle.TrackID LEFT JOIN StyleTable ON TrackStyle.StyleID = StyleTable.ID) LEFT JOIN TrackMood ON ppl_tracks.RECNO = TrackMood.TrackID LEFT JOIN MoodTable ON TrackMood .MoodID = MoodTable.ID WHERE (MoodChoices LIKE '%$Searchword%' OR Description LIKE '%$Searchword%' OR StyleChoices LIKE '%$Searchword%' OR Tempo LIKE '%$Searchword%' OR Track LIKE '%$Searchword %' ) AND Mixed =true GROUP BY Track ORDER BY Track" );

//これは、ページ番号があるかどうかを確認します。そうでない場合は、ページ 1 に設定されます。 if(isset($_GET['pagenum'])) { $pagenum = $_GET['pagenum']; } そうでなければ { $pagenum = 1; }

//ここで結果の数を数えます $hits = mysql_num_rows($Totalresults);

//これは、1 ページあたりに表示される結果の数です $page_hits = 15;

//これにより、最後のページのページ番号がわかります $last = ceil($hits/$page_hits);

//これにより、ページ番号が 1 未満でないこと、または最大ページ数を超えていないことが確認されます。 if ($pagenum < 1) { $pagenum = 1; } elseif ($pagenum > $last) { $pagenum = $last; }

//これにより、クエリで表示する範囲が設定されます $max = 'limit ' .($pagenum - 1) * $page_hits .',' .$page_hits;

$result = mysql_query("SELECT * FROM (ppl_tracks LEFT JOIN TrackStyle ON ppl_tracks.RECNO = TrackStyle.TrackID LEFT JOIN StyleTable ON TrackStyle.StyleID = StyleTable.ID) LEFT JOIN TrackMood ON ppl_tracks.RECNO = TrackMood.TrackID LEFT JOIN MoodTable ON TrackMood .MoodID = MoodTable.ID WHERE (MoodChoices LIKE '%$Searchword%' OR Description LIKE '%$Searchword%' OR StyleChoices LIKE '%$Searchword%' OR Tempo LIKE '%$Searchword%' OR Track LIKE '%$Searchword %' ) AND Mixed =true GROUP BY Track ORDER BY Track $max" );

echo " トラック - アーティスト説明のダウンロード ";

$color="1";

while($row = mysql_fetch_array($result)) { $SelectedStyles = array(); $Track=$row['トラック']; $SelectedStylesQuery = mysql_query(" SELECT StyleChoices FROM ppl_tracks LEFT JOIN TrackStyle ON ppl_tracks.RECNO = TrackStyle.TrackID LEFT JOIN StyleTable ON TrackStyle.StyleID = StyleTable.ID WHERE ppl_tracks.Track='$Track'"); while($row1 = mysql_fetch_array($SelectedStylesQuery)) { $SelectedStyles[] = $row1[StyleChoices]; $SelectedMoods = 配列(); $SelectedMoodsQuery = mysql_query(" SELECT MoodChoices FROM ppl_tracks LEFT JOIN TrackMood ON ppl_tracks.RECNO = TrackMood.TrackID LEFT JOIN MoodTable ON TrackMood.MoodID = MoodTable.ID WHERE ppl_tracks.Track='$Track'"); while($row2 = mysql_fetch_array($SelectedMoodsQuery)) { $SelectedMoods[] = $row2[MoodChoices]; } sort($SelectedMoods); sort($SelectedStyles); $stringS= implode(", ", $SelectedStyles); $stringM= implode(", ", $SelectedMoods);

if($color==1) { echo ""; エコー "" 。$row['トラック'] . " - " . ucwords($row['Artist']) . ""; エコー "" 。$stringM . "
".$stringS.""; エコー "" 。$txt1.$row['ファイル名'].$txt2 . ""; エコー "" 。$txt10a.$row['FileName'].$txt10d.""; エコー ""; $color="2"; }

そうでなければ{エコー ""; エコー "" 。$row['トラック'] . " - " . ucwords($row['Artist']) . ""; エコー "" 。$stringM . "
".$stringS.""; エコー "" 。$txt1.$row['ファイル名'].$txt2 . ""; エコー "" 。$txt10a.$row['FileName'].$txt10d.""; エコー ""; $color="1";}

} エコー "";

// これにより、ユーザーが現在どのページにいるか、およびページの総数が表示されます

echo " -- $last の $pagenum ページ --

"; // 最初に、1 ページ目かどうかを確認します。そうであれば、前のページまたは最初のページへのリンクは必要ないので、何もしません。そうでない場合は、最初のページへのリンクを生成します。ページ、前のページへ。

もし ($pagenum == 1)

{

}

そうしないと

{ echo " <<-First "; エコー " - "; $previous = $pagenum-1; echo "<-前"; }

$カウンター=1; while ( $counter <= $last ) { if ($counter==$pagenum) { echo " - "; echo " $counter "; エコー " - "; }

  else

    {
  echo " - ";
  echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$counter'>$counter</a> ";
  echo " - ";
    } $counter = $counter + 1; }

//これは上記と同じことを行い、最後のページにいるかどうかのみをチェックし、次に次と最後のリンクを生成します

if ($pagenum == $last)

{

}

そうでなければ { $next = $pagenum+1; echo " 次へ -> "; エコー " - "; echo " Last ->> "; } mysql_close($con); ?>

4

1 に答える 1

3

新しいページに移動するたびにページをリロードするため、検索語をページに再度渡す必要があります。これを行う最も簡単な方法は、ページ付けのリンクを次のように更新することです。

echo " <a href='{$_SERVER['PHP_SELF']}?searchkeywords=" . $_REQUEST["searchkeywords"] . "&pagenum=$counter'>$counter</a> ";

$_REQUESTは$_POST変数と$_GET変数の両方を処理しますが、これは独自の方法で行うこともできます。簡単に言えば、検索キーワードをURLに戻す必要があります

于 2013-02-08T10:07:40.310 に答える