За последние 24 часа нас посетили 16395 программистов и 1556 роботов. Сейчас ищут 1612 программистов ...

Постраничный вывод из базы

Тема в разделе "PHP и базы данных", создана пользователем LoaD, 17 июн 2008.

  1. LoaD

    LoaD Активный пользователь

    С нами с:
    17 июн 2008
    Сообщения:
    5
    Симпатии:
    0
    Здравствуйте! У меня возник вопрос по поводу постраничного вывода информации из базы данных! Я новичек в этом деле, поэтому прошу помощи у вас. Я нарыл вот такой скрипт:
    PHP:
    1.  
    2. <?php
    3. function link_bar($page, $pages_count)
    4. {
    5. for ($j = 1; $j <= $pages_count; $j++)
    6. {
    7. // Вывод ссылки
    8. if ($j == $page) {
    9. echo ' <a style="color: #808000;" ><b>'.$j.'</b></a> ';
    10. } else {
    11. echo ' <a style="color: #808000;" href='.$_server['php_self'].'?page='.$j.'>'.$j.'</a> ';
    12. }
    13. // Выводим разделитель после ссылки, кроме последней
    14. // например, вставить "|" между ссылками
    15. if ($j != $pages_count) echo '|';
    16. }
    17. return true;
    18. } // Конец функции
    19.  
    20. // Подключение к базе данных
    21. mysql_connect('localhost', 'root', 'pass') or die('error! Нет соединения с сервером mysql!');
    22. mysql_select_db('libr') or die('error! Нет соединения с базой данных!');
    23.  
    24. // Подготовка к постраничному выводу
    25. $perpage = 3; // Количество отображаемых данных из БД
    26.  
    27. if (empty($_get['page']) || ($_get['page'] <= 0)) {
    28. $page = 1;
    29. } else {
    30. $page = (int) $_get['page']; // Считывание текущей страницы
    31. }
    32. // Общее количество информации
    33. $count = mysql_numrows(mysql_query('select * from magaz')) or die('error! Записей не найдено!');
    34. $pages_count = ceil($count / $perpage); // Количество страниц
    35.  
    36. // Если номер страницы оказался больше количества страниц
    37. if ($page > $pages_count) $page = $pages_count;
    38. $start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД
    39.  
    40. // Вызов функции, для вывода ссылок на экран
    41. link_bar($page, $pages_count);
    42.  
    43. // Вывод информации из базы данных
    44. echo '<p><b>Постраничный вывод информации</b></p>';
    45. $result = mysql_query('select * from magaz limit '.$start_pos.', '.$perpage) or die('error!');
    46. while ($row = mysql_fetch_array($result)) {
    47. echo '<p>'.$row['Nazvanie'].'</p>';
    48. }
    49. ?>
    50.  
    Проблема состоит в том, что не переходит на следующие страницы... Так все время и выводит только первые три записи.
    Помогите пожалуйста, что здесь не так?
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. $_GET
     
  3. LoaD

    LoaD Активный пользователь

    С нами с:
    17 июн 2008
    Сообщения:
    5
    Симпатии:
    0
    Огромное спасибо=) Проблема решена)
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Девид Блейн, нет! Ты скукожил массив! Раскукожь его обратно!
     
  5. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Фак мой мозг.
     
  6. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    ха-ха-ха я обассалса оранж-содой
     
  7. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    в рот мне ноги
     
  8. LoaD

    LoaD Активный пользователь

    С нами с:
    17 июн 2008
    Сообщения:
    5
    Симпатии:
    0
    Как не странно, но все работает отлично))
     
  9. bishopik

    bishopik Активный пользователь

    С нами с:
    27 окт 2008
    Сообщения:
    11
    Симпатии:
    0
    Скрипт очень пригодился! выводит с MySQL все замечательно но есть одно "НО"
    -при выводе результата при условии $perpage = 4; // Количество отображаемых данных из БД

    моя таблица

    echo '<table border=\"1\" class=table cellspacing=\"1\" cellpadding=\"0\">
    <tr align=center bgcolor="#CCCCCC">
    <td width=40 height=66>#</td>
    <td width=178>Наименовании организации-претендента</td>
    <td width=121>Юридический адрес</td>
    <td width=105>Почтовый адрес</td>
    <td width=96>Должность руководителя</td>
    <td width=123>ФИО руководителя</td>
    <td width=107>Рабочий телефон</td>
    <td width=112>Мобильный телефон</td>
    <td width=118>Телефон факс</td>
    <td width=150>Адрес сайта</td>
    <td width=150>E-mail</td>
    <td width=150>Виды работ</td>
    <td width=150>Категория</td>
    </tr>';

    это заголовок моей таблицы он считает ее за 1 строку! ТО ЕСТЬ результата 1го не хватает! на каждой странице! КАК РЕШИТЬ ПРОБЛЕМУ ЭТУ!
     
  10. bishopik

    bishopik Активный пользователь

    С нами с:
    27 окт 2008
    Сообщения:
    11
    Симпатии:
    0
    в общем при выводе результата скрипт прячет 1ну строку на каждой странице с mysql
     
  11. Mete0

    Mete0 Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
    Что-то я не понимаю причём тут эта таблица.
     
  12. bishopik

    bishopik Активный пользователь

    С нами с:
    27 окт 2008
    Сообщения:
    11
    Симпатии:
    0
    то я поспешил! она не причем!!!!!!!!! А ТЕРЯЕТЬСЯ одна строка при вывде результата на каждой странице
     
  13. bishopik

    bishopik Активный пользователь

    С нами с:
    27 окт 2008
    Сообщения:
    11
    Симпатии:
    0
    у меня в БД 8 строк! $perpage = 4; // Количество отображаемых данных из БД вывожу по 4 строки!
    а показывает 3 строки на каждой странице!
     
  14. Mete0

    Mete0 Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
    bishopik
    Ужас. Сегодня у меня телепатические способности плохо работают, покажи php код.
     
  15. bishopik

    bishopik Активный пользователь

    С нами с:
    27 окт 2008
    Сообщения:
    11
    Симпатии:
    0
    PHP:
    1. <?php
    2.  
    3.   function link_bar($page, $pages_count)
    4.  {
    5.  for ($j = 1; $j <= $pages_count; $j++)
    6.  {
    7.  // Вывод ссылки  
    8.  if ($j == $page) {
    9.  
    10.  echo ' <a style="color: red;" ><b>'.$j.'</b></a> ';
    11.  }
    12. else {
    13.  echo ' <a style="color: darkgreen;" href='.$_SERVER['PHP_SELF'].'?page='.$j.'>'.$j.'</a> ';
    14.  }
    15.  // Выводим разделитель после ссылки, кроме последней
    16.  // например, вставить "|" между ссылками
    17.  if ($j != $pages_count) echo '|';
    18.  }
    19.  return true;
    20.  } // Конец функции
    21.  // Подключение к базе данных
    22.  mysql_connect('localhost', 'root', '') or die('error! Нет соединения с сервером mysql!');
    23.  mysql_select_db('anketa') or die('error! Нет соединения с базой данных!');
    24.  
    25.  // Подготовка к постраничному выводу
    26.  $perpage = 4; // Количество отображаемых данных из БД
    27.  
    28.  if (empty($_GET['page']) || ($_GET['page'] <= 0)) {
    29.  $page = 1;
    30.  } else {
    31.  $page = (int) $_GET['page']; // Считывание текущей страницы
    32.  }
    33.  // Общее количество информации
    34.  $count = mysql_numrows(mysql_query('select * from anketa')) or die('error! Записей не найдено!');
    35.  $pages_count = ceil($count / $perpage); // Количество страниц
    36.  
    37.  // Если номер страницы оказался больше количества страниц
    38.  if ($page > $pages_count) $page = $pages_count;
    39.  $start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД
    40.  
    41.  // Вызов функции, для вывода ссылок на экран
    42.  link_bar($page, $pages_count);
    43.  
    44.  
    45.  // Вывод информации из базы данных
    46.  $result = mysql_query('select * from anketa limit '.$start_pos.', '.$perpage) or die('error!');
    47.  while ($row = mysql_fetch_array($result)) {
    48.  
    49. while(list($id, $company, $adress, $mail_adress, $name_dir, $fio_dir, $tel_dir, $mob_dir, $fax_dir, $www_adress, $email_dir, $about, $category) = mysql_fetch_row($result)) {
    50.  
    51. echo "
    52. <tr align=center>
    53. <td>$name_dir</td>
    54. <td>$id</td>
    55. <td>$company</td>
    56. <td>$adress</td>
    57. <td>$mail_adress</td>
    58. <td>$fio_dir</td>
    59. <td>$tel_dir</td>
    60. <td>$mob_dir</td>
    61. <td>$fax_dir</td>
    62. <td>$www_adress</td>
    63. <td>$email_dir</td>
    64. <td>$category</td>
    65. <td>$about</td>
    66. </tr>\n";
    67.  
    68.  
    69.  
    70.  
    71.  }
    72. print "</table>\n";
    73. print " Колличество записей : <b>$count</b>\n";
    74. }
    75.  
    76.  
    77. ?>
     
  16. bishopik

    bishopik Активный пользователь

    С нами с:
    27 окт 2008
    Сообщения:
    11
    Симпатии:
    0
    я думаю что из-за этого условия
    PHP:
    1. while(list($id, $company, $adress, $mail_adress, $name_dir, $fio_dir, $tel_dir, $mob_dir, $fax_dir, $www_adress, $email_dir, $about, $category) = mysql_fetch_row($result)) {
     
  17. Mete0

    Mete0 Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
    Может стоит думать немного, хоть чуть-чуть?

    Посмотри внимательно, подумай, и скажи.

    PHP:
    1. <?php
    2. $result = mysql_query('select * from anketa limit '.$start_pos.', '.$perpage) or die('error!');
    3. while ($row = mysql_fetch_array($result)) {  
    4.   while(list($id, $company, $adress, $mail_adress, $name_dir, $fio_dir, $tel_dir, $mob_dir, $fax_dir, $www_adress, $email_dir, $about, $category) = mysql_fetch_row($result)) {
    5. ?>
    Что тут лишнее?
     
  18. Mete0

    Mete0 Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
    Это цикл.
     
  19. bishopik

    bishopik Активный пользователь

    С нами с:
    27 окт 2008
    Сообщения:
    11
    Симпатии:
    0
    извини дружище сам себя запутал вот оно что из-за

    PHP:
    1.  
    2. while(list($id, $company, $adress, $mail_adress, $name_dir, $fio_dir, $tel_dir, $mob_dir, $fax_dir, $www_adress, $email_dir, $about, $category) = mysql_fetch_row($result)) {
    3.  
    и
    PHP:
    1.  
    2. echo "
    3. <tr align=center>
    4. <td>".$row['4']."</td>
    5. <td>".$row['0']."</td>
    6. <td>".$row['1']."</td>
    7. <td>".$row['2']."</td>
    8. <td>".$row['3']."</td>
    9. <td>".$row['5']."</td>
    10. <td>".$row['6']."</td>
    11. <td>".$row['7']."</td>
    12. <td>".$row['8']."</td>
    13. <td>".$row['9']."</td>
    14. <td>".$row['10']."</td>
    15. <td>".$row['12']."</td>
    16. <td>".$row['11']."</td>
    17. </tr>\n";
     
  20. Mete0

    Mete0 Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina