Нумерация страниц при использовании переменной GET - PullRequest
0 голосов
/ 18 сентября 2009

Мне было трудно разбивать код на страницы ниже. Я думаю, что это связано с передачей переменной GET $ find на следующую страницу.

В любом случае, как бы разбить на страницы приведенный ниже код, чтобы в приведенной ниже таблице отображалось только 100 строк на страницу?

Заранее спасибо,

John

<?php
ob_start();
session_start();
$find = strip_tags($_GET['find']);
$illegal = array("'", ".", "/", "\"", ";", "{", "}", "[", "]", "\\", "''", "'''", "''''", "'''''", "\\\\", "\\\\\\", "\\\\\\\\");
$find = str_replace($illegal, '', $find);
$find = trim ($find);
$find = strtolower($find);
$find = stripslashes($find);
$_SESSION['find'] = $find;
?>

<?
if ($searching =="yes")
{

if ($find == "")
{
session_write_close();
header("Location:http://www.site.com/index.php");
exit;
unset($_SESSION['find']);   

}

mysql_connect("mysqlv10", "username", "password") or die(mysql_error());
mysql_select_db("database") or die(mysql_error());
$find = mysql_real_escape_string($find);

$result=mysql_query("SHOW TABLES FROM database LIKE '$find'")
or die(mysql_error());

if(mysql_num_rows($result)>0){
while($table=mysql_fetch_row($result)){
print "<p class=\"topic\">$table[0]</p>\n";
$r=mysql_query("SELECT * , votes_up - votes_down AS effective_vote FROM `$table[0]` WHERE site != '' ORDER BY effective_vote DESC");

print "<table class=\"navbar\">\n";
while($row=mysql_fetch_array($r)){

$effective_vote = $row['votes_up'] - $row['votes_down']; 

print "<tr>";

print "<td class='sitename'>".'<a type="amzn" category="products" class="links2">'.$row['site'].'</a>'."</td>";

print "<td class='votes'>".'<span class="votes_count" id="votes_count'.$row['id'].'">'.number_format($effective_vote).'</span>'."</td>";
print "<td class='ballot'>".'<span class="button" id="button'.$row['id'].'">'.'<a href="javascript:;" class="cell1" id="'.$row['id'].'">'.vote.'</a>'.'</span>'."</td>";
}
print "</tr>\n";
}
print "</table>\n";

}
?>

Ответы [ 2 ]

2 голосов
/ 18 сентября 2009

Вы должны использовать LIMIT в своем запросе, чтобы указать базе данных, сколько строк вы хотите и с чего начать.

Передайте параметр, который сообщает сценарию, что вам нужен еще один фрагмент результатов, а не только первый пакет.

Таким образом, для ссылки вы можете передать параметр page:

example.com/results.php?page=2

Где page= сообщит сценарию, какую страницу вы хотите вернуть.

Тогда вы захотите LIMIT количество строк, возвращаемых каждый раз, чтобы у вас была согласованная подкачка.

$results_cnt = 100; //--rows you want per page of results

Теперь в вашем скрипте вы проверите, установлена ​​ли переменная page. Если нет, по умолчанию начальная строка возвращается с первой. Но так как вы хотите возвращать разные страницы / наборы результатов, вам нужно немного математики, чтобы начать с правильной строки.

if(isset($_GET["page"]) //--see if the variable is even there
{
    $page_num = (int)$_GET["page"]; //--forcing it to always be an integer

    $start_row = $results_cnt * ($page_num - 1);

    /* --
     what happens:
       ($results_cnt currently at 100)

     on page one (page=1), start at row 0
      math: 100 * (1 - 1) = 0

     on page two (page=2), start at row 100
      math: 100 * (2 - 1) = 100

     on page three (page=3), start at row 200
      math: 100 * (3 - 1) = 200

     etc.
    */
}
else
    $start_row = 0;

Теперь, установив правильную начальную строку, настройте SQL-запрос на использование переменных следующим образом:

$r = mysql_query("SELECT *, votes_up - votes_down AS effective_vote 
                   FROM `$table[0]`
                   WHERE site != '' 
                   ORDER BY effective_vote DESC
                   LIMIT $start_row, $results_cnt");

Каждый раз, когда вы нажимаете на страницу, он проверяет, есть ли $_GET["page"]. Если нет, то дисплей из первого ряда. Если это так, проведите математику и определите, сколько строк нужно передать, и покажите следующую страницу.

0 голосов
/ 18 сентября 2009

вам нужно использовать

LIMIT (<pagenumber*amount of records you want to display>,< amount of records you want to display >)

в вашем выражении SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...