За последние 24 часа нас посетили 30582 программиста и 1800 роботов. Сейчас ищет 801 программист ...

Вывод из базы постранично

Тема в разделе "MySQL", создана пользователем amen, 9 окт 2009.

  1. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Помогите разобраться с разбивкой.
    Есть простенькая форма (имя, сообщение), на той же странице - вывод сообщений:

    PHP:
    1. <?php
    2. include "config.php";
    3. ?>
    4. <form action=add.php method=POST>
    5. ИМЯ................: <input type=text name="name"> <br>
    6. СООБЩЕНИЕ:           <textarea type=text name="msg"></textarea><br>
    7.                      <input type=submit value="отправить">
    8.                      <input type=hidden value="add">
    9. </form>
    10. <hr>
    11.  
    12.  
    13. <?
    14. $per_page=3;
    15. $query="SELECT * FROM miproject ORDER BY id DESC LIMIT 0,$per_page";
    16. $res=mysql_query($query);
    17. $row=mysql_fetch_array($res);
    18. $total_rows=$row['0'];
    19. $num_pages=ceil($total_rows/$per_page);
    20. while ($row=mysql_fetch_array($res))
    21. {
    22.  
    23. echo "<b>Имя:</b>"; echo $row['name'];
    24. echo "<br>";
    25. echo "<b>Сообщение:</b>"; echo $row['msg'];
    26. echo "<br><hr>";
    27. }
    28. for($i=1;$i<=$num_pages; $i++)
    29. {
    30.  echo '<a href="'.$_SERVER['PHP_SELF'].'?num='.$i*$per_page.'">'.$i."</a>\n";
    31. }  
    32.  
    33. ?>
    34.  

    Нужно, чтобы выводилось три сообщения и номера страничек внизу.
    Данный скрипт выводит 2 сообщения и тучу ссылок страниц, которые не работают.

    P.S. Пример взял с PHPFAQ
     
  2. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Сколько всего записей в БД?
    Какой id у последней записи?
     
  3. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Volt(220), первое сделал вроде, а про ID последней записи даже не думал. Разве это обязательно?

    Вот подправленный вариант:

    PHP:
    1. $per_page = 3;
    2.  
    3. $query = "SELECT * FROM miproject";
    4. $res = mysql_query($query);
    5. $total_rows = mysql_num_rows($res);
    6.  
    7. $num_pages = ceil($total_rows/$per_page);
    8. if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
    9.  
    10. $q = "SELECT * FROM miproject ORDER BY DESC LIMIT ($page-1)*$per_page, $per_page";
    11. $r = mysql_query($q);
    12. while($row =mysql_fetch_array($r))
    13. {
    14.  echo "<b>Имя:</b>"; echo $row['name'];
    15.  echo "<br>";
    16.  echo "<b>Сообщение:</b>"; echo $row['msg'];
    17.  echo "<br><hr>";
    18. }
    19.  
    20. for($i=1;$i<=$num_pages; $i++)
    21. {
    22.  echo '<a href="'.$_SERVER['PHP_SELF'].'?num='.$i*$per_page.'">'.$i."</a>\n";
    23. }
    PHP:
    1.  
     
  4. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Про id последней записи я спрашивал, потому что оно бралось за значение total_rows.
     
  5. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Но всё равно не работает.
     
  6. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Помогли добрые люди.
    Осталось вот что:
    выводтся ошибка Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

    Вот код:
    $q = "SELECT * FROM miproject ORDER BY DESC LIMIT ($page-1)*$per_page, $per_page*$page";
    $r = mysql_query($q);
    while($row=mysql_fetch_array($r))
     
  7. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Похоже, запрос возвращает ошибку вместо результата
     
  8. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    На всякий случай напомню, что переменные в "" кавычках подставляются, но выражения не вычисляются.
     
  9. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Ставлю вместо ($page-1)*$per_page, $per_page*$page - 0,3 - результат тот же!
    Подскажите в чём ошибка. Всю голову себе сломал - не понимаю в чём дело. Всё вроде правильно составлено.
     
  10. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    С выводом я разобрался.
    Только ссылки опять не работают.


    PHP:
    1. $q="SELECT * FROM miproject ORDER BY id DESC LIMIT ".($page - 1)*$per_page.",".$per_page.".";
    2. $r=mysql_query($q);
    3. while ($row=mysql_fetch_array($r))
    4. {
    5.  
    6. echo "<b>Имя:</b>"; echo $row['name'];
    7. echo "<br>";
    8. echo "<b>Сообщение:</b>"; echo $row['msg'];
    9. echo "<br><hr>";
    10. }  
    11.  
    12. for($i=1;$i<=$num_pages; $i++)
    13. {
    14.  echo '<a href="'.$_SERVER['PHP_SELF'].'?num='.$i*$per_page.'">'.$i."</a>\n";
    15. }
    В адресной строке значение num меняется, но отображаются всё те же 3 первых сообщения.
     
  11. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Покажи сформированный SQL запрос для разных значений num.

    PHP:
    1. <?php
    2. ?>
    в скрипте.