2014-11-18 2 views
8

Я как бы новичок в Bootstrap, я пытаюсь реализовать разбиение на страницы на одном из разделов моей страницы, чтобы правильно представлять данные. Кто-нибудь может помочь?Bootstrap Pagination с использованием PHP и MySQL

Вот моментальный снимок того, как выглядит код прямо сейчас. Как я могу реализовать разбиение на страницы так, чтобы отображалось только 10 записей? Благодарю.

<section class="success" id="all-confessions"> 
    <div class="container"> 
     <div class="row"> 
      <div class="col-lg-12 text-center"> 
       <h2>All Confessions</h2> 
       <hr class="star-light"> 
      </div> 
     </div> 
     <div class="row"> 
      <div class="row text-left"> 
       <?php 
       $allconfession = mysql_query("SELECT * FROM collection ORDER BY date DESC"); 

       while($result2 = mysql_fetch_array($allconfession)) { 
        $id = $result2['id']; 
        ?> 
        <div class="col-md-3 col-md-offset-1"> 
         <h5>#<?php echo $id; ?></h5> 
        </div> 
        <div class="col-md-10 col-md-offset-1"> 
         <p class="para-confess"> 
          <?php 
          echo $result2['type'] ." from ". $result2['college'] ." of ". $result2['department'] ." confessed ". $result2['confession']; 
          ?> 
         </p> 
         <div class="text-left"> 
          <?php 
          if(isset($_COOKIE['uname'])) { 
           ?> 
           <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
            <input type="text" name="cid" style="display: none;" value="<?php echo $id; ?>"> 
            <button type="submit" class="btn btn-success fa fa-thumbs-up" name="like"> Cool</button> 
            <button type="submit" class="btn btn-warning fa fa-thumbs-down" name="dislike"> WTF</button> 
           </form> 
           <?php 
          } 
          ?> 
         </div> 
         <div class="text-right"> 
          <i class="fa fa-thumbs-o-up"> 
           <?php 
           $likes = mysql_query("SELECT COUNT(*) FROM activity WHERE cid = $id AND ld = 1"); 
           $alikes = mysql_fetch_row($likes); 
           echo $alikes[0]; 
           ?> 
          </i> &nbsp; 
          <i class="fa fa-thumbs-o-down"> 
           <?php 
           $dislikes = mysql_query("SELECT COUNT(*) FROM activity WHERE cid = $id AND ld = 0"); 
           $adislikes = mysql_fetch_row($dislikes); 
           echo $adislikes[0]; 
           ?> 
          </i> 
         </div> 
         <hr/> 
        </div> 
        <?php 
       } 
       ?> 
      </div> 
     </div> 
    </div> 
</section> 
+0

Почему бы вам не попробовать DataTable Lib –

ответ

5

Вы довольно далеко.

Как минимум, вам необходимо выполнить следующее.

  1. Вам необходимо создать переменную, которая определяет количество элементов, отображаемых на странице.
  2. Вам нужно взять эту переменную и умножить ее на номер страницы, чтобы получить количество записей, которые будут смещены в вашем запросе.
  3. Вам нужно компенсировать результаты запроса, используя номер, который вы получили из приведенного выше расчета, а также ограничить запрос количеством отображаемых элементов.
  4. Вам нужно подсчитать количество общих элементов и разделить его на количество элементов на странице, чтобы получить общее количество страниц, отображаемых в разбивке на страницы.

Вот какой простой код разбивки на страницы, который я использовал много раз в сочетании с Bootstrap.

http://www.a2zwebhelp.com/php-mysql-pagination

Просто опускаем стили и применять классы Bootstrap к элементам. Но вы не можете просто добавить статический html и ожидать, что он будет работать без какой-либо логики бэкэнд. Bootstrap предоставляет только способ стилизации страницы, но вы должны ее построить.

+1

примечание стороны (один важный, чтобы быть честным), чтобы добавить к этому ответу: ** не использовать mysql_ прототипы , потому что они устарели **. OP непосредственно анализирует значения внутри запроса, что делает его очень простым для того, чтобы злоумышленник мог ввести любое значение и удалить всю таблицу. – briosheje

+0

@briosheje является правильным. Вы должны запрашивать обновленные методы mysqli или PDO. Кроме этого, сценарий полезен для понимания того, как построить разбивку на страницы. – CChoma

+0

Я бы предложил @cchoma поставить некоторый образец/рабочий код в ответ. – Ironic

