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

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

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

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

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

knyshow2

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Топики на этом форуме прочел, но...  
Искать  продолжаю,  но  хочу  еще  раз  попросить  помочь и привожу конкретные  коды.  Сейчас  у меня из базы выводится все записи, но сверху и снизу  печатается  пустая  навигация,  а  нужно  выводить на страницу по 10 записей  и если мы сейчас находимся на первой странице или на последней, то кнопки  "Следующие  10"  и  "Предыдущие  10"  соответственно  становятся не рисунками-ссылками, а простыми рисунками, т.е. без тегов <a></a>. Помогите  плиз  решить  задачу,  а  то  она мне уже снится (чесно) Вот мой, немного урезанный код:
 

<!-- навигация. кнопки "Предыдущие 10" и "Следующие 10" -->
<a href=#><img src=images/button_prev.png></a>
<a href=#><img src=images/button_next.png></a>
 
<!--   $_GET['ganre']  и  $_GET['studio'] - передаваемы странице параметры, причем  этих  параметров  или  нет  вообще (мот не передаваться), либо есть только  один из них. Далее идет проверка на наличие переданных параметров и в соответствии с результатами формируется запрос к базе. -->
 
<?
if(empty($_GET['ganre']) && empty($_GET['studio']))
{
$query = "select * from tablica";
}
if(!empty($_GET['ganre']) && empty($_GET['studio']))
{
$query = "select * from tablica where ganre=".$_GET['ganre'];
}
if(!empty($_GET['studio']) && empty($_GET['ganre']))
{
$query = "select * from tablica where studio=".$_GET['studio'];
}
 
<!-- Выполняем запрос и в цикле выводим результаты -->
if($res = mysql_query($query))
{
 $num = mysql_num_rows($res);
 for($i = 0; $i < $num; $i++)
 {
  $fetch = mysql_fetch_array($res);
  echo $fetch['rusname'];
 }
}
?>
 
<!-- и снова навигация. кнопки "Предыдущие 10" и "Следующие 10" -->
<a href=#><img src=images/button_prev.png></a>
<a href=#><img src=images/button_next.png></a>

Помогайте плиз.

Всего записей: 273 | Зарегистр. 02-09-2004 | Отправлено: 12:00 23-11-2004 | Исправлено: knyshow2, 16:13 23-11-2004
sket4



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
if(empty($_GET['ganre']) && empty($_GET['studio']))
 
если ты используешь это, то дальше должен идти запрос к базе...это раз, а ты вызываешь еще по разу :
 
if(!empty($_GET['ganre']))
 
и
 
if(!empty($_GET['studio']))
 
=> этого делать не надо...
 
а вообще я бы тебе порекомендовал проверить, что у тя передается методом гет, и передается ли что-то вообще...по ссылке?
 
да и код у тебя мутный, попробуй разделить на 2 файла все то, что у тя выбирается из базы, а потом просто их инклудить, и волки сыты...и овцы целы...

Всего записей: 712 | Зарегистр. 07-05-2004 | Отправлено: 14:53 23-11-2004
knyshow2

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

Цитата:
> этого делать не надо...

ну так я формирую запрос к базе в зависимости от переданных параметров...

Цитата:
 вообще я бы тебе порекомендовал проверить, что у тя передается методом гет

блин, да я же это и проверяю этими тремя IF...

Цитата:
а и код у тебя мутный

это мутный код?????!!!!!! извини за нескромный вопрос - ты вообще программируешь давно??? я привел самый что ни на есть простой код!!!

Всего записей: 273 | Зарегистр. 02-09-2004 | Отправлено: 16:10 23-11-2004 | Исправлено: knyshow2, 16:12 23-11-2004
Ignatych

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
knyshow2, с вашим кодом потребуется максимум 3 часа, чтоб расковырять ваш сайт. Как вы думаете, что произойдет если вызвать ваш скрипт таким образом?
 
http://yoursite.net/yourscript.php?ganre=1%20UNION%20ALL%20SELECT%20*,null,null,null%20FROM%20`users`;
 
Варьируя имена таблиц и количество null можно получить практически любую информацию из базы. Если в именах таблиц используется префикс, то сгенерив ошибку можно узнать и его
 

