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]   

> Без описания
radieu
Отправлено: 21 Мая, 2011 - 16:17:40
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2011  


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




Сама навигация прекрасно работает, но мне нужно чтоб ы пользователь сам указывал какое кол-во сообщений он хочет видеть.

Вот форма для отправки кол-ва сообщений:

CODE (html):
скопировать код в буфер обмена
  1. <form name="" action="read.php" method="get">
  2. <input type = 'text' name = "col" value='5'>
  3. <p><input type="submit" name="col" value="Назначить">  </p>

Пытаюсь принять и записать в $pnumber с помощью GET, выводит ошибку.

PHP:
скопировать код в буфер обмена
  1. $n=mysql_query(" SELECT count(*) FROM book");
  2. $all=mysql_result($n,0,0);
  3. if ($all)
  4. {  
  5.     //записей на страницу
  6.     //$pnumber = 3;
  7.      $pnumber = $_GET['col']; //вот так пытаюсь сделать
  8.  
  9. //создаем объект
  10.     $n=new Navigator($all,$pnumber);
  11.  
  12. $result = mysql_query("SELECT * FROM book order by id desc LIMIT {$n->start()},$pnumber ");
  13.  
  14.  
  15. while($r = mysql_fetch_array($result)) {
  16.  
  17.  
  18.   echo "
  19. <p><TABLE BORDER WIDTH=600 align=center>
  20. <TR>
  21. <TD WIDTH=100>Почта: $r[email]</TD>
  22. <TD WIDTH=100>Имя $r[name]</TD>
  23. <TD WIDTH=400>Сообщение: $r[text]</p>
  24. </TD>
  25. </TR>
  26. </TABLE>";
  27.  
  28. }
  29.    //печатаем навигацию
  30.     echo $n->navi();
  31. }


Ошибка:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Warning: Division by zero in X:\home\localhost\www\lab2\Navigator.class.php on line 15
  2.  
  3. Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in X:\home\localhost\www\lab2\read.php on line 32


Файл навигатор класс:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class Navigator
  3. {
  4.         function __construct($all,$pnumber,$query='')
  5.         {
  6.                 $this->all=$all;
  7.                
  8.                 $this->pnumber=$pnumber;
  9.                 $this->query=$query;
  10.                 $this->page=isset($_GET['page']) ? (int)$_GET['page'] : 1;
  11.         }
  12.  
  13.         function start()
  14.         {
  15.                 $this->num_pages=ceil($this->all/$this->pnumber);
  16.                
  17.                 if (isset($_GET['last']))
  18.                 $this->page=$this->num_pages;
  19.                
  20.                 $this->start=$this->page*$this->pnumber-$this->pnumber;
  21.  
  22.                 if ($this->page > $this->num_pages || $this->page < 1)
  23.                 {
  24.                         $this->page=1;
  25.                         $this->start=0;
  26.                 }
  27.  
  28.                 return $this->start;
  29.         }
  30.  
  31.         function navi()
  32.         {
  33.                
  34.                 if ($this->num_pages<2)
  35.                 return '';             
  36.                
  37.                 $buff='<div class="navigator">';
  38.                
  39.     for($pr = '', $i =1; $i <= $this->num_pages; $i++)
  40.     {
  41.         $buff.=
  42.         $pr=(($i == 1 || $i == $this->num_pages || abs($i-$this->page) < 2) ? ($i == $this->page ? " [$i] " : ' <a href="'.$_SERVER['SCRIPT_NAME'].'?page='.$i.'&'.$this->query.'">'.$i.'</a> ') : (($pr == ' ... ' || $pr == '')? '' : ' ... '));
  43.     }
  44.                 return $buff.'</div>';
  45.         }
  46.  
  47. }

Явно что -то не то делаю, помогите пожалуйста.
 
 Top
ugin_root
Отправлено: 22 Мая, 2011 - 13:37:30
Post Id


Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011  
Откуда: Киргизия


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




radieu
php предупреждает что в 15 строке файла Navigator.class.php скрипт пытается разделить число на ноль! (в этом случае скорее всего на пустую строку)
CODE (htmlphp):
скопировать код в буфер обмена
  1. Warning: Division by zero in X:\home\localhost\www\lab2\Navigator.class.php on line 15

видимо $pnumber всётаки не равна трём. перед тем как создать экземпляр класса посмотри есть ли вообще в массиве $_GET значение, ключь которого рамвен 'col'


параметр name в инпуте типа submit не нужен, все параметры name, в пределах одной формы, доложны быть разными, а у вас два инпута с именем "col"

(Отредактировано автором: 22 Мая, 2011 - 13:38:29)

 
 Top
OrmaJever Модератор
Отправлено: 22 Мая, 2011 - 16:25:56
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




7 строка должна выглядеть так
PHP:
скопировать код в буфер обмена
  1. $pnumber = isset($_GET['col']) ? (int)$_GET['col'] : 1; //вот так пытаюсь сделать


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Dazar
Отправлено: 22 Мая, 2011 - 17:56:17
Post Id


Частый гость


Покинул форум
Сообщений всего: 139
Дата рег-ции: Янв. 2011  


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