4
$page_no=$_POST['page_no'];//page number 
$limit=$_POST['limit'];//number of data 

$limit1 = $page_no*$limit; //calculate the limit 
$start = $limit1-$limit; //calculate the start point 
$sql = "select * from example limit $start,$limit";// query 

использовать код, это поможет

2

Недавно я сделал что-то подобное с начальной загрузкой, я использовал реагирующие DataTables для достижения этой цели. Вот ссылка here

вещи я есть проблема с,

  1. использовать последние API от Google
  2. HTML, CSS и JS файлы предоставлены сайтом
  3. они обеспечивают PAGINATION и responsivness все, что вы хотите:
  4. самые важные данные данных принимают данные в формате массива, поэтому, когда вы эхо-данные от php используете jason-объект и связываете все данные в массиве, а затем строки, которые хотите заполнить
2

Во-первых, пожалуйста, узнайте что-нибудь о PDO http://php.net/manual/en/book.pdo.php. В моем решении я предполагаю, что вы используете PDO.

Первое, что вам нужно сделать, это определить, сколько строк на самом деле находится в БД.

$nbOfResults = $pdo->query('select count(*) from collection')->fetchColumn(); 

Затем установите некоторое ограничение сущностей на страницу.

$entitiesPerPage = 10; 

Теперь давайте определим, сколько страниц должно быть. Сначала я делю количество результатов по entityPerPage. Предположим, что есть 202 результата. Разделение его на 10 (сущностей на страницу) приведет к 20 страницам (отбрасывается в int). Однако осталось еще 2 объекта. Вот почему я должен проверить modulo и добавить еще одну страницу, если это необходимо.

$nbOfPages = intval($nbOfResults/$entitiesPerPage); 

if(($entitiesPerPage % $nbOfResults) !== 0) { 
    $nbOfPages += 1 
} 

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

$currentPage = $_GET['page']; 

Или более элегантным способом.

$currentPage = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_NUMBER_INT); 

Однако, если нет какой-либо страницы, предположим, что мы находимся на первой странице.

if(!$currentPage) { $currentPage = 1 } 

Хорошо, теперь пришло время для массива, содержащего информацию разбивки на страницы.

$pagination = []; 

if ($currentPage !== 1) { 
    $pagination[] = [ 
     'page' => 'Previous', 
     'link' => '?page=' . ($currentPage - 1), 
     'active' => false, 
    ]; 
} 

for($i = 1; $i <= $nbOfPages; $i++) { 
    $pagination[] = [ 
     'page' => $i, 
     'link' => '?page=' . $i, 
     'active' => ($i === $currentPage), 
    ]; 
} 

if ($currentPage !== $nbOfPages) { 
    $pagination[] = [ 
     'page' => 'Next', 
     'link' => '?page=' . ($currentPage + 1), 
     'active' => false, 
    ]; 
} 

И, наконец, запрос, чтобы получить результаты на текущей странице.

$query = 'SELECT * FROM collection ORDER BY date DESC LIMIT ? OFFSET ?'; 
$sth = $dbh->prepare($query); 
$sth->execute(array($entitiesPerPage, ($currentPage - 1) * $entitiesPerPage))); 

Теперь все, что вам нужно сделать, это перебрать переменную $ pagination и напечатать правильный бутстрап HTML.

4

Я столкнулся с такой же ситуацией, последовали за статьей и скорректировали ее для моего использования. Вот что вам нужно для вашего кода.

Протестировано с помощью Bootstrap v3.3.5.


Прежде всего: Вы должны изменить свою mysql_query() функцию. Это расширение было устарело в PHP 5.5.0, и оно было удалено в PHP 7.0.0. Вместо этого следует использовать расширение MySQLi или PDO_MySQL. Подробнее here.

Как говорится, перейдем к нашему PHP-коду.

PHP (обрабатывает запросы MySQL и генерирует постраничной HTML)
Примечание: Вы можете изменить свою целевую страницу с помощью $targetpage переменной.

//PAGINATION// 
$sql = mysqli_query("select * from collection"); 
$total = mysql_num_rows($sql); 

$adjacents = 3; 
$targetpage = "$_SERVER['PHP_SELF']"; //your file name 
$limit = 10; //how many items to show per page 
if(isset($_GET['page'])) 
{ 
    $page = $_GET['page']; 
}else{ 
    $page = 0; 
} 

