分页错误

时间:2010-11-15 02:12:55

标签: php mysql pagination

我试图为我的搜索结果做页面。我的搜索功能正常。但是,当我点击页码时。出现此错误(如下):

注意:未定义的索引:在第8行的C:\ wamp \ www \ I-Document \ new.php中搜索 错误:从下拉列表中选择

仅当下拉列表中没有输入且没有搜索输入时,才会显示此消息。 我不知道如何纠正这个问题。请帮忙!谢谢你

<?php

//connecting to the database
include 'config.php';


$search = mysql_escape_string($_POST['search']);

$dropdown = mysql_escape_string($_POST['dropdown']); 

if (empty($search) && empty($dropdown)) {
die("Please choose your Search Criteria");
  } 

  //max displayed per page
  $per_page = 10;

  //get start variable  
  $start = $_GET['start'];

  //count records
  $record_count = mysql_query("SELECT COUNT(*) FROM document WHERE $dropdown LIKE     '%$search%'");


  //count max pages
  $max_pages = $record_count / $per_page; 

  if (!$start)
    $start = 0;

    //display data
    $query = mysql_query("SELECT * 
                            FROM document 
                           WHERE $dropdown LIKE '%$search%' 
                           LIMIT $start, $per_page");

    echo "<b><center>Search Result</center></b><br>";

    $num=mysql_num_rows($query);

    if ($num==0)
      echo "No results found";
    else {
      echo "$num results found!<p>"; 
    }

  echo "You searched for <b>$search</b><br /><br /><hr size='1'>";
  echo "<table border='1' width='600'>
          <th>File Reference No.</th>
          <th>File Name</th>
          <th>Owner</th>
          <th>Borrow</th>
       </tr>";

  while ($rows = mysql_fetch_assoc($query)) {
    echo "<tr>";
    echo "<td>". $rows['file_ref']  ."</td>";
    echo "<td>". $rows['file_name'] ."</td>";
    echo "<td>". $rows['owner'] ."</td>";
    echo "<td><a href=add_borrower.php?id=" . $rows['id'] . ">Borrow</a></td>";
    echo "</tr>";
  }

  echo "</table>"; 

 //setup prev and next variables
 $prev = $start - $per_page;
 $next = $start + $per_page;

 //show prev button
 if (!($start<=0)) 
   echo "<a href='new.php?start=$prev'>Prev</a> ";

 //show page numbers
 //set variable for first page
 $i=1;

 for ($x=0;$x<$record_count;$x=$x+$per_page) {
   if ($start!=$x)
     echo " <a href='new.php?start=$x'>$i</a> ";
   else
     echo " <a href='new.php?start=$x'><b>$i</b></a> ";

   $i++;
}
}

//show next button
if (!($start>=$record_count-$per_page))
  echo " <a href='new.php?start=$next'>Next</a>";

?>

4 个答案:

答案 0 :(得分:0)

这是违规行

$search = mysql_escape_string($_POST['search']);

你的逻辑

IF $_POST['submit'] IS NOT SET
THEN
    $search = mysql_escape_string($_POST['search']);

如果没有设置$_POST['submit'],那么这是一个非常安全的选择,那么$_POST['search']

也不是

此外,请考虑点击其中一个“网页”链接时,会发出GET个请求,$_POST将为空。您可以通过POST通过GET参数和分页数据传递$_GET参数,并在$_POST$_REQUEST(或{{1}}中查找感觉很好,或者将你的分页控制创建为“可以放置”的形式。

答案 1 :(得分:0)

您已拥有所有代码。您只需要重写错误条件。

  1. 获取输入变量
  2. 对它们进行编码
  3. 使用错误消息
  4. 测试两者的存在或死亡()

    所以从你的描述:

    $search = mysql_escape_string($_POST['search']);
    
    $dropdown = mysql_escape_string($_POST['dropdown']); 
    
    if (empty($search) && empty($dropdown)) {
        die("ERROR: whatever");
    }
    

    在这种情况下,即使在转义之后也可以使用empty()进行测试,因为在任何情况下它都是空字符串。

答案 2 :(得分:0)

在我看来,当您点击链接时,您不再有POST数据被发送(它变成一个简单的GET请求)。您需要创建一个表单,然后为每个页面都有一个提交按钮。或者在查询字符串中设置搜索字词,例如Google(google.com/search?q=your+search+term+here)

答案 3 :(得分:0)

if (isset($_POST["search"])){

$search = mysql_escape_string($_POST['search']);

}else{

$search = mysql_escape_string($_GET['search']);

}

为$ _POST ['dropdown']做同样的事情 但是当打印出每个页面链接时,你应该在页码的href中添加&amp; search =和&amp; dropdown =。