За последние 24 часа нас посетили 87493 программиста и 4641 робот. Сейчас ищут 2022 программиста ...

Некорректно работает постраничный вывод материалов

Тема в разделе "PHP для новичков", создана пользователем fanat, 13 май 2016.

  1. fanat

    fanat Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    35
    Симпатии:
    0
    Здравствуйте. Появилась необходимость сделать постраничный вывод материалов на сайте.
    Изначально материалы сайта, без обращения к БД, имели такую структуру:
    HTML:
    1.  
    2. <div id="page">
    3.     <div id="page-bgtop">
    4.         <div id="content">
    5.             <div class="post">
    6.                 <p class="meta"><span class="date">Sunday, April 26, 2009</span> 7:27 AM Posted by <a href="#">Someone</a></p>
    7.                 <h2 class="title"><a href="#">Welcome to Predilection </a></h2>
    8.                 <div class="entry">
    9.                     <p>This is <strong>Predilection </strong>, a free, fully standards-compliant CSS template designed by <a href="http://www.freecsstemplates.org/">Free CSS Templates</a>, released for free under the <a href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5</a> license.  You're free to use this template for anything as long as you link back to <a href="http://www.freecsstemplates.org/">my site</a>. Enjoy :)</p>
    10.                     <p>Sed lacus. Donec lectus. Nullam pretium nibh ut turpis. Nam bibendum. In nulla tortor, elementum ipsum. Proin imperdiet est. Phasellus dapibus semper urna. Pellentesque ornare, orci in felis. </p>
    11.                 </div>
    12.             </div>
    13.             <div class="post">
    14.                 <p class="meta"><span class="date">Sunday, April 26, 2009</span> 7:27 AM Posted by <a href="#">Someone</a></p>
    15.                 <h2 class="title"><a href="#">Welcome to Predilection </a></h2>
    16.                 <div class="entry">
    17.                     <p>This is <strong>Predilection </strong>, a free, fully standards-compliant CSS template designed by <a href="http://www.freecsstemplates.org/">Free CSS Templates</a>, released for free under the <a href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5</a> license.  You're free to use this template for anything as long as you link back to <a href="http://www.freecsstemplates.org/">my site</a>. Enjoy :)</p>
    18.                     <p>Sed lacus. Donec lectus. Nullam pretium nibh ut turpis. Nam bibendum. In nulla tortor, elementum ipsum. Proin imperdiet est. Phasellus dapibus semper urna. Pellentesque ornare, orci in felis. </p>
    19.                 </div>
    20.             </div>
    21.             <div class="post">
    22.                 <p class="meta"><span class="date">Sunday, April 26, 2009</span> 7:27 AM Posted by <a href="#">Someone</a></p>
    23.                 <h2 class="title"><a href="#">Welcome to Predilection </a></h2>
    24.                 <div class="entry">
    25.                     <p>This is <strong>Predilection </strong>, a free, fully standards-compliant CSS template designed by <a href="http://www.freecsstemplates.org/">Free CSS Templates</a>, released for free under the <a href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5</a> license.  You're free to use this template for anything as long as you link back to <a href="http://www.freecsstemplates.org/">my site</a>. Enjoy :)</p>
    26.                     <p>Sed lacus. Donec lectus. Nullam pretium nibh ut turpis. Nam bibendum. In nulla tortor, elementum ipsum. Proin imperdiet est. Phasellus dapibus semper urna. Pellentesque ornare, orci in felis. </p>
    27.                 </div>
    28.             </div>
    29.             <div class="post">
    30.                 <p class="meta"><span class="date">Sunday, April 26, 2009</span> 7:27 AM Posted by <a href="#">Someone</a></p>
    31.                 <h2 class="title"><a href="#">Lorem ipsum sed aliquam</a></h2>
    32.                 <div class="entry">
    33.                     <p>Sed lacus. Donec lectus. Nullam pretium nibh ut turpis. Nam bibendum. In nulla tortor, elementum vel, tempor at, varius non, purus. Mauris vitae nisl nec   consectetuer. Donec ipsum. Proin imperdiet est. Phasellus <a href="#">dapibus semper urna</a>. Pellentesque ornare, orci in consectetuer hendrerit, urna elit eleifend nunc, ut consectetuer nisl felis ac diam. Etiam non felis. Donec ut ante. In id eros.</p>
    34.                 </div>
    35.             </div>
    36.             <div class="post">
    37.                 <p class="meta"><span class="date">Sunday, April 26, 2009</span> 7:27 AM Posted by <a href="#">Someone</a></p>
    38.                 <h2 class="title"><a href="#">Lorem ipsum sed aliquam</a></h2>
    39.                 <div class="entry">
    40.                     <p>Mauris vitae nisl nec metus placerat consectetuer. Donec ipsum. Proin imperdiet est. Sed lacus. Donec lectus. Nullam pretium nibh ut turpis. Nam bibendum. In nulla tortor, elementum vel, tempor at, varius non, purus. Mauris vitae nisl nec metus placerat consectetuer. Donec ipsum. Proin imperdiet est. Phasellus <a href="#">dapibus semper urna</a>. Pellentesque ornare, orci in consectetuer hendrerit, urna elit eleifend nunc, ut consectetuer nisl felis ac diam. </p>
    41.         </div>
    42.     </div>
    43. </div>
    44.  
    Я, используя пример, написал вот такой вот постраничный вывод с обращением к БД:
    PHP:
    1. <?php
    2.  
    3. // Данные для mysql сервера
    4.     $dbhost = "localhost"; // Хост
    5.     $dbuser = "root"; // Имя пользователя
    6.     $dbname = "copyright"; // Имя базы данных
    7.  
    8.     // Подключаемся к mysql серверу
    9.     $link = mysql_connect($dbhost, $dbuser);
    10.  
    11.     //Указываем кодировку для подключения к базе
    12.     mysql_set_charset("utf8");
    13.     // Выбираем нашу базу данных
    14.  
    15.     mysql_select_db($dbname, $link);
    16.  
    17.     //Количество записей на странице
    18.     $quantity=5;
    19.  
    20.     //Количество ссылок перед текущей и после текущей страницы
    21.     $limit=3;
    22.     $page = 0;
    23.     if(!is_numeric($page)) $page=1;
    24.     if ($page<1) $page=1;
    25.     $result2 = mysql_query("SELECT * FROM article;");
    26.     $num = mysql_num_rows($result2);
    27.  
    28.     $pages = $num/$quantity;
    29.     $pages = ceil($pages);
    30.     $pages++;
    31.  
    32.     if ($page>$pages) $page = 1;
    33.     //echo '<strong style="color: #df0000">Страница № ' . $page .
    34.     //'</strong><br /><br />';
    35.     if (!isset($list)) $list=0;
    36.     $list=--$page*$quantity;
    37.  
    38.     $result = mysql_query("SELECT * FROM article LIMIT $quantity OFFSET $list;");
    39.         $num_result = mysql_num_rows($result);
    40.  
    41.     echo"<div id='page'>
    42.            <div id='page-bgtop'>  
    43.                <div id='content'>";
    44.  
    45.     for ($i = 0; $i<$num_result; $i++) {
    46.     $row = mysql_fetch_array($result);
    47.      
    48.                     echo"<div class='post'>
    49.                                <p class='meta'>
    50.                                    <span class='date'>
    51.                                        Добавлено: ".$row["date"].
    52.                                     "</span>
    53.                                    <a href='#'>
    54.                                        Пользователем:".$row["avtor"].
    55.                                     "</a>
    56.                                </p>
    57.                              
    58.                                <h2 class='title'>
    59.                                    <a href='#'>".$row["title"]." </a>
    60.                                </h2>
    61.                              
    62.                                <div class='entry'>".
    63.                                     $row["text"].
    64.                                 "</div>
    65.                        </div>
    66.                    ";}
    67.     echo "        </div>
    68.            </div>
    69.        </div>";
    70. ?>
    Данные он выводит, только после этого слетел дизайн сайта, а я собственноручно никак не могу найти ошибку.
     
  2. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.294
    Симпатии:
    216
    Адрес:
    Default city
    PHP:
    1. $result2 = mysql_query("SELECT * FROM article;");
    2. $num = mysql_num_rows($result2);
    3. // Преващаются в
    4. $result2 = mysql_query("SELECT COUNT(*) FROM article;");
    5. $num = mysql_fetch_array($result2)[0];
    6. // И больше мы не выгружаем данные и заботливо считаем на стороне mysql
    --- Добавлено ---
    Зачем for если можно обойтись while ?
    И конечно же устаревшее расширение mysql.
    Используйте PDO или в крайнем случае mysqli.
     
  3. fanat

    fanat Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    35
    Симпатии:
    0
    А разница между for и while? Результат получается тот же, вроде.
    Про уход от mysql знаю, но пока я и в этом почти полный ноль, поэтому решил попрактиковаться на том, что проще.
     
  4. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.294
    Симпатии:
    216
    Адрес:
    Default city
    Вообще люди используют дрель с режимом перфоратора, чтобы пробурить дырку в бетоне, но можно поковыряться отверткой )
     
  5. fanat

    fanat Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    35
    Симпатии:
    0
    Ахахах, я понял вас)
    Но сейчас проблема в другом)
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    Ты сравни HTML который был когда всё работало и тот код, что генерируешь на PHP. Смотри результат, в браузере правой кнопкой мыши по страничке и там есть пункт посмотреть исходный код, не элемент, а исходный код.
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    Какие книги читаешь?
     
  8. yuri

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

    С нами с:
    16 янв 2012
    Сообщения:
    288
    Симпатии:
    2
    Кто хоть раз держал в руках перфоратор ни когда не возьмёт "дрель с режимом перфоратора". Сори за офтопик.
    p.s. фреймворки рулят :)
     
  9. fanat

    fanat Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    35
    Симпатии:
    0
    Никакие. Учусь конкретно на возникающих проблемах)
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    Зачем себя так насиловать? Там сразу бы объяснили, что если что-то перестало работать, то надо сравнить результат.
     
  11. fanat

    fanat Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    35
    Симпатии:
    0
    Потому что это диплом. Я все время писал на C# и сейчас веду несколько проектов на этом языке, но преподам захотелось разнообразия, поэтому пришлось браться за сайт. Так что был бы очень благодарен, если бы вы посмотрели что у меня не так)
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    В том то и дело, что только ты можешь сравнить HTML код который генерировал на PHP и тот HTML который работает.
    Мы же не видим всю картину.
    Книгу можно за 1-2 дня прочитать, там страниц под тысячу обычно, а если ты уже писал на C# то и поймёшь всё.

    Так что отладкой занимайся.
     
  13. fanat

    fanat Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    35
    Симпатии:
    0
    Проблема решена. Как оказалось, я потерял строчку
    HTML:
    1. <div style="clear: both;">&nbsp;</div>
    Поэтому весь шаблон и слетел.