• Уважаемый посетитель!!!
    Если Вы уже являетесь зарегистрированным участником проекта "миХей.ру - дискусcионный клуб",
    пожалуйста, восстановите свой пароль самостоятельно, либо свяжитесь с администратором через Телеграм.

Разделение по страницам

  • Автор темы Автор темы Sunland
  • Дата начала Дата начала
S

Sunland

Гость
Вот такая проблема:

Выводиться ризультаты из базы данных(сайт, описание, url).
И проблема заключеться в том что я не могу создать чтобы после определеного количества сайтов новая страница была сгинирирована.

Тоесть примерно после 5 сайтов создавалась новая странича автамотически.


Вот код вызова сайтов
PHP:
<table width="80%" border="2" cellspacing="3" cellpadding="3" bordercolor=#5CA0C7>
<tr>
<td>ID</td>
<td>Site Name</td>
<td>Description</td>
<td>Counter</td>
<td>Url</td>
<td>Option</td>
</tr>


<?php 

include "../config.php";

$query = "SELECT * from xelinks order by id desc ";
$result= mysql_query($query);

while ($row=mysql_fetch_array($result))
{
extract($row);
// extract the row values 


?>
<tr>
<td><?php echo "$id"; ?></td>
<td><?php echo "$name"; ?></td>
<td><?php echo "$description"; ?></td>
<td><?php echo "$counter" ?></td>
<td><a href="<?php echo "$url"; ?>" target=_new><?php echo "$name"; ?></a></td>
<td>[ <a href="<?php echo "del.php?id=$id"; ?>">Delete</a> | <a href="<?php echo "edit.php?id=$id"; ?>" target=_blank>Edit</a> ]</td>
</tr> 

<?php } ?>
 
Тоесть примерно после 5 сайтов создавалась новая странича автамотически.
Извините, уточнение:
вы хотите чтобы первоначально грузилось только пять строк таблицы (5 различных сайтов из БД), а внизу ссылка - переход на "следущие 5 сайтов"?
 
Да.

Но чтобы можно было лекго менать количество сайтов.
Тоесть с 5 на 10 или на 20.
 
Используйте LIMIT.
Выражение LIMIT может использоваться для ограничения количества строк, возвращенных командой SELECT. LIMIT принимает один или два числовых аргумента. Эти аргументы должны быть целочисленными константами. Если заданы два аргумента, то первый указывает на начало первой возвращаемой строки, а второй задает максимальное количество возвращаемых строк. При этом смещение начальной строки равно 0 (не 1):

mysql> SELECT * FROM table LIMIT 5,10; # возвращает строки 6-15

Если задан один аргумент, то он показывает максимальное количество возвращаемых строк:

mysql> SELECT * FROM table LIMIT 5; # возвращает первых 5 строк

Другими словами, LIMIT n эквивалентно LIMIT 0,n.

Общий пример: смотреть тут.
Прочитайте. Если сложно будет, адаптирую под вашу задачу.
 
Sunland написал(а):
Пасибо. А не получеться сделать что-то по проще?
Блин, как мне нравятся такие просьбы :) Нет, я серьезно! Тот пример по ссылке учитывает все ньюансы и в общем случае не подведет, не вызовет глюков... (пример глюка - переход "в никуда" по ссылке "следующая" на последней странице)
Где там упрощать - я даже не представляю...

Основные идеи там:
выдача ограниченного числа записей (через LIMIT)
проверка границ диапазона

Что вызывает трудности: математика или php?
Совет: запустите тот пример на сервере и посмотрите, как он работает. Авось что-то прояснится и некоторые вопросы отпадут. Тот пример - он с виду только страшный :)
 
PHP:
<?php 

include "../config.php";

// Данный пример демонстрирует систему постраничной навигации с использованием таблицы table.

if (!isset($_GET['page'])) {$_GET['page'] = '1';} // Проверяем, введена-ли пользователем страница. Если нет, устанавливаем первую.
$to_page = 2; // Колличество записей на страницу.
$pages_links = 2; // Указываем кол-во страниц, которые будут отображаться в перечислении относительно текущей.

$p = ($_GET['page'] * $to_page) - $to_page; // Вычисляем стартовую запись.

$query = "SELECT COUNT(*) FROM xelinks"; // Узнаем кол-во записей в таблице.
$result = mysql_query($query);
$count = mysql_result($result,0,'COUNT(*)');
$pages = ceil($count / $to_page); // Вычисляем кол-во страниц.

if ($_GET['page'] > $pages) {
   header("Location: pages.php?page=".$pages);
} elseif($_GET['page'] < 1) {
   header("Location: pages.php?page=1");
}

// Вывод содержимого нужных записей в виде массивов.
$query = "SELECT * FROM xelinks order by id desc LIMIT ".$p.",".$to_page; // Выбираем из таблицы указанное кол-во записей начиная со стартовой на текущей странице.
$result = mysql_query($query);