if($page){ 
    $start = ($page - 1) * $limit; //first item to display on this page 
}else{ 
    $start = 0; 
} 
/* Setup page vars for display. */ 
    if ($page == 0) $page = 1; //if no page var is given, default to 1. 
    $prev = $page - 1; //previous page is current page - 1 
    $next = $page + 1; //next page is current page + 1 
    $lastpage = ceil($total/$limit); //lastpage. 
    $lpm1 = $lastpage - 1; //last page minus 1 

$sql2 = "SELECT * FROM collection"; 
$sql2 .= " order by date limit $start ,$limit "; 
$sql_query = mysqli_query($sql2); 

/* CREATE THE PAGINATION */ 

$pagination = ""; 
if($lastpage > 1) 
{ 
    $pagination .= "<ul class='pagination'>"; 
    if ($page > $counter+1) { 
     $pagination.= "<li><a href=\"$targetpage?page=$prev\"><</a></li>"; 
    } 

    if ($lastpage < 7 + ($adjacents * 2)) 
    { 
     for ($counter = 1; $counter <= $lastpage; $counter++) 
     { 
      if ($counter == $page) 
       $pagination.= "<li><a href='#' class='active'>$counter</a></li>"; 
      else 
       $pagination.= "<li><a href=\"$targetpage?page=$counter\">$counter</a></li>"; 
     } 
    } 
    elseif($lastpage > 5 + ($adjacents * 2)) //enough pages to hide some 
    { 
     //close to beginning; only hide later pages 
     if($page < 1 + ($adjacents * 2)) 
     { 
      for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++) 
      { 
       if ($counter == $page) 
        $pagination.= "<li><a href='#' class='active'>$counter</a></li>"; 
       else 
        $pagination.= "<li><a href=\"$targetpage?page=$counter\">$counter</a></li>"; 
      } 
      $pagination.= "<li>...</li>"; 
      $pagination.= "<li><a href=\"$targetpage?page=$lpm1\">$lpm1</a></li>"; 
      $pagination.= "<li><a href=\"$targetpage?page=$lastpage\">$lastpage</a></li>"; 
     } 
     //in middle; hide some front and some back 
     elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) 
     { 
      $pagination.= "<li><a href=\"$targetpage?page=1\">1</a></li>"; 
      $pagination.= "<li><a href=\"$targetpage?page=2\">2</a></li>"; 
      $pagination.= "<li>...</li>"; 
      for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) 
      { 
       if ($counter == $page) 
        $pagination.= "<li><a href='#' class='active'>$counter</a></li>"; 
       else 
        $pagination.= "<li><a href=\"$targetpage?page=$counter\">$counter</a></li>"; 
      } 
      $pagination.= "<li>...</li>"; 
      $pagination.= "<li><a href=\"$targetpage?page=$lpm1\">$lpm1</a></li>"; 
      $pagination.= "<li><a href=\"$targetpage?page=$lastpage\">$lastpage</a></li>"; 
     } 
     //close to end; only hide early pages 
     else 
     { 
      $pagination.= "<li><a href=\"$targetpage?page=1\">1</a></li>"; 
      $pagination.= "<li><a href=\"$targetpage?page=2\">2</a></li>"; 
      $pagination.= "<li>...</li>"; 
      for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; 
      $counter++) 
      { 
       if ($counter == $page) 
        $pagination.= "<li><a href='#' class='active'>$counter</a></li>"; 
       else 
        $pagination.= "<li><a href=\"$targetpage?page=$counter\">$counter</a></li>"; 
      } 
     } 
    } 

    //next button 
    if ($page < $counter - 1) 
     $pagination.= "<li><a href=\"$targetpage?page=$next\">></a></li>"; 
    else 
     $pagination.= ""; 
    $pagination.= "</ul>\n"; 
} 

Теперь, когда мы нумерация страниц установить, просто вызовите его везде, где вы хотите:

HTML

<div class="row"> 
    <div class="col-md-12 text-center"> 
      <?php echo $pagination ?> 
    </div> 
</div> 


Ваши <a> элементы получат href=targetPage?page=pageNumber


ИСТОЧНИК: http://www.a2zwebhelp.com/php-mysql-pagination

Надежда, что помогает!

+0

Вы должны предоставить достаточно информации, чтобы ответить на вопрос непосредственно в своем ответе. Если страница, на которую вы ссылаетесь, уходит, ваш ответ бесполезен. – blm

+0

Достаточно честный. Просто решил. –

0

Для новых пользователей ...

