0

我正在尝试从包含输入关键字的 mysql 数据库中列出句子。下面我有一个调用的 php 脚本quoteme.html,其中包含一个提交表单。当我使用它提交关键字时,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'];在下一页重置其值?

编辑2:

我试图调试错误,我将下面的代码放在查询行之后的 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

你有几个错误。

第一个并不是真正的错误,但令人困惑:更改$_GET{'page'}为官方$_GET['page'].

第二:你给页码加1。为什么?如果我作为用户访问 url.php?page=2 我想查看第二页,而不是第三页。

最后:$offset应该是($page - 1) * $rec_limit:第 1 页从偏移量 0 开始,第 2 页从偏移量 10 开始。

现在编辑它刚刚进入我的脑海:您是否也将q查询参数传递给后续页面?所以你的网址应该是这样的:<myscript.php>?q=freak&page=3。因为 php 不会在请求中保存变量,所以您应该将查询与页面一起传递。

于 2013-11-01T12:59:15.630 回答
0

经过数小时的搜索和修改代码后,我修复了它。这是“$_GET”变量问题,因为它通过 URL 传递。在我的代码中,缺少通过 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 回答