Чёт за все те 3 месяца что я пользуюсь php так и не могу понять 3 код с 1 поста(Файл навигатор классУлыбка
Сам пользуюсь такой штукой:
PHP:
скопировать код в буфер обмена
  1. $per_page=$_GET['per_page'];
  2. $npage_echo=$_GET['npage'];
  3. if($per_page!=0 AND $per_page>0){}
  4. else{$per_page=25;}
  5. if($npage_echo!=0 AND $npage_echo>0){}
  6. else{$npage_echo=1;}
  7. $npage=$npage_echo-1;
  8. $begin=$npage*$per_page;
  9. mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");  
  10. $q="SELECT count(*) FROM $table WHERE ()";
  11. $resc=mysql_query($q);
  12. $rowc=mysql_fetch_row($resc);
  13. $total_rows=$rowc[0];
  14. $count_pages=ceil($total_rows/$per_page);
  15. echo "<form action='search.php'><b> Страницы: ";
  16. echo "<a href='search.php?npage=0&per_page=$per_page'>Первая</a> ";
  17. if($npage<6){$bnum=1;}
  18. else {
  19. $bnum=$npage-5;
  20. }
  21. $count_pages2=$count_pages-5;
  22. if($npage>=$count_pages2){$enum=$count_pages;}
  23. else{
  24. $enum=$npage+5;}
  25. for ($x=$bnum; $x<=$enum; $x++){
  26. echo "<a href='search.php?npage=$x&per_page=$per_page>$x</a> ";
  27. }
  28. echo "<a href='search.php?npage=$count_pages&per_page=$per_page'>Последняя($count_pages)</a> ";
  29. echo "</b><br>
  30. Перейти к <input type=text size='2' name='npage' value='$npage_echo'> странице <input type='submit' class='buttons' value='Перейти' /> <br>
  31. Обьявлений на странице:<input type=text name='per_page' value='$per_page' size='2'><input type='submit' class='buttons' value='Применить' />
  32. ";

По поводу моих китайских названий переменных:
per_page - постов на странице
npage_echo - номер страницы, который отображается пользователю. Так получилось в моём коде что нумерация начинается с нуля.
npage - номер страницы в коде. На 1 меньше отображаемого
bnum - от слов begin number - номер страницы с которой начинается вывод
enum - аналогично от end number
Если помог кому-то буду рад.

(Отредактировано автором: 22 Мая, 2011 - 18:01:28)

 
 Top
radieu
Отправлено: 22 Мая, 2011 - 18:11:56
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2011  


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




ugin_root Да спасибо, с этой ошибкой разобрался.
OrmaJever пишет:
7 строка должна выглядеть так
PHP:
скопировать код в буфер обмена
$pnumber = isset($_GET['col']) ? (int)$_GET['col'] : 1; //вот так пытаюсь сделать

Заработало, спасибо.

Все работает когда указываем значение, но при сдедующем переходе по навигации, количество отображаемых сообщений становится равным, в данном случае еденице. Как это исправить?
(Добавление)
Dazar пишет:
Чёт за все те 3 месяца что я пользуюсь php так и не могу понять 3 код с 1 поста(Файл навигатор класс

Тоже не понимаю, но он работает=)
 
 Top
ugin_root
Отправлено: 22 Мая, 2011 - 18:25:20
Post Id


Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011  
Откуда: Киргизия


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




radieu
к адрессу перехода на следующую страницу (да и вообще на любую страницу) нужно добавлять "&col=20". И распишите 42 строку хотябы на 15 строцек!
 
 Top
radieu
Отправлено: 22 Мая, 2011 - 19:04:19
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Май 2011  


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




ugin_root добавлять "&col=20" нужно чтобы при переходе значение в $pnumber сохранялось? Думаю нет. Как мне это реализовать?

Вот что у меня получилось:
index.php
CODE (html):
скопировать код в буфер обмена
  1. <form name="" action="index.php" method="get">
  2. <input type = 'text' name = "col" value="5">
  3. <p><input type="submit" name="ok" value="Назначить">  </p>
  4. </form>


read.php

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. require_once('Navigator.class.php');
  4.  
  5.  
  6. $n=mysql_query(" SELECT count(*) FROM book");
  7. $all=mysql_result($n,0,0);
  8. if ($all)
  9. {  
  10.     //записей на страницу
  11.      
  12.  /* if(!empty($_SESSION['col']) and !isset($_GET['ok']))
  13.     $pnumber = $_SESSION['col'];
  14. else {
  15.     $_SESSION['col'] = $_GET['col'];
  16.     $pnumber = $_GET['col'];
  17. }*/
  18.  
  19.  
  20.  
  21.  
  22. $pnumber = isset($_GET['col']) ? (int)$_GET['col'] : 5;
  23.  
  24.                                        
  25.    
  26.    
  27.     //создаем объект
  28.     $n=new Navigator($all,$pnumber);
  29.  
  30.  
  31.  
  32.         $result = mysql_query("SELECT * FROM book order by id desc LIMIT ".$n->start().",".$pnumber);
  33.  
  34.  
  35.  
  36.  
  37.  
  38. while($r = mysql_fetch_array($result)) {
  39.  
  40.  
  41.   echo "
  42. <p><TABLE BORDER WIDTH=600 align=center>
  43. <TR>
  44. <TD WIDTH=100>Почта: $r[email]</TD>
  45. <TD WIDTH=100>Имя $r[name]</TD>
  46. <TD WIDTH=400>Сообщение: $r[text]</p>
  47. </TD>
  48. </TR>
  49. </TABLE>";
  50.  
  51. }
  52.    //печатаем навигацию
  53.     echo $n->navi();
  54.  
  55.  
  56.  
  57.  
  58.         }
  59. ?>
 
 Top
OrmaJever Модератор
Отправлено: 22 Мая, 2011 - 19:22:47
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




radieu пишет:
ugin_root добавлять "&col=20" нужно чтобы при переходе значение в $pnumber сохранялось? Думаю нет. Как мне это реализовать?

PHP:
скопировать код в буфер обмена
  1. // есть сылка на следуйщую страницу примерно такого типа
  2. echo '<a href="file.php?col='.($pnumber+1).'">Next</a>'; // в сылке указываем текущую страницу +1

от переменой $pnumber и стоит отталкиваться, для преведущих делать -n для следуйщих +n

(Отредактировано автором: 22 Мая, 2011 - 19:23:17)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB