【问题标题】:php search from mysql database showing only one page从mysql数据库中的php搜索只显示一页
【发布时间】:2012-04-22 13:36:14
【问题描述】:

以下脚本仅显示第一页,并且存在指向下一页的链接,但没有引导到任何地方。有人能帮我吗?

$var = @$_GET['q'] ;
$trimmed = trim($var);
$limit = 10;

if ($trimmed == "")
{
    echo "<p>What are you looking for?...</p>";
    exit;
}

if (!isset($var)) 
{   
    echo "<p>We dont seem to have a search parameter!</p>";
    exit;
}

mysql_connect('xxx', 'yyy', 'zzz');
mysql_select_db('yyy') or die('Unable to select database');
$query = "select * from table  where NAME like '%$trimmed%' order by NAME";
$numresults = mysql_query($query);
$numrows = mysql_num_rows($numresults);

if ($numrows == 0)
{
    echo "<h4>Results</h4>";
    echo "<p>Sorry, your search: &quot;" . $trimmed . "&quot; returned zero results</p>";
    echo "<p><a href=\"http://www.google.com/search?q="
    . $trimmed . "\" target=\"_blank\" title=\"Look up
    " . $trimmed . " on Google\">Click here</a> to try the search on google</p>";
}

if (empty($s)) 
{
    $s = 0;
}

$query .= " limit $s,$limit";
$result = mysql_query($query) or die("Couldn't execute query");
echo "<p>You searched for: &quot;" . $var . "&quot;</p>";
echo "Results";
$count = 1 + $s;

while ($row= mysql_fetch_array($result)) 
{
    $title = $row["NAME"];
    echo "$count.-&nbsp;$title" ;
    $count++ ;
}

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

if ($s >= 1) 
{ 
    // bypass PREV link if s is 0
    $prevs = ($s - $limit);
    print "&nbsp;<a href=\"$PHP_SELF?s=$prevs&q=$var\">&lt;&lt;
    Prev 10</a>&nbsp;";
}

$pages = intval($numrows/$limit);

if ($numrows % $limit) 
{
    $pages++;
}  

if (!((($s+$limit)/$limit) == $pages) && $pages != 1) 
{
    $news = $s + $limit;
    print "<a href=\"$PHP_SELF?s=$news&q=$var\">Next 10 &gt;&gt;</a>";
} 

$a = $s + ($limit);

if ($a > $numrows) 
{ 
    $a = $numrows; 
}

$b = $s + 1;
echo "<p>Showing results $b to $a of $numrows</p>";

【问题讨论】:

  • 您的分页方法非常初级。尝试构建类和函数。
  • 另外,这段代码容易受到SQL注入攻击。见mysql_real_escape_string()
  • @GarrettAlbright 如果启用了magic_quotes,则不会。
  • 主机上是否启用了magic_quotes?如果他们禁用它怎么办?如果您决定移动到另一台主机并忘记检查他们是否启用了它怎么办?当您自己确保代码安全并不难时,期望您可能无法控制以确保代码安全的神奇配置真是太疯狂了。

标签: php mysql


【解决方案1】:

在您的代码中,每次重新加载页面或单击下一页链接时,$s 都会重置。您的代码开头应该有$s = $_REQUEST['s']

【讨论】:

    【解决方案2】:

    PHP_SELF 是一个 $_SERVER 变量。无论如何,你应该在这里使用$_SERVER['SCRIPT_NAME']

    echo "<a href=\"{$_SERVER['SCRIPT_NAME']}?s=$news&q=$var\">Next 10 &gt;&gt;</a>";
    

    在一些显着的改进中,您真的应该考虑使用 urlencode() 清理您放入查询字符串中的变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多