PHP - 在数据库中搜索记录,同时对它们进行排序和分页

时间:2012-02-24 23:23:03

标签: php html search pagination

是的,第8天学习php,我觉得我试图以错误的顺序做事....直到昨天我还好。我已经设置了myselft创建一个虚假的在线书店的任务(似乎popuar与所有学习PHP书籍)。首先,我创建了我的产品,并将它们全部列在数据库的页面上..很简单,然后我使用了一个下拉框来订购结果......很难,但最终做到了。然后尝试分页,轻松,然后尝试加入我的订购代码和分页代码:我生命中最痛苦的几个小时但完成。我利用了一个搜索栏...更容易想到,现在我正在尝试将这个搜索栏与我的分页和订购代码混合,我的头发被少数人掉了出来!我真的希望我曾试图一次性学习所有这三个,但本来会有点屈指可数。

所以我的问题是...它分页...是的,它命令...但是当我第一次看到搜索的结果时...它分页确定(显示我有多少页面总是正确的值)但是,当我点击查看第二页时,停止显示搜索结果,而是将我带到数据库中所有产品的第2页。如果我尝试订购列表也会发生同样的情况,它会更改为所有产品的有序列表并告诉我搜索条件是空的!

很抱歉这么长的问题,我只是无法解决我已经滑倒的问题!

非常感谢任何可以提供帮助的人!

下面是代码:

booksearch.php:

(已经取出了所有无关紧要的代码!)

<?php $query1 = "SELECT *
      FROM booktable";

// execute the query

$results1 = mysql_query($query1)
                or die(mysql_error());

// count the number of rows that are selected from the table

$field = mysql_num_fields( $results1 );

// echo $field;

        for ( $i = 0; $i < $field; $i++ ) 
    {
         $names[$i] = mysql_field_name( $results1, $i );
        }
?>
<form name="searchbook" action="productssearch.php" method="get">
    <br />
    Got For It:<input type="text" id="searchbar" name="searchterm" value="Enter anything and we will search on title, author, publisher and ISBN"></input>
    <br /><br />
    <input type="submit" name="Search" value=" - Search - "></input>
  </form>

productssearch.php:

require "dbconn.php";
$term = $_GET['searchterm'];
$records_per_page = 10;
//If user set the sort order, save to session var - else set default
if(@$_POST['order'])
{    
$_SESSION['order'] = trim($_POST['order']);
}

elseif(!isset($_SESSION['order']))
{    
$_SESSION['order'] = 'bookname';
}

//Determine the total records and pages
$query = mysql_query ("SELECT COUNT(bookname)
          FROM booktable
          WHERE bookname LIKE '%".$term."%'
          OR bookisbn LIKE '%".$term."%'
          OR bookpub LIKE '%".$term."%'
          OR bookauthor LIKE '%".$term."%'");



$total_records = mysql_result($query, 0);
$total_pages = ceil($total_records / $records_per_page);

//Set the page to load
$page = (isset($_GET['page'])) ? (int) $_GET['page'] : 1;
if($page<1 || $page>$total_pages)
{    
$page = 1;
}

//Create limit var for query
$limit_start = ($page-1) * $records_per_page;

//Create and run query for records on current page
$query = mysql_query ("SELECT bookname, bookauthor, bookpub, bookisbn
          FROM booktable
          WHERE bookname LIKE '%".$term."%'
          OR bookisbn LIKE '%".$term."%'
          OR bookpub LIKE '%".$term."%'
          OR bookauthor LIKE '%".$term."%'          
          ORDER BY ".mysql_real_escape_string($_SESSION['order'])." ASC
          LIMIT $limit_start, $records_per_page");


//Prepare output
//**************************************************************
$numrow = mysql_num_rows($query);  
//Create pagination links
$navLinks = '';

//Prev page
if($page > 1)
{    
$prevPage = $page - 1;    
$navLinks .= "<a href='productssearch.php?page=$prevPage'>Prev</a> ";
}
else
{    
$navLinks .= "Prev ";
}

//Individual pages
for($p=1; $p<=$total_pages; $p++)
{
$pageNo = ($p == $page) ? "<b>{$p}</b>" : $p;
$navLinks .= "<a class='pagin' href='productssearch.php?page=$p'>$pageNo</a> ";
}

//next page
if($page < $total_pages)
{    
$nextPage = $page + 1;    
$navLinks .= "<a href='productssearch.php?page=$nextPage'>Next</a>";
}
else
{    
$navLinks .= "Next";
}
?>

(来自中间的不相称的呕吐物)

<div id="mid"> 
<?php

echo "<table>";
echo "<tr>";
echo "<td>";

echo "</td>";
echo "<td class='toprow'>";
echo "Book Title";
echo "</td>";
echo "<td class='toprow'>";
echo "Book Author";
echo "</td>";
echo "<td class='toprow'>";
echo "Book Publisher";
echo "</td>";
echo "<td class='toprow'>";
echo "Book ISBN";
echo "</td>";
echo "<td>";

echo "</th>";
echo "</tr>";
while ($row = mysql_fetch_assoc($query))
{
 $bookname = $row['bookname'];
 $bookauthor = $row['bookauthor'];
 $bookpub = $row['bookpub'];
 $bookisbn = $row['bookisbn'];
  // send the values to the browser as a row in a html table
  echo "<tr>";

  echo "<tr>";
  echo "<td>";
  echo "<a href='addtolist.php?bookname=".$bookname."&bookauthor=".$bookauthor."&bookpub=".$bookpub."&bookisbn=".$bookisbn."'>Add to basket</a>";

  echo "</td>";

 echo "<td>";
  echo $bookname;
  echo "</td>";

  echo "<td>";
  echo $bookauthor;
  echo "</td>";

  echo "<td>";
  echo $bookpub;
  echo "</td>";

  echo "<td>";
  echo $bookisbn;
  echo "</td>";

  echo "</tr>";


}
?>
</table>


<?php 
echo "<br />";
echo $navLinks; ?>

请注意我是一个真正的初学者,所以我不学习如何制作安全或安全的代码。,..我甚至还加密了用户和管理员密码......只是想学习脚本的机制!

再次感谢大家抽出时间阅读我的“刮风”问题!

2 个答案:

答案 0 :(得分:2)

这是因为你没有携带你的:

$term = $_GET['searchterm'];

到下一页。

因此,当您搜索空白字符串时,您将返回所有内容的结果。

您的分页链接应包含POST中使用的搜索字词。

答案 1 :(得分:1)

对于所有阅读此内容的人:我保持简单,因为菲尔已经评论说他是初学者。我们都知道在这个答案中没有考虑到这些因素!

菲尔,答案在于构建你的navlinks代码。

当您点击其中一个导航链接时,它会超出您的分页限制,但不会传递搜索字词。

您需要将导航链接修改为:

$navLinks .= "<a href='productssearch.php?page=$prevPage&searchterm=$term'>Prev</a> ";

$navLinks .= "<a class='pagin' href='productssearch.php?page=$psearchterm=$term'>$pageNo</a> ";  

$navLinks .= "<a href='productssearch.php?page=$nextPage&searchterm=$term'>Next</a>";