我正在尝试列出包含输入关键字的mysql数据库中的句子。下面我有一个名为quoteme.html
的php脚本,其中包含一个提交表单。当我使用quoteme.html
提交关键字时,它仅列出第一页。当我点击“Next 10 Records”时,我得到一个空页面(仅显示“Next 10 Records”链接)。
如果我在查询行中输入关键字,如:
$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);
?>
有人会告诉我代码中有什么问题吗? 感谢。
答案 0 :(得分:0)
你有一些错误。
第一个不是真正的错误,但令人困惑:将$_GET{'page'}
更改为官方$_GET['page']
。
第二:你在页码上加1。为什么?如果我作为用户,请转到url.php?page = 2我想看第二页,而不是第3页。
最后:$offset
应该是($page - 1) * $rec_limit
:Page 1以偏移量0开始,第2页从偏移量10开始。
编辑它现在刚刚进入我的脑海:您是否也将q
查询参数传递给后续页面?因此,您的网址应如下所示:<myscript.php>?q=freak&page=3
。因为php不会将变量保存在请求之上,所以您应该将查询与页面一起传递。
答案 1 :(得分: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 " <a href=\"yourpage.php?s=$prevs\"><<Prev Page</a> ";
}
// 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 " <a href=\"yourpage.php?s=$news\">Next page>></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);
答案 2 :(得分:0)
我经过数小时的搜索和修改代码后修复了它。它是“$ _GET”变量问题,因为它通过URL传递。在我的代码中,缺少通过URL重定向变量的部分。我在这里添加了一些exra代码,效果很好。感谢所有想要帮助的人。
以下是模式部分:
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>";
}