$ppcompletexxkc = "yes"; 

$restt = $db->prepare('SELECT COUNT(*) FROM shop WHERE complete = :complete'); 
$restt->execute(array(':complete' => $ppcompletexxkc 
           )); 
$total = $restt->fetchColumn(); 



$adjacents = 3; 
$targetpage = "category.php"; //your file name 
$limit = 1; //how many items to show per page 
$page = $_GET['page']; 

if($page){ 
$start = ($page - 1) * $limit; //first item to display on this page 
}else{ 
$start = 0; 
} 

/* Setup page vars for display. */ 
if ($page == 0) $page = 1; //if no page var is given, default to 1. 
$prev = $page - 1; //previous page is current page - 1 
$next = $page + 1; //next page is current page + 1 
$lastpage = ceil($total/$limit); //lastpage. 
$lpm1 = $lastpage - 1; //last page minus 1 


$lksmttba = $db->prepare('SELECT * FROM shop WHERE complete = :complete ORDER BY id ASC LIMIT :start ,:limit '); 
     $lksmttba->execute(array(':complete' => $ppcompletexxkc, 
           ':start' => $start, 
           ':limit' => $limit 
           )); 



/* CREATE THE PAGINATION */ 

$pagination = ""; 
if($lastpage > 1) 
{ 
$pagination .= "<div class='pagination1'> <ul>"; 
if ($page > $counter+1) { 
$pagination.= "<li><a href=\"$targetpage?page=$prev\">prev</a></li>"; 
} 

if ($lastpage < 7 + ($adjacents * 2)) 
{ 
for ($counter = 1; $counter <= $lastpage; $counter++) 
{ 
if ($counter == $page) 
$pagination.= "<li><a href='#' class='active'>$counter</a></li>"; 
else 
$pagination.= "<li><a href=\"$targetpage?page=$counter\">$counter</a></li>"; 
} 
} 
elseif($lastpage > 5 + ($adjacents * 2)) //enough pages to hide some 
{ 
//close to beginning; only hide later pages 
if($page < 1 + ($adjacents * 2)) 
{ 
for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++) 
{ 
if ($counter == $page) 
$pagination.= "<li><a href='#' class='active'>$counter</a></li>"; 
else 
$pagination.= "<li><a href=\"$targetpage?page=$counter\">$counter</a></li>"; 
} 
$pagination.= "<li>...</li>"; 
$pagination.= "<li><a href=\"$targetpage?page=$lpm1\">$lpm1</a></li>"; 
$pagination.= "<li><a href=\"$targetpage?page=$lastpage\">$lastpage</a></li>"; 
} 
//in middle; hide some front and some back 
elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) 
{ 
$pagination.= "<li><a href=\"$targetpage?page=1\">1</a></li>"; 
$pagination.= "<li><a href=\"$targetpage?page=2\">2</a></li>"; 
$pagination.= "<li>...</li>"; 
for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) 
{ 
if ($counter == $page) 
$pagination.= "<li><a href='#' class='active'>$counter</a></li>"; 
else 
$pagination.= "<li><a href=\"$targetpage?page=$counter\">$counter</a></li>"; 
} 
$pagination.= "<li>...</li>"; 
$pagination.= "<li><a href=\"$targetpage?page=$lpm1\">$lpm1</a></li>"; 
$pagination.= "<li><a href=\"$targetpage?page=$lastpage\">$lastpage</a></li>"; 
} 
//close to end; only hide early pages 
else 
{ 
$pagination.= "<li><a href=\"$targetpage?page=1\">1</a></li>"; 
$pagination.= "<li><a href=\"$targetpage?page=2\">2</a></li>"; 
$pagination.= "<li>...</li>"; 
for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; 
$counter++) 
{ 
if ($counter == $page) 
$pagination.= "<li><a href='#' class='active'>$counter</a></li>"; 
else 
$pagination.= "<li><a href=\"$targetpage?page=$counter\">$counter</a></li>"; 
} 
} 
} 

//next button 
if ($page < $counter - 1) 
$pagination.= "<li><a href=\"$targetpage?page=$next\">next</a></li>"; 
else 
$pagination.= ""; 
$pagination.= "</ul></div>\n"; 
} 


echo $pagination; 

    while($readpostv=$lksmttba->fetch(PDO::FETCH_ASSOC)){ 

      echo' '.$readpostv['img1'].''; 
     } 
echo $pagination; 
Смежные вопросы