while ($row=mysql_fetch_array($result))
{
extract($row);
// extract the row values 
?>
<tr>
<td><?php echo "$id"; ?></td>
<td><?php echo "$name"; ?></td>
<td align="left"><?php echo "$description"; ?></td>
<td align="left"><?php echo "$counter"; ?></td>
<td><a href="<?php echo "$url"; ?>" target=_blank><?php echo "$url"; ?></a></td>
<td>[ <a href="<?php echo "delete.php?id=$id"; ?>">Delete</a> | <a href="<?php echo "edit.php?id=$id"; ?>" target=_blank>Edit</a> ]</td>
</tr> 

<?php } ?>

<?
// Конец вывода записей.

// Навигация по списку
$pages_links_view_max = 0;
$pages_links_view_min = 0;

if ($pages - $_GET['page'] >= ($pages_links + 1)) {
   $to_max = $_GET['page'] + $pages_links;
   $pages_links_view_max = 1;
} else {
   $to_max = $pages;
}

// Вычесляем. Является ли текущая страница превышающей кол-во страниц, которые будут отображаться в перечислении относительно текущей
if ($_GET['page'] > ($pages_links + 1)) {
   $to_min = $_GET['page'] - $pages_links;
   $pages_links_view_min = 1;
} else {
   $to_min = 1;
}

if ($pages_links_view_min == 1) {
   echo ' <A href="?page=1"> First</A>';
}

if ($_GET['page'] > 1) {
   echo ' <A href="?page='.($_GET['page']-1).'"> <<</A>';
}

if ($pages_links_view_min == 1) {
   echo ' ...';
}

// Вычесляем. Является ли текущая страница меньше чем кол-во страниц минус кол-во страниц, которые будут отображаться в перечислении относительно текущей
for ($p = $to_min; $p <= $to_max; $p++) {
   if ($_GET['page'] == $p) {
       echo ' <B>['.$p.']</B>';
   } else {
       echo ' <A href="?page='.$p.'">['.$p.']</A>';
   }
}
if ($pages_links_view_max == 1) {
   echo ' ...';
}

if ($_GET['page'] < $pages) {
   echo ' <A href="?page='.($_GET['page']+1).'"> >></A>';
}

if ($pages_links_view_max == 1) {
   echo ' <A href="?page='.$pages.'"> Last ['.$pages.']</A>';
}

?>

Вот сделал!:jump:

Но есть другая проблема!

Номар страниц выдаеться с верху перед всеми сайтами.:mad:
Не мог бы написать или переписать мой код, чтобы страницы выводились посли сайтов.
 
А если на другой странице стоит такой код:

PHP:
 elseif(isset($sid)) {

	$qs = mysql_query("select * from $t_subcategory where id='$sid' order by name");
	$qsrow = @mysql_fetch_array($qs);
	$qc = mysql_query("select * from $t_category where id='".$qsrow["cid"]."' order by name");
	$qcrow = @mysql_fetch_array($qc);

	print "<div align=center>\n";
	print "<b><a href=\"index.php\" class=up>Home</a> » <a href=\"index.php?cid=".$qcrow["id"]."\"class=up>".$qcrow["name"]."</a> &#187 ".$qsrow["name"]."</b><br><br>\n";
	print "<table width=600 cellspacing=2 cellpadding=2 border=0>\n";

	$ql = mysql_query("select * from $t_links where sid='$sid' order by name");
	$total = mysql_num_rows($ql);

	if($total == 0) { print "<tr><td>No links</td></tr>"; }
	else {
		while($qlrow = @mysql_fetch_array($ql)) {

			print "<tr>\n";
			print "<td>\n";
                        print "<a target=_blank href=\"go.php?id=".$qlrow["id"]."\" class=link>".$qlrow["name"]."</a><br>\n";
			print "<div class=aboutlink>".$qlrow["description"]."</div>";
			print "<div class=url>".$qlrow["url"]."</div><br>";
			print "</td>\n";
			print "</tr>\n"; 	
}
	}	
	print "</table>\n</div>\n";
}

То как в этом случие надо сделать разделение по страницам?

Вот эта страница http://www.xefus.net/ideas/xe-cat/index.php?sid=4
 
Да все тоже самое, только вместо
$query = "SELECT COUNT(*) FROM xelinks"; // Узнаем кол-во записей в таблице.
на
$query = "select COUNT(*) from $t_links where sid='$sid'"; // Узнаем кол-во записей в таблице.
и SELECT * FROM xelinks order by id desc LIMIT ".$p.",".$to_page;
на SELECT * from $t_links where sid='$sid' order by name desc LIMIT ".$p.",".$to_page;
 
Я пробовал сделать но не чего не вышло наверно потомучто я не там закрывал else ({}):confused:

Не могли бы вы мне совместить два кода чтобы они работали?
Первый по разделение, а второй который до этого я писал.
Спасибо.:)
 
Назад
Сверху