[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: На сервере не работает навигация
romul
при запросе
$r = $_PAGING->get_page('SELECT * FROM raboty WHERE kategoria = "'.$posts['kategoria'].'"',$daba); 

выдаёт ошибку
Fatal error: Call to a member function fetch_assoc() on a non-object in /home....
вот на этой строке ошибка
while($row = $r->fetch_assoc())


на денвере нормально работает с WHERE, а на хостинге не хочет работать

Код

//подключаем класс Paging
require('paging.inc.php');

//соединяемся с базой данных
$_DB = new mysqli($DBSERVER,$DBUSER,$DBPASS,$db);


//создаем экземпляр класса Paging
//в качестве параметра передаем ему указатель на соединение с MySQL

$_PAGING = new Paging($_DB);

//выполняем обычный запрос данных не заботясь
//о разбивке на страницы через метод get_page объекта класса Paging



$r = $_PAGING->get_page('SELECT * FROM raboty WHERE kategoria = "'.$posts['kategoria'].'"',$daba);

while($row = $r->fetch_assoc())
{
//обрабатываем КАК ОБЫЧНО полученные из базы данные и выводим пользователю
}

//выводим информационную строку вида: "Показано с 1 по 20 из 107"
echo '<center><p>'.$_PAGING->get_result_text().'</p>';

//выводим ссылки-ярлыки на предыдущую и следующую страницы
echo '<p>Страницы: '.$_PAGING->get_prev_page_link().' '.$_PAGING->get_next_page_link().'';

//а также строку с номерами страниц (основные ярлыки)
echo $_PAGING->get_page_links().'</p></center>';


файл 'paging.inc.php


class Paging {

private $page_size = 24;
private $link_padding = 10;
private $page_link_separator = ' ';
private $next_page_text = 'следующая >';
private $prev_page_text = '< предыдущая';
private $result_text_pattern = 'Показано с %s по %s из %s';
private $page_var = 'p';

private $db;
private $q;
private $total_rows;
private $total_pages;
private $cur_page;

public function __construct($db, $q='', $page_var='p')
{
$this->db = $db;
if ($q) $this->set_query($q);
$this->page_var = $page_var;
$this->cur_page = isset($_GET[$this->page_var]) && (int)$_GET[$this->page_var] > 0 ? (int)$_GET[$this->page_var] : 1;
}

public function set_query($q)
{
$this->q = $q;
}

public function set_page_size($page_size)
{
$this->page_size = abs((int)$page_size);
}

public function set_link_padding($padding)
{
$this->link_padding = abs((int)$padding);
}

public function get_page($q='')
{
if ($q) $this->set_query($q);

$r = $this->db->query( $this->query_paging($this->q) );
$this->total_rows = array_pop($this->db->query('SELECT FOUND_ROWS()')->fetch_row());

if ($this->page_size !== 0) $this->total_pages = ceil($this->total_rows/$this->page_size);

if ($this->cur_page > $this->total_pages)
{
$this->cur_page = $this->total_pages;
if ( $this->total_pages > 0 ) $r = $this->db->query( $this->query_paging($this->q) );
}

return $r;
}

public function get_result_text()
{
$start = (($this->cur_page-1) * $this->page_size)+1;
$end = (($start-1+$this->page_size) >= $this->total_rows)? $this->total_rows:($start-1+$this->page_size);

return sprintf($this->result_text_pattern, $start, $end, $this->total_rows);
}

public function get_page_links()
{
if ( !isset($this->total_pages) ) return '';

$page_link_list = array();

$start = $this->cur_page - $this->link_padding;
if ( $start < 1 ) $start = 1;
$end = $this->cur_page + $this->link_padding-1;
if ( $end > $this->total_pages ) $end = $this->total_pages;

if ( $start > 1 ) $page_link_list[] = $this->get_page_link( $start-1, $start - 2 > 0 ? '...' : '' );
for ($i=$start; $i <= $end; $i++) $page_link_list[] = $this->get_page_link( $i );
if ( $end + 1 < $this->total_pages ) $page_link_list[] = $this->get_page_link( $end +1, $end + 2 == $this->total_pages ? '' : '...' );
if ( $end + 1 <= $this->total_pages ) $page_link_list[] = $this->get_page_link( $this->total_pages );

return implode($this->page_link_separator, $page_link_list);
}

public function get_next_page_link()
{
return isset($this->total_pages) && $this->cur_page < $this->total_pages ? $this->get_page_link( $this->cur_page + 1, $this->next_page_text ) : '';
}

public function get_prev_page_link()
{
return isset($this->total_pages) && $this->cur_page > 1 ? $this->get_page_link( $this->cur_page - 1, $this->prev_page_text ) : '';
}

private function get_page_link($page, $text='')
{
if (!$text) $text = $page;

if ($page != $this->cur_page)
{
$reg = '/((&|^)'.$this->page_var.'=)[^&#]*/';
$url = '?'.( preg_match( $reg, $_SERVER['QUERY_STRING'] ) ? preg_replace($reg, '${1}'.$page, $_SERVER['QUERY_STRING']) : ( $_SERVER['QUERY_STRING'] ? $_SERVER['QUERY_STRING'].'&' : '' ).$this->page_var.'='.$page);
return '<a href="'.$url.'">'.$text.'</a>';
}
return '<span>'.$text.'</span>';
}

private function query_paging()
{
$q = $this->q;

if ($this->page_size != 0)
{
//calculate the starting row
$start = ($this->cur_page-1) * $this->page_size;

//insert SQL_CALC_FOUND_ROWS and add the LIMIT
$q = preg_replace('/^SELECT\s+/i', 'SELECT SQL_CALC_FOUND_ROWS ', $this->q)." LIMIT {$start},{$this->page_size}";
}

return $q;
}
}


вот кстати ссылка на статью про этот скрипт
http://www.tigir.com/paging.htm#php_paging_class



Спустя 32 минуты, 20 секунд (19.05.2011 - 21:57) Arni написал(а):
Допишите после запроса

echo $_DB->error . '<br />';


И посмотрите что он хочет.

Ошибка Fatal error: Call to a member function fetch_assoc() означает что в запросе ошибка, и объект $r не создавался.

Спустя 1 час, 18 минут, 9 секунд (19.05.2011 - 23:15) romul написал(а):
ничё не выдаёт
echo $_DB->error . '<br />';

Спустя 14 минут, 40 секунд (19.05.2011 - 23:30) Arni написал(а):
Может на хостинге MySQLi не установлен? Но это врятли потому что давало бы ошибку еще раньше. Но в любом случае, echo $_DB->error . '<br />'; обязательно должна вернуть ошибку. Потому что такое происходит если ошибка в запросе.

Спустя 25 минут, 20 секунд (19.05.2011 - 23:55) romul написал(а):
SELECT * FROM raboty WHERE id = "40" - так работает но понятно дело возращает одну запись

SELECT * FROM raboty - так тоже работает но считает все записи таблицы

странно почему на денвере всё нормально работает. на хосте понятно дело mysql установлен

Спустя 15 часов, 16 минут, 51 секунда (20.05.2011 - 15:12) Greg1978 написал(а):
$r = $_PAGING->get_page('SELECT * FROM raboty WHERE kategoria = "'.$posts['kategoria'].'"',$daba); 


Для чего параметр $daba в метод передаётся?

Кстати в классе Paging методе
public function get_page($q='')

требует только один параметр.

Спустя 38 минут, 4 секунды (20.05.2011 - 15:50) romul написал(а):
да можно и без $daba разницы нет.

А если в классе Paging
public function get_page($q='')

требуеться один параметр, то почему на денвере работает?
Я смотрел на других форумах что то похожее уже решалось, но там чё то не рассказывают как,
вот на этом например http://forum.oszone.net/showthread.php?p=1679231

Спустя 1 час, 11 минут, 18 секунд (20.05.2011 - 17:01) Greg1978 написал(а):
Версия БД на Денвере и на хосте какие?
и поля у вас такие же как в примере?
category_id (пример) == category (Ваше поле)

Спустя 1 час, 4 минуты, 26 секунд (20.05.2011 - 18:06) romul написал(а):
бд денвер - 5.0.45-community-nt
бд хостинг - 5.0.51a-community

с полями всё нормально.

Короче почему то переменная $posts['kategoria'] которая имеет тип "varchar" чем то не нравиться хосту.

Я немного переделал код, сделал выборку по типу "INT". всё заработало.

Всем спасибо! Всё работает!

Спустя 1 час, 45 минут, 1 секунда (20.05.2011 - 19:51) Greg1978 написал(а):
Кстати да, целые и в кавычках ... странно
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.