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. Anton63 - 21 Июля, 2009 - 08:07:37 - перейти к сообщению
Помогите...
Никак не могу понять в чём проблема...
Это скрипт по выводу 5 сообщений на каждую страницу из БД.
Ошибок никаких не выводит, а вывод всё равно не тот...
Вот листинг
PHP:
скопировать код в буфер обмена
  1.  
  2. $db=mysql_connect('localhost', 'root', '')  or die("Ошибка: ".mysql_error());
  3. mysql_select_db('top10', $db)  or die("Ошибка: ".mysql_error());
  4.  
  5. $max=5;
  6. $res=mysql_query("SELECT head FROM ansvers", $db)  or die("Ошибка: ".mysql_error());
  7. //Создаём массив элементов БД
  8. $row=mysql_fetch_array($res)  or die("Ошибка: ".mysql_error());
  9. //Получаем количество элементов в массиве
  10. $mass = mysql_num_rows($res)  or die("Ошибка: ".mysql_error());
  11. //Делим на количество отображаемых на странице изображений и округляем в большую сторону
  12. $pages = ceil($mass/$max);
  13. //Принимаем входящую переменную, которая указывает номер страницы
  14. $_p = $_GET['page'];
  15. //Создаем вспомогательные переменные для навигации, если переменная $_p не задана
  16. if(!$_p OR $_p ==''){
  17. //Нижний предел
  18. $nmin = 0;
  19. //Верхний предел
  20. $nmax=$max-1;
  21. echo 'Анкеты<BR>';
  22. for($i=$nmin;$i<=$nmax;$i++){ // Выводим head по 5 штук на странице
  23.     if($row[$i]){
  24. echo $row[$i]."<BR>";
  25. }
  26. }
  27. }
  28. else {//Переменная $_p создана
  29. $nmin = ($_p*$max)-$max ;
  30. $nmax=($max*$_p)-1;
  31. echo 'Анкеты<BR>';
  32. for($i=$nmin;$i<=$nmax;$i++){ // Выводим head по 5 штук на странице
  33.     if($row[$i]){
  34. echo $row[$i]."c<BR>";
  35. }
  36. }
  37. }
  38. //Выводим номера страниц
  39. echo "<br/><br/>";
  40. for($n=1;$n<=$pages;$n++) {
  41.  
  42. if($_p != $n) {echo '<a href="ansver.php?page='.$n.'">['.$n.']</a>&nbsp;';}
  43. if($_p == $n) {echo '['.$n.']&nbsp;';}
  44. }
  45.  


У меня выводятся номера страниц... а самих заголовков нет...
2. JustUserR - 21 Июля, 2009 - 13:37:45 - перейти к сообщению
Даже страшно читать код - почему бы для выбора пяти элементов не использовать конструкрцию LIMIT $P,5 где $P это номер страницы начиная с нуля
3. Anton63 - 22 Июля, 2009 - 08:18:04 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $max=5;
  3. $res=mysql_query("SELECT head FROM ansvers", $db)  or die("Ошибка: ".mysql_error());
  4. //Получаем количество элементов в массиве
  5. $mass = mysql_num_rows($res)  or die("Ошибка: ".mysql_error());
  6. //Делим на количество отображаемых на странице сообщений и округляем в большую сторону
  7. $pages = ceil($mass/$max);
  8. //Принимаем входящую переменную, которая указывает номер страницы
  9. $_p = $_GET['page'];
  10. //Создаем вспомогательные переменные для навигации, если переменная $_p не задана
  11. if(!$_p OR $_p ==''){
  12. //Нижний предел
  13. $nmin = 0;
  14. //Верхний предел
  15. $nmax=$max-1;
  16. echo 'Анкеты<BR>';
  17. $res=mysql_query("SELECT head FROM ansvers LIMIT $nmin, $nmax", $db)  or die("Ошибка: ".mysql_error());
  18. while ($row = mysql_fetch_assoc($res)) // Выводим head по 5 штук на странице
  19. {
  20.      echo $row['head']."<br/>";
  21. }
  22. }
  23. else {//Переменная $_p создана
  24. $nmin = ($_p*$max)-$max ;
  25. $nmax=($max*$_p)-1;
  26. echo 'Анкеты<BR>';
  27. $res=mysql_query("SELECT head FROM ansvers LIMIT $nmin, $nmax", $db)  or die("Ошибка: ".mysql_error());
  28. while ($row = mysql_fetch_assoc($res)) // Выводим head по 5 штук на странице
  29. {
  30.      echo $row['head']."<br/>";
  31. }
  32. }
  33. //Выводим номера страниц
  34. echo "<br/><br/>";
  35. for($n=1;$n<=$pages;$n++) {
  36.  
  37. if($_p != $n) {echo '<a href="ansver.php?page='.$n.'">['.$n.']</a>&nbsp;';}
  38. if($_p == $n) {echo '['.$n.']&nbsp;';}
  39. }
  40.  

Значит так???
Так конечно лучше... хоть что то выводит... всего у меня 3 страницы получается(14 анкет)... на первой выводятся 4 анкеты, на второй выводятся 11 анкет... и на третей странице 11 анкет... где то всё равно ошибка...
4. JustUserR - 22 Июля, 2009 - 14:02:01 - перейти к сообщению
Честно сказать ваш код запутан и ошибка появляются скорее всего изза "ошибки охранного поста" - когда значение на единицу больше или меньше чем надо
Вот что я вам посоветую (Как обычно поступают при постраничнй навигции)
1 Количество записей узнаем так SELECT COUNT(*) FROM ansvers и потом в mysql_result(0,0) лежит это количетсов записей - $all_pages
2 Вводим максимальное число записей на страницу - менье него может быть выведено толькл записи на последней из всех страниц - $max_entries
3 Вводим переменную-номер страницы НАЧИНАЯ С НУЛЯ (Когда выводим пользователю просто можем прибавить единицу чтобы было естественнее)
4 Запрос для каждой страницы - SELECT * FROM ansvers LIMIT $page*$max_entries, $page
5 Проверка на существование следующей страницы ($page+1)*$max_entries<$all_pages

 

Powered by ExBB FM 1.0 RC1