Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: постраничная навигация

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: больная тема) очень...
MadDen
Отправлено: 20 Января, 2010 - 17:27:26
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2007  
Откуда: Аглы


Помог: -3 раз(а)




Доброе время суток)
Проблема собственно с постраничной навигацией <будь она неладна>))
код:
определение страницы, запрос и т.д.
PHP:
скопировать код в буфер обмена
  1.  
  2. $num = 3; // колво объектов на страницу  
  3. $page = intval($_GET['page']);
  4. if ($page == '') {$page=1;}
  5. $result = mysql_query("SELECT COUNT(*) FROM `mess`");  
  6. $c_msg = mysql_result($result,0);  
  7. $total = intval(($c_msg - 1) / $num) + 1;  
  8. if(empty($page) or $page < 0) $page = 1;  
  9.   if($page > $total) $page = $total;  
  10. $start = $page * $num - $num;  
  11. $q = mysql_query("SELECT * FROM `mess` ORDER BY id DESC LIMIT $start, $num");  
  12. //$gb['answer'] = $answergb;
  13.  


вывод информации:
PHP:
скопировать код в буфер обмена
  1.  
  2. if ($c_msg==0)
  3. {
  4. echo "<div class='header'>Сообщений нет...</div>";
  5. }
  6. else
  7. {
  8.  
  9. while($gb = @mysql_fetch_array($q))
  10.  
  11.    {
  12.  
  13. echo "<div class='header'>имя: ".$gb['login']."<br/>
  14. сообщение: ".$gb['msg']."<br/>";
  15. echo "</div>\n";
  16.    }
  17. }
  18.  


ну собственно проблема:
PHP:
скопировать код в буфер обмена
  1.  
  2. if ($page != $total) $nextpage = ' | <a href="index-'. ($page + 1) .'.php">след»</a>';  
  3. if($page - 2 > 0) $page2left = ' <a href="index-'. ($page - 2) .'.php">'. ($page - 2) .'</a>';  
  4. if($page - 1 > 0) $page1left = ' | <a href="index-'. ($page - 1) .'.php">«пред</a> ';  
  5. if($page + 1 <= $total) $page1right = ' <a href="index-'. ($page + 1) .'.php">'. ($page + 1) .'</a>';
  6. if($total == "1")
  7. { $xxx = '<small>Стр. '.$page.$page1left.$nextpage.'</small>';  }
  8. else
  9. {$xxx = 'Стр. <a href="pages.php">'.$page.' из '.$total.'</a>'.$page1left.$nextpage.''; }
  10. echo $xxx;
  11.  


а заключается она в том, что требуется мне навигация в показе на странице допустим какая сейчас страница и нехт т.е. <1[2]3>
эту навигацию я скопировал с другой гостевой и мой мозг скоро сплавится от найденой информации в гугле и различных форумах если ещё буду пробовать другие варианты))
подскажите добрые люди я вообще не могу понять почему она не работает, ну нет у меня навыка PHP))


Отредактировано модератором: JustUserR, 21 Января, 2010 - 10:43:55


-----
Лучший способ убедиться, что меры предосторожности не понадобятся, это своевременно принять их.
 
 Top
MadDen
Отправлено: 21 Января, 2010 - 05:30:25
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2007  
Откуда: Аглы


Помог: -3 раз(а)




<Вот это да>


Отредактировано модератором: JustUserR, 21 Января, 2010 - 10:44:43
Давайте без эмоций Улыбка


-----
Лучший способ убедиться, что меры предосторожности не понадобятся, это своевременно принять их.
 
 Top
JustUserR
Отправлено: 21 Января, 2010 - 11:01:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




MadDen Попробуем решить проблему
Сначала чуть изменим код чтобы нумерация страниц шла с нулевой страницы
PHP:
скопировать код в буфер обмена
  1. $q = mysql_query("SELECT COUNT(*) FROM `mess`");  
  2. $c_msg = mysql_result($q,0,0);  
  3. $total = intval(($c_msg - 1) / $num) + 1;  
  4. if(empty($page) or $page < 0) $page = 0;  
  5. if($page>($total-1)) $page = $total-1;  
  6. $start=$page * $num;  
  7. $q = mysql_query("SELECT * FROM `mess` ORDER BY id DESC LIMIT $start, $num");

