0

入力したキーワードを含む mysql データベースから文を一覧表示しようとしています。quoteme.html以下に、送信フォームを含むfrom と呼ばれる php スクリプトを示します。キーワードを使用して送信するとquoteme.html、最初のページのみが表示されます。「次の 10 レコード」をクリックすると、空のページが表示されます (「次の 10 レコード」リンクのみが表示されます)。次のようなクエリ行にキーワードを入力すると:

 $sql = "SELECT * FROM `text` WHERE MATCH(body) AGAINST('freak' IN BOOLEAN MODE)LIMIT      $offset, $rec_limit";

それはうまく機能し、すべてのリンクの文をリストします

編集:

その間

  $sql = "SELECT * FROM `text` WHERE MATCH(body) AGAINST('$q' IN BOOLEAN MODE)LIMIT      $offset, $rec_limit";

最初のページでのみ機能します。

freakとはどう違い$qますか?$q = $_GET['q'];次のページで値をリセットするのはなぜ ですか?

EDIT2:

エラーをデバッグしようとしましたが、クエリ行の後に以下のコードを php スクリプトに配置しました。

echo '<pre>';
var_dump($_GET);
var_dump($offset);
var_dump($rec_limit);
echo '</pre>';

$_GET変数は最初のページの後に消え、$offset変数$rec_limitは問題ありません。

$_GETでは、次のページで最後に するにはどうすればよいでしょうか?

$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db('quotes');
/* Get total number of records */
$q = $_GET['q'];
$sql = "SELECT count(*) FROM text ";
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
$row = mysql_fetch_array($retval, MYSQL_NUM );
$rec_count = $row[0];

if( isset($_GET{'page'} ) )
{
$page = $_GET{'page'} + 1;
$offset = $rec_limit * $page ;
}
else
{
$page = 0;
$offset = 0;
}
$left_rec = $rec_count - ($page * $rec_limit);


$sql = "SELECT * FROM `text` WHERE MATCH(body) AGAINST('$q' IN BOOLEAN MODE)LIMIT      $offset, $rec_limit";

$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
echo "SENTENCE :{$row['body']}  <br> ".
     "--------------------------------<br>";
} 

if( $page > 0 )
{
$last = $page - 2;
echo "<a href=\"$_PHP_SELF?page=$last\">Last 10 Records</a> |";
echo "<a href=\"$_PHP_SELF?page=$page\">Next 10 Records</a>";
}
else if( $page == 0 )
{
echo "<a href=\"$_PHP_SELF?page=$page\">Next 10 Records</a>";
}
else if( $left_rec < $rec_limit )
{
$last = $page - 2;
echo "<a href=\"$_PHP_SELF?page=$last\">Last 10 Records</a>";
}
mysql_close($conn);
?>

私のコードの何が問題なのか誰か教えてくれませんか? ありがとう。

4

3 に答える 3

0

このテンプレートコードを使用してください

$limit = 40; //how many results on a page
@$s = $_GET['s']; //current page
$con = mysqli_connect("localhost", "youruser", "yourpass", "yourdbase");
// Check connection
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$qry = "SELECT ... FROM ... where  ... ";

$result = mysqli_query($con, $qry);
$numrows = mysqli_num_rows($result); 
if ($numrows > 0) {
    // determine if s has been passed to script, if not use 0 
    if (empty($s)) {
        $s = 0; 
    } 
    $qry = "SELECT ... FROM ... LIMIT $s, $limit";
    $result = mysqli_query($con, $qry);
    $count = 1 + $s;

    while ($row = mysqli_fetch_array($result)) { //the main loop
        // .
        // .
        // .
    }

    $currPage = (($s / $limit) + 1); 
    echo "<br />"; 

    //link to other results
    if ($s >= 1) { // bypass previous link if s is 0            
       $prevs = ($s - $limit);
       echo "&nbsp;<a href=\"yourpage.php?s=$prevs\">&lt;&lt;Prev Page</a>&nbsp;&nbsp;"; 
    }

    // calculate number of pages needing links 
    $pages = intval($numrows / $limit); 
    if ($numrows % $limit) { 
        $pages++; 
    } 

    //start page links
    $currentpage=($s / $limit + 1);
    if ($pages > 2) {
        for ($t = 1; $t < $pages + 1; $t++) {
            echo(" ");
            if ($t != $currentpage) {
                $news = ($t * $limit) - $limit;
                 echo("<a href=\"yourpage.php?s=$news\">");
            }
            echo($t);
            if ($t != $currentpage) {
                 echo("</a>");
            }
            echo(" ");
        }
    }

    // check to see if last page 
    if (!((($s + $limit) / $limit) == $pages) && $pages != 1) { // not last page so 
        // give â€next†link 
        $news = $s + $limit; 
        echo "&nbsp;<a href=\"yourpage.php?s=$news\">Next page&gt;&gt;</a>"; 
    } 

    $a = $s + $limit; 
    if ($a > $numrows) { 
        $a = $numrows ; 
    } 
    $b = $s + 1 ; 
    echo "<p><b>Showing results $b to $a of $numrows</b></p>"; 
}

mysqli_close($con);
于 2013-11-01T13:17:57.527 に答える
0

コードを何時間も検索して修正した後、修正しました。URL経由なので「$_GET」変数の問題です。そして、私のコードには、URL を介して変数をリダイレクトする部分がありませんでした。ここにいくつかの追加コードを追加しましたが、うまく機能します。助けようとしてくれたすべての人に感謝します。

これがモード化された部分です:

if( $page >  0 )
{
$last = $page - 2;
echo "<a href=\"$_PHP_SELF?q=$q&page=$last\">Last 10 Records</a> |";
echo "<a href=\"$_PHP_SELF?q=$q&page=$page\">Next 10 Records</a>";
}
else if( $page == 0 )
{

echo "<a href=\"$_PHP_SELF?q=$q&page=$page\">Next 10 Records</a>";
}
else if( $left_rec < $rec_limit )
{
$last = $page - 2;
echo "<a href=\"$_PHP_SELF?q=$q&page=$last\">Last 10 Records</a>";
}
于 2013-11-02T11:37:40.123 に答える
0

いくつかのエラーがあります。

最初のものは実際にはエラーではありませんが、紛らわしいです:$_GET{'page'}公式に変更して$_GET['page']ください。

2 番目: ページ番号に 1 を追加します。なんで?ユーザーとして url.php?page=2 にアクセスすると、3 ページ目ではなく 2 ページ目を表示したい。

最後に: 次のようにし$offsetます($page - 1) * $rec_limit: ページ 1 はオフセット 0 から始まり、ページ 2 はオフセット 10 から始まります。

編集qして、頭に浮かんだばかりです。クエリパラメーターを後続のページにも渡しますか? したがって、URL は次のようになります<myscript.php>?q=freak&page=3。php はリクエストに対して変数を保存しないため、ページと共にクエリを渡す必要があります。

于 2013-11-01T12:59:15.630 に答える