Цитата:
Цитата: вообще я бы тебе порекомендовал проверить, что у тя передается методом гет  
 
блин, да я же это и проверяю этими тремя IF...  

 
Прислушиваться к советам надо.

Всего записей: 1 | Зарегистр. 23-11-2004 | Отправлено: 18:17 23-11-2004
knyshow2

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да причем тут взломать-не взломать???
Во первых, я привел очень обрезанный код, а на самом деле он значительно безопастнее
Во вторых, я могу поспорить с каждым на этом форуме, что у них взломать мой ссайт не удастся - сайт строится для сети, недоступной извне ))

Блин, два поста и ничего полезного. Из фидо уже 4 полезных совета пришло ....
жаль.

Всего записей: 273 | Зарегистр. 02-09-2004 | Отправлено: 18:28 23-11-2004
sket4



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
короче,
 
давай сюда то, что у тя в адресной строке передается методом гет, ибо у меня тоже на сайте бывали проблемы с этим, просто надо изначально определять что и откуда получать ГЕТом...

Всего записей: 712 | Зарегистр. 07-05-2004 | Отправлено: 21:16 24-11-2004
knyshow2

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
[b]sket4[/b] в строке передаются параметры 'ganre' и 'studio' причем они или не передаются вообще, или передается только один параметр. в первом посте я бросил кусок своего кода - там идет проверка переданы ли эти параметры и какой именно передан и в зависимости от результатов проверки формируется запрос (текст запроса) к базе.

Всего записей: 273 | Зарегистр. 02-09-2004 | Отправлено: 10:23 25-11-2004
UncoNNecteD



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

Цитата:
Да причем тут взломать-не взломать???


Цитата:
очень обрезанный код

Вот и получи очень обрезаный ответ.
 
Ограничивать то что выводится можно параметром SQL - LIMIT,  
например
SELECT * from table LIMIT 100,10  (10 записей начиная с 100)
Соответственно вводишь доп. параметр $page и константу $pagesize.
и делаешь примерно так -  
SELECT * from table WHERE .... LIMIT $pagesize*$page, $pagesize;

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 12:59 25-11-2004
knyshow2

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
UncoNNecteD,  
 
Ладно, а как передавать эту переменную наряду с остальными в ГЕТе? А контролировать первую-последнюю страницы?...
 
Кароче, ИМХО, я тут помощи не дождусь.
Всем огромное спасибо за "помощь", топик можно считать ЗАКРЫТЫМ!!!!
 
ЗЫ: sket4 стуканись в аську 913055, плиз.

Всего записей: 273 | Зарегистр. 02-09-2004 | Отправлено: 14:08 25-11-2004
KADABRA



Великий покусатель
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
knyshow2

Цитата:
 
Данный цикл поможет сделать разбитие на страницы, а именно нумеризацию (1 2 3 4...)
 
$num = 10;  // Число записей всего.
$perpage = 7; // Кол-во, показываемых записей на странице.
$pages_count = @ceil($num/$perpage);
$pages .= 'Страницы:';
 for($j=1;$j<=$pages_count;$j++)
{
 
          if ($_GET['page'] != $j)
          {
             $pages .= ' <a href="?page='.$j.'"><b>'.$j.'</b></a> ';
          }
          else
          {
             $pages .= ' <b>'.$j.'</b> ';
          }
}
echo $pages;
 


----------
Это не подпись.

Всего записей: 1718 | Зарегистр. 14-07-2003 | Отправлено: 16:04 25-11-2004
knyshow2

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
KADABRA
Да мне не на страницы разбить надо - у меня только две кнопки - ВПЕРЕД и НАЗАД

Всего записей: 273 | Зарегистр. 02-09-2004 | Отправлено: 16:30 25-11-2004
KADABRA



Великий покусатель
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
knyshow2

Цитата:
Да мне не на страницы разбить надо - у меня только две кнопки - ВПЕРЕД и НАЗАД
 


Код:
 
$count = xxx;   // Number of records. Get from DB
$start = intval($_GTE['start']);
if ($start < 0) $start = 0;
$pnumber = 10;//Rows per page
 
if ($start > 0)  print "<A href=index.php?start=".($start - $pnumber).">Предыдущие</A> ";
if ($count > $start + $pnumber)  print " <A href=index.php?start=".($start + $pnumber).">Следующие</A>\n";
 

Теперь при запроси используешь ... LIMIT $start * $pnumber, $pnumber

----------
Это не подпись.

Всего записей: 1718 | Зарегистр. 14-07-2003 | Отправлено: 16:40 25-11-2004 | Исправлено: KADABRA, 16:44 25-11-2004
knyshow2

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
а еще нужно помимо $start передавать еще и другие значения...
Посмотри первый пост и, если не трудно, прикрути все вышеописанное к тому коду.

Всего записей: 273 | Зарегистр. 02-09-2004 | Отправлено: 16:46 25-11-2004
KADABRA



Великий покусатель
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
$something =  $_GET['ganre'];  // Or what you want
$something_else = $_GET['studio']; // Or what you want
 
$count = xxx;   // Number of records. Get from DB
$start = intval($_GTE['start']);
if ($start < 0) $start = 0;
$pnumber = 10;//Rows per page
 
if ($start > 0)  print "<A href='index.php?start=" . ($start - $pnumber) . "&ganre=$something&studio=$something_else'>Предыдущие</A> ";
if ($count > $start + $pnumber)  print " <A href='index.php?start=".($start + $pnumber) . "&ganre=$something&studio=$something_else'>Следующие</A>\n";

----------
Это не подпись.

Всего записей: 1718 | Зарегистр. 14-07-2003 | Отправлено: 16:52 25-11-2004
knyshow2

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
KADABRA
спасибо, дальше уже сам подстрою.
 
ЗАКРЫТО

Всего записей: 273 | Зарегистр. 02-09-2004 | Отправлено: 17:24 25-11-2004
SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
$something =  mysql_escape_string($_GET['ganre']);  // Or what you want  
$something_else = mysql_escape_string($_GET['studio']); // Or what you want

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 18:23 25-11-2004
ViToTiV

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это всё понятно... но...
Как передавать параметры для запроса при клике на следующую страницу, если их очень много?
Например, это поиск по БД, где пользователь указывает много параметров (15), и нажимает кнопку поиска, ему вываливается результат, вот его надо разбить на страницы. Как проще опять передать все параметры для "where" что бы показать следующую страницу?

Всего записей: 69 | Зарегистр. 15-03-2007 | Отправлено: 15:38 08-05-2009
Cheery



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

Цитата:
Как передавать параметры для запроса при клике на следующую страницу, если их очень много?  

почитайте про сессии
www.phpfaq.ru/sessions

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:38 08-05-2009
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день.
 
Сделал пайджинг, причем раньше работал, а теперь показывает только первую страницу,а все остальные только пустые, только номер страниц выводит. Помогите, где грабли?
 

Код:
$result = mysql_query("SELECT * FROM `Reviews`");
$vsego_strok = mysql_num_rows($result);
 
$skolko_stranic = ceil($vsego_strok/10);
 
if(!isset($_GET['page'])) $page = 1;
if(isset($_GET['page'])) $page = $_GET['page'];
 
if(!ereg("(^[0-9]{1,2}$)",$page)) $page=1;
 
$result = mysql_query("SELECT * FROM `Reviews` LIMIT ".(($page-1)*10).",10" );
while($row = mysql_fetch_array($result))
{
    echo $row['name'].'<br>';
}
 
for($i=1; $i<=$skolko_stranic; $i++)
{
    if($i == $page)
    {
        echo $i.'&nbsp;&nbsp;';
    }
    else
    {
        echo "<a href=\"".$_SERVER['PHP_SELF']."?page=".$i."\">$i</a>&nbsp;&nbsp;";
    }
}
 

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 00:21 29-07-2009
Cheery



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

Цитата:
mysql_query("SELECT * FROM `Reviews` LIMIT ".(($page-1)*10).",10" ) or die(mysql_error());  

ну и выведите и посмотрите сам запрос

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:22 29-07-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 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