Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP&MySQL: Постраничный вывод

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3

Открыть новую тему     Написать ответ в эту тему

andead



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
mysql_fetch_row — Орабатывает ряд результата запроса и возвращает неассоциативный массив

посмотрите первый пример на php.net

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 12:50 03-08-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke
можно и сделать и "одним" запросом
SELECT *, (SELECT COUNT(*)  FROM `Reviews`) cnt  FROM `Reviews` ORDER BY `id` DESC LIMIT 0,10;  

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:44 04-08-2009
Valuev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Граждане, подскажите пожалуйста.
Возникла необходимость поделить комменты на странице.
Код взял со всем известного сайта:
 
<?
// Переменная хранит число сообщений выводимых на станице  
$num = 20;  
// Извлекаем из URL текущую страницу  
$page = $_GET['page'];  
// Определяем общее число сообщений в базе данных  
$result7 = mysql_query("SELECT COUNT(*) FROM comments WHERE post='$id'");  
$posts = mysql_result($result7, 0);  
// Находим общее число страниц  
$total = intval(($posts - 1) / $num) + 1;  
// Определяем начало сообщений для текущей страницы  
$page = intval($page);  
// Если значение $page меньше единицы или отрицательно  
// переходим на первую страницу  
// А если слишком большое, то переходим на последнюю  
if(empty($page) or $page < 0) $page = 1;  
  if($page > $total) $page = $total;  
// Вычисляем начиная к какого номера  
// следует выводить сообщения  
$start = $page * $num - $num;  
// Выбираем $num сообщений начиная с номера $start  
$result3 = mysql_query("SELECT * FROM table WHERE post='$id' ORDER BY id DESC LIMIT $start, $num");  
// В цикле переносим результаты запроса в массив $postrow  
while ( $postrow[] = mysql_fetch_array($result3))  
 
echo "<table>";  
for($i = 0; $i < $num; $i++)  
{  
 echo "<tr>  
         <td>".$postrow[$i]['author']."</td>  
         <td>".$postrow[$i]['date']."</td></tr>  
       <tr><td colspan=\"2\">".$postrow[$i]['text']."</td></tr>";  
}  
echo "</table>";  
?>
 
Работает нормально, страница стала грузиться намного быстее.  
1.Один косячок. Если страница без комментов, или их один- два, всё равно на месте комментариев пустое поле высотой в num, как я подозреваю. Можно ли это как то побороть?
2.Такой код наверно нужно защищать от передачи по get ? Посоветуйте пожалуйста какой нибудь вариант.
 
По ссылкам выше ходил, но с PHP знаком очень поверхностно. Пожалуй даже слово знаком - перебор. Поэтому прошу сильно не пинать.
Спасибо.

Всего записей: 168 | Зарегистр. 20-07-2007 | Отправлено: 21:08 21-08-2010
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброй ночи.
Подскажите.

Код:
for($i=1; $i<=$kolichestvo_stranic; $i++)  
    {
        if($_GET['page'] == $i)
            $show_stranici .= ' ' .$i .' ';
        else
            $show_stranici .= '<a href="http://'.$_SERVER['SERVER_NAME']._SERVER['PHP_SELF'].'?page='.$i.'">'.$i."</a>\n";
    }

При таком коде если будет 200 страниц, то все двестии будут выводится от 1 до 200.
 
Как сделать чтобы с права и с лева от текущей страницы было к примеру еще по две страницы?
 
Пример:
 
Назад 4 5 6 7 8 Вперед

----------
Абонентское обслуживание и ремонт компьютеров в Днепропетровске

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 01:46 12-09-2010 | Исправлено: DarkSmoke, 01:46 12-09-2010
denop ua

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее...

Всего записей: 8 | Зарегистр. 14-06-2012 | Отправлено: 17:14 22-06-2012
FantasT



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DarkSmoke

Код:
 
function paginator($current = 1, $count = 1) {
         
        if ($count > 5) {
            $left_num = ($current > 3) ? $current - 2 : 1;
            $right_num = ($current > 3) ? $current + 2 : ($current + 2) + (3 - $current);
 
            if ($right_num > $count) {
                $left_num = $left_num - ($right_num - $count);
                $right_num = $count;
            }
 
            for ($i = $left_num; $i <= $right_num; $i++) {
                $str[] = array('page' => $i, 'link' => '?page='.$i);
            }
        } else {
            for ($i = 1; $i <= $count; $i++) {
                $str[] = array('page' => $i, 'link' => '?page='.$i);
            }
        }
         
        if (count($str) < 2) {
            return null;
        }
         
        return $str;
    }
 
$current_page = ((int)$_GET['page] !== 0)? $_GET['page] : 1;
$count_pages = 200; // Get from DB
 
$pages = paginator($current_page, $count_pages);
 
foreach($pages as $p) {
    echo '<a href='.$p['link'].'>'.$p['page'].'</a> ';  
}
 

 
приблизительно так...

Всего записей: 92 | Зарегистр. 08-01-2005 | Отправлено: 21:38 26-06-2012
larabelle



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, не знаю как задать вопрос, чтобы и по сути и без излишнего кода. ... попробую малой кровью, если не выйдет, то придется код постить. Собсно делаю запрос к базе и постраничный вывод. Для примера возьмем строчку, ссылающуюся на последнюю страницу выборки:
 $endpage = ' ... <a href="'.$_SERVER['PHP_SELF'].'?view=cat&id_cat=4?page='.$cnt_pages.'">  >>>  </a>';
т.е. в переменную view подгружаем страницу cat (cat.php) где из базы выбираются товары с id_cat=4. (id_cat - поле в таблице). Тут явно указано id_cat=4, а нужно бы вместо 4 указать переменную $id_cat (или ссылку на значение поля id_cat), т.к. где-то это 4, где то это 22, а где то и 22014.  
Вот тут собсно у меня и не получается, т.к. программирую на 1С а в пхп уж обстоятельства привели.
Спасибо  

Всего записей: 114 | Зарегистр. 11-12-2007 | Отправлено: 15:16 26-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
larabelle
$endpage = ' ... <a href="' . $_SERVER['PHP_SELF'] . '?view=cat&id_cat=' . $id_cat . '&page=' . $cnt_pages . '">  >>>  </a>';  
 
или
 
$endpage = ' ... <a href="' . $_SERVER['PHP_SELF'] . "?view=cat&id_cat=$id_cat&page=$cnt_pages\">  >>>  </a>";

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:28 26-08-2013 | Исправлено: Cheery, 21:29 26-08-2013
larabelle



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
урааааааааааааааа!!!  
и правда работает. я 2 дня эту конкатенацию в каких только вариантах не пробовала -
думала все перебрала, оказывается не все ))
 
спс Cheery

Всего записей: 114 | Зарегистр. 11-12-2007 | Отправлено: 09:29 27-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
larabelle
я надеюсь, что вы обрабатываете полученные переменные перед тем, как отобразить их?
иначе можете получить http://ru.wikipedia.org/wiki/Межсайтовый_скриптинг

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:40 27-08-2013
larabelle



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ваш линк еще не прочитала, но вообще делаю так:
$t = "SELECT * FROM products  
        WHERE id_cat='%d'
    LIMIT ".$start.", ".ITEMS_PER_PAGE;
    $query = sprintf($t, $id_cat);      
    $result = mysql_query($query);

Всего записей: 114 | Зарегистр. 11-12-2007 | Отправлено: 09:55 27-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
larabelle

Цитата:
но вообще делаю так:

ну так прочитайте - я не об SQL Injection говорю, а о XSS инъекции.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:58 27-08-2013
larabelle



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, посмотрела, спасибо за наводку.
 
ps. (off ) в вебе, я смотрю,  как на дорогах - опасность может быть ото всюду

Всего записей: 114 | Зарегистр. 11-12-2007 | Отправлено: 10:04 27-08-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP&MySQL: Постраничный вывод


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru