не book_dir определяется в подключаемом файле config/config.php там так и написано $book_dir = $_SERVER['DOCUMENT_ROOT']."/knigi"; я вроде нашел проблему у меня в методе задается $books=array(); и при var_dump($books) оно сначала выдает нормальный массив а потом пишет непонятно откуда взявшийся пустой. сейчас разбираюсь
нашел проблему . просто оно каждый раз обнуляло $books и $i . я их сделал статическими переменными класса . и обращался так else { self::$books[self::$i] = $one; self::$i++;} } return self::$books; и все заработало
появилась новая проблема. вообщем я пишу электронную библиотеку и есть у меня один класс паджинации.взял его на сайте softtime только пришлось ошибки исправлять. вот класс PHP: public function pages($page){ $num = $GLOBALS["books_on_page"]; $query = "SELECT COUNT(*) FROM books; "; $books_total = db::db_query($query); $books = mysql_result($books_total, 0); $total = intval(($books - 1) / $num) + 1; $page = intval($page); if(empty($page) or $page < 0) $page = 1; if($page > $total) $page = $total; $page = intval($page); $start = $page * $GLOBALS["books_on_page"] - $num; $result = db::db_query("SELECT * FROM books LIMIT $start, $num;"); $i=0; while (($postrow[] = mysql_fetch_array($result)) && ($i < $num)) { echo "==============================<br>"; echo"$i<br>"; echo $postrow[$i]['book_id']."</br> ".$postrow[$i]['book_name']."<br> ".$postrow[$i]['book_description']."</br> ".$postrow[$i]['book_autor']."</br> ".$postrow[$i]['book_publishin_house']."<br>"; echo "<a href=".$postrow[$i]['book_way'].">".$postrow[$i]['book_name']."</a>"."<br>"; echo"<br>=========================================="; $i++; } if ($page != 1) $pervpage = '<a href= ./page?page=1><<</a> <a href= ./page?page='. ($page - 1) .'><</a> '; // Проверяем нужны ли стрелки вперед if ($page != $total) $nextpage = ' <a href= ./page?page='. ($page + 1) .'>></a> <a href= ./page?page=' .$total. '>>></a>'; // Находим две ближайшие станицы с обоих краев, если они есть if($page - 2 > 0) $page2left = ' <a href= ./page?page='. ($page - 2) .'>'. ($page - 2) .'</a> | '; if($page - 1 > 0) $page1left = '<a href= ./page?page='. ($page - 1) .'>'. ($page - 1) .'</a> | '; if($page + 2 <= $total) $page2right = ' | <a href= ./page?page='. ($page + 2) .'>'. ($page + 2) .'</a>'; if($page + 1 <= $total) $page1right = ' | <a href= ./page?page='. ($page + 1) .'>'. ($page + 1) .'</a>'; // Вывод меню //echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage; if (isset($prevpage)){echo "$prevpage";} if (isset($page2left)){echo "$page2left";} if (isset($page1left)){echo "$page1left";}echo "<b>".$page."</b>"; if (isset($page1right)){echo "$page1right";}if (isset($page2right)){echo "$page2right";} if (isset($nextpage)){echo "$nextpage";} } как видите он в месте Code: (echo "<a href=".$postrow[$i]['book_way'].">".$postrow[$i]['book_name']."</a>"."<br>";) создает ссылку. есть еще простенький htaccess. вот его код HTML: RewriteEngine On RewriteBase / RewriteRule .* index.php?url=$0 [QSA,L] проблема в следующем. если отключить htaccess то не будет работать паджинация. а если не отключать то ссылки перестают рабоать. в адрес просто выводит значение href той ссылки и все. вопрос такой. как сделать чтобы ссылки работали. тоесть открывали pdf файлы и скачивали rar а не перенаправляли туда.
Попробуйте этот класс. Я им пользуюсь. Брал когда-то тут http://www.tigir.com/paging.htm PHP: <?php class Paging { private $page_size = 10; 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; } } ?>
не класс паджинации меня полностью устраивает. все дело в htaccess мой htaccess перенаправляет все запросы на index.php но я читал что htaccess может преобразовать запрос в имя файла. думал что кто нить напишет инструкцию по тому как это делается. у меня в базе хранятся пути к файлам вида HTML: http://banderas/knigi/PHP_Books/Apress.Beginning.PHP.and.Oracle.From.Novice.to.Professional.Aug.2007.pdf и когда я шелкаю по ссылке в которую в href он этот путь поставляет из за htaccess вида Code: RewriteEngine On RewriteBase / RewriteRule .* index.php?url=$0 [QSA,L] у меня в адресной сроке получается Code: http://banderas/knigi/PHP_Books/Apress.Beginning.PHP.and.Oracle.From.Novice.to.Professional.Aug.2007.pdf тоесть оно вставляет но не скачивает rar и не открывает pdf. вот я и прошу чтобы кто нить подсказал что можно сделать.
barnaki попробуйте прочитать следующую тему: /threadnav92492-1-10.html Если не поймете, то попробуйте задать вопрос в тот же топик по следующему шаблону: 1) Есть такие URL 2) Сейчас используется такой .htaccess 3) Хочу чтобы URL стали такие и такие, и чтобы не мешали этому и этому (тут тоже приводите примеры) З.Ы. В вашем коде существует потенциальная возможность SQL-инъекции, это так, на всякий случай предупреждаю
а где тут sql иньекция обясните. я только один запрос к базе делаю . start вычисляется и он полюбому цифра. а num я беру из GLOBALS
barnaki Если вы выполните поиск до того, как она будет проинициализирована, то вы получите свою инъекцию. Если вы скажете, что такое невозможно, так как переменная в конфиге - предлагаю все равно использовать intval()
насчет мод реврайта все было просто RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* index.php?url=$0 [QSA,L] и все дела