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
Форумы портала PHP.SU :: Версия для печати :: постраничная навигация
Форумы портала PHP.SU » PHP » Программирование на PHP » постраничная навигация

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

1. MadDen - 20 Января, 2010 - 17:27:26 - перейти к сообщению
Доброе время суток)
Проблема собственно с постраничной навигацией <будь она неладна>))
код:
определение страницы, запрос и т.д.
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))
2. MadDen - 21 Января, 2010 - 05:30:25 - перейти к сообщению
<Вот это да>
3. JustUserR - 21 Января, 2010 - 11:01:07 - перейти к сообщению
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. }

Вроде бы должно получиться как надо
4. MadDen - 21 Января, 2010 - 12:49:52 - перейти к сообщению
спасибо)
оказалось что строка
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 — преобразует переменную к целому типу
один фиг не понятно зачем она))
5. JustUserR - 21 Января, 2010 - 14:24:40 - перейти к сообщению
MadDen пишет:
на второй строке мне что-то не понравилась функция intval, оказывается когда его убираешь всё прекрасно работает)
Она у вас уже была поэтому я не стал ее трогать - но действительно лучше просто заменить на преобразование в тип int напрямую
Что касается нуля то его можно вообще вовнуть кавычек спрятать и не разрывать стороку Но в общем хорошо что все заработало Улыбка
6. MadDen - 21 Января, 2010 - 15:43:10 - перейти к сообщению
ну суть то в том что когда заходишь на эту страницу то он автоматом выдает 2ую) а не первую) где последние записи) как вот блин сделать что первая стр. грузилась
7. JustUserR - 21 Января, 2010 - 17:56:21 - перейти к сообщению
MadDen Просто замените if ($page == '') {$page=1;} на if ($page == '') {$page=0;} и будет вам счастье Подмигивание
8. MadDen - 21 Января, 2010 - 19:38:56 - перейти к сообщению
Цитата:
JustUserR
огромное спасибо
и вправду счастье заработало)
когда у меня такой будет великий мозг пхп?!))) ещё раз спасибо)
9. JustUserR - 23 Января, 2010 - 17:21:54 - перейти к сообщению
MadDen пишет:
Когда у меня такой будет великий мозг пхп?!))) Ещё раз спасибо)
Пожалуйста! А опыт приходит со временем Улыбка
К слову советую вам в будущих работах использовать всюду нумерацию с нуля посколько она является естественной для компьютера (И массивы и индексы нумеруются с нуля) а уж если хотите чтобы пользователя получал информацию пронумерованную с единицы (Как номер страницы например) то просто при выводе прибавляйте единицу Улыбка

 

Powered by ExBB FM 1.0 RC1