И теперь наносим прямое поражение проблеме Улыбка
PHP:
скопировать код в буфер обмена
  1. if($total<2) {echo "Страница 1 из 1";}
  2. else {if($page!=0) {echo "<a href=\"self.php?page=".0."\">На начало</a>";} else {}
  3. if($page>2) {echo "<a href=\"self.php?page=".($page-2)."\">".($page-1)."</a>";} else {}
  4. if($page>1) {echo "<a href=\"self.php?page=".($page-1)."\">".($page)."</a>";} else {}
  5. echo "[".($page+1)."]";
  6. if($page+1<($total-1)) {echo "<a href=\"self.php?page=".($page+1)."\">".($page+2)."</a>";} else {}
  7. if($page+2<($total-1)) {echo "<a href=\"self.php?page=".($page+2)."\">".($page+3)."</a>";} else {}
  8. if($page!=($total-1)) {echo "<a href=\"self.php?page=".($total)."\">На конец</a>";} else {}
  9. echo "Страница ".($page+1)." из".$total." страниц";
  10. }

Вроде бы должно получиться как надо


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
MadDen
Отправлено: 21 Января, 2010 - 12:49:52
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2007  
Откуда: Аглы


Помог: -3 раз(а)




спасибо)
оказалось что строка
PHP:
скопировать код в буфер обмена
  1.  
  2. else {if($page!=0) {echo "<a href=\"self.php?page=".0."\">На начало</a>";} else {}
  3.  

выдаёт ошибку)
пришлост заменить " на ' образом '.0.' в целом работает)
(Добавление)
Ага) не тут то было) оказывается последнии три записи таинственным образом не выводятся и как я подразумеваю из-за '.0.' )
PHP:
скопировать код в буфер обмена
  1.  
  2. else {if($page!=0) {echo "<a href=\"self.php?page=".0."\">На начало</a>";} else {}
  3.  

собственно проблема то не решена) буду думать...
(Добавление)
маленько поразмыслев я пришел к такому решению):
PHP:
скопировать код в буфер обмена
  1.  
  2. $num = 2; // колво объектов на страницу  
  3. $page = intval($_GET['page']);
  4. if ($page == '') {$page=1;}
  5. $q = mysql_query("SELECT COUNT(*) FROM `mess`");  
  6. $c_msg = mysql_result($q,0,0);  
  7. $total = intval(($c_msg - 1) / $num) + 1;  
  8. if(empty($page) or $page < 0) $page = 0;  
  9. if($page>($total-1)) $page = $total-1;  
  10. $start=$page * $num;  
  11. $q = mysql_query("SELECT * FROM `mess` ORDER BY id DESC LIMIT $start, $num");
  12.  

на второй строке мне что-то не понравилась функция intval, оказывается когда его убираешь всё прекрасно работает)

вот что я нашел про неё:
Функция intval — преобразует переменную к целому типу
один фиг не понятно зачем она))


-----
Лучший способ убедиться, что меры предосторожности не понадобятся, это своевременно принять их.
 
 Top
JustUserR
Отправлено: 21 Января, 2010 - 14:24:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




MadDen пишет:
на второй строке мне что-то не понравилась функция intval, оказывается когда его убираешь всё прекрасно работает)
Она у вас уже была поэтому я не стал ее трогать - но действительно лучше просто заменить на преобразование в тип int напрямую
Что касается нуля то его можно вообще вовнуть кавычек спрятать и не разрывать стороку Но в общем хорошо что все заработало Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
MadDen
Отправлено: 21 Января, 2010 - 15:43:10
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2007  
Откуда: Аглы


Помог: -3 раз(а)




ну суть то в том что когда заходишь на эту страницу то он автоматом выдает 2ую) а не первую) где последние записи) как вот блин сделать что первая стр. грузилась


-----
Лучший способ убедиться, что меры предосторожности не понадобятся, это своевременно принять их.
 
 Top
JustUserR
Отправлено: 21 Января, 2010 - 17:56:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




MadDen Просто замените if ($page == '') {$page=1;} на if ($page == '') {$page=0;} и будет вам счастье Подмигивание


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
MadDen
Отправлено: 21 Января, 2010 - 19:38:56
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2007  
Откуда: Аглы


Помог: -3 раз(а)




Цитата:
JustUserR
огромное спасибо
и вправду счастье заработало)
когда у меня такой будет великий мозг пхп?!))) ещё раз спасибо)


-----
Лучший способ убедиться, что меры предосторожности не понадобятся, это своевременно принять их.
 
 Top
JustUserR
Отправлено: 23 Января, 2010 - 17:21:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




MadDen пишет:
Когда у меня такой будет великий мозг пхп?!))) Ещё раз спасибо)
Пожалуйста! А опыт приходит со временем Улыбка
К слову советую вам в будущих работах использовать всюду нумерацию с нуля посколько она является естественной для компьютера (И массивы и индексы нумеруются с нуля) а уж если хотите чтобы пользователя получал информацию пронумерованную с единицы (Как номер страницы например) то просто при выводе прибавляйте единицу Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB