Постраничный вывод

vladex
На сайте с 21.12.2008
Offline
9
1290

Делаю вывод на страницу по несколько статей, и навигацию в виде цифр-ссылок

Вот файл page_test.php

<?php require_once ("includes/connection.php"); ?>

<?php require_once ("classes/mysql.class.php"); ?>

<?php
$db = new db_class;
$lim = "5";
@$page = $_GET['page'];

$sql = $db->query('SELECT COUNT(*) FROM folder ');
$row = $db->get_row($sql);
$posts = $row[0];
$str = ceil($posts/$lim);
if(empty($page) or $page < 0) $page = 1;
if($page > $str) $page = $str;
$start = $page * $lim - $lim;

$result = $db->query('SELECT * FROM folder LIMIT $start, $lim ');

$folder .= "<div class=\"thumbnails\">";
while($myrow = $db->get_row($result))
$folder .= "<ins class=\"thumbnail\"><div class=\"r\"><a href=\"galery.php?folder=".urlencode($myrow["folder"])."\"><img src=\"images/folder.png\" border=\"0\" alt=\"{$myrow["name"]}\" onfocus=\"this.blur()\" /></a><br /></div></ins>";
$folder .= "</div>";
/* Дальше все остается без изменений */
echo '<a href=?page='. ($page - 1) .'>Назад</a> ';
$i=1;
while ($i <= $str)
{
if ($i==$page)
{echo '<strong><a href=?page='.$i.'>'.$i.'</a></strong> ';}
else
{echo '<a href=?page='.$i.'>'.$i.'</a> ';}
$i = $i+1;
}
echo ' <a href=?page='. ($page + 1) .'>Вперед</a>';
?>

А это класс mysql.class.php

<?php require_once ("includes/connection.php"); ?>

<?php require_once ("classes/mysql.class.php"); ?>

<?php
$db = new db_class;
$lim = "5";
@$page = $_GET['page'];

$sql = $db->query('SELECT COUNT(*) FROM folder ');
$row = $db->get_row($sql);
$posts = $row[0];
$str = ceil($posts/$lim);
if(empty($page) or $page < 0) $page = 1;
if($page > $str) $page = $str;
$start = $page * $lim - $lim;

$result = $db->query('SELECT * FROM folder LIMIT $start, $lim ');

$folder .= "<div class=\"thumbnails\">";
while($myrow = $db->get_row($result))
$folder .= "<ins class=\"thumbnail\"><div class=\"r\"><a href=\"galery.php?folder=".urlencode($myrow["folder"])."\"><img src=\"images/folder.png\" border=\"0\" alt=\"{$myrow["name"]}\" onfocus=\"this.blur()\" /></a><br /></div></ins>";
$folder .= "</div>";
/* Дальше все остается без изменений */
echo '<a href=?page='. ($page - 1) .'>Назад</a> ';
$i=1;
while ($i <= $str)
{
if ($i==$page)
{echo '<strong><a href=?page='.$i.'>'.$i.'</a></strong> ';}
else
{echo '<a href=?page='.$i.'>'.$i.'</a> ';}
$i = $i+1;
}
echo ' <a href=?page='. ($page + 1) .'>Вперед</a>';
?>

Получаю такой вывод в браузер

SELECT COUNT(*) FROM folder



db_class Object ( [db_id] => Resource id #4 [connected] => 1 [mysql_version] => 5.0.45-community-nt )
SELECT * FROM folder LIMIT $start, $lim


db_class Object ( [db_id] => Resource id #4 [connected] => 1 [mysql_version] => 5.0.45-community-nt [query_id] => Resource id #6 )
Ошибка в запросе
Всегда на высоте (http://urik.i-vladex.com/)
[Удален]
#1
vladex:

А это класс mysql.class.php
<?php require_once ("includes/connection.php"); ?>
<?php require_once ("classes/mysql.class.php"); ?>

<?php
$db = new db_class;
$lim = "5";
@$page = $_GET['page'];

$sql = $db->query('SELECT COUNT(*) FROM folder ');
$row = $db->get_row($sql);
$posts = $row[0];
$str = ceil($posts/$lim);
if(empty($page) or $page < 0) $page = 1;
if($page > $str) $page = $str;
$start = $page * $lim - $lim;

$result = $db->query('SELECT * FROM folder LIMIT $start, $lim ');

$folder .= "<div class=\"thumbnails\">";
while($myrow = $db->get_row($result))
$folder .= "<ins class=\"thumbnail\"><div class=\"r\"><a href=\"galery.php?folder=".urlencode($myrow["folder"])."\"><img src=\"images/folder.png\" border=\"0\" alt=\"{$myrow["name"]}\" onfocus=\"this.blur()\" /></a><br /></div></ins>";
$folder .= "</div>";
/* Дальше все остается без изменений */
echo '<a href=?page='. ($page - 1) .'>Назад</a> ';
$i=1;
while ($i <= $str)
{
if ($i==$page)
{echo '<strong><a href=?page='.$i.'>'.$i.'</a></strong> ';}
else
{echo '<a href=?page='.$i.'>'.$i.'</a> ';}
$i = $i+1;
}
echo ' <a href=?page='. ($page + 1) .'>Вперед</a>';
?>

Это не класс mysql.class.php.

Сдается мне, что метод

$row = $db->get_row($sql);
возвращает строку, когда
$sql = $db->query('SELECT COUNT(*) FROM folder ');
подразумевает возвращение массива.
$sql = $db->query('SELECT COUNT(*) FROM folder LIMIT 1');
вернет строку и ошибка пропадет.
Dreammaker
На сайте с 20.04.2006
Offline
570
#2
vladex:
$result = $db->query('SELECT * FROM folder LIMIT $start, $lim ');

Учите матчасть. Переменные в одинарных кавычках не парсятся и не подставляются ;) то есть, идут в запрос как текст $start, $lim , а не как числа. ;)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий