2014-11-18 13 views
8

Sono una specie di novità in Bootstrap, sto cercando di implementare l'impaginazione su una delle sezioni della mia pagina per rappresentare correttamente i dati. Qualcuno può aiutare, per favore?Paginazione di bootstrap con PHP e MySQL

Ecco un'istantanea di come il codice appare in questo momento. Come posso implementare l'impaginazione in modo che vengano visualizzati solo 10 record? Grazie.

<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

Perché non provare lib DataTable –

risposta

5

Sei abbastanza lontano.

Come minimo, è necessario eseguire quanto segue.

  1. È necessario creare una variabile che determina il numero di elementi da mostrare per pagina.
  2. È necessario prendere tale variabile e moltiplicarla per il numero di pagina per ottenere il numero di record da compensare nella query.
  3. È necessario compensare i risultati della query utilizzando il numero ottenuto dal calcolo sopra e limitare la query al numero di elementi da mostrare.
  4. È necessario contare il numero di elementi totali e dividerlo per il numero di elementi per pagina per ottenere il numero totale di pagine da mostrare nell'impaginazione.

Ecco un semplice codice di impaginazione che ho utilizzato molte volte in combinazione con Bootstrap.

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

basta omettere lo stili e applicare le classi bootstrap agli elementi. Ma non puoi semplicemente aggiungere l'html statico e aspettarti che funzioni senza alcun tipo di logica di backend. Bootstrap fornisce solo un modo per definire l'impaginazione, ma devi costruirlo.

+1

Una nota a margine (una questione importante per essere onesti) per aggiungere a questa risposta: ** do not use mysql_ prototipi , perché sono obsoleti **. L'OP sta analizzando direttamente i valori all'interno della query, il che rende davvero facile per un utente malintenzionato iniettare qualsiasi valore e rilasciare un'intera tabella. – briosheje

+0

@briosheje è corretto. Dovresti interrogare con i metodi mysqli o PDO aggiornati. Oltre a questo, lo script è utile per capire come costruire l'impaginazione. – CChoma

+0

suggerirei @cchoma di inserire del codice di esempio/di lavoro nella risposta. – 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 

utilizzo il codice che vi aiuterà

2

recente ho fatto qualcosa di simile con bootstrap, ho usato DataTable sensibili per raggiungere questo obiettivo. ecco il link here

cose che ho ricevuto problemi con,

  1. usare API più recenti da Google
  2. html, file JS CSS e sono forniti dal sito
  3. Forniscono impaginazione e responsivness tutto ciò che vuoi
  4. i dati più importanti accettano dati in formato array, quindi quando fai il echo dei dati da php usa l'oggetto jason e lega tutti i dati in un array e poi le righe che vuoi riempire
2

In primo luogo, si prega di imparare qualcosa su PDO http://php.net/manual/en/book.pdo.php. Nella mia soluzione presumo tu stia usando PDO.

La prima cosa che devi fare è determinare quante righe ci siano effettivamente nel DB.

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

Quindi impostare un limite di entità per pagina.

$entitiesPerPage = 10; 

Ora determiniamo quante pagine dovrebbero esserci. Innanzitutto dividerò il numero di risultati per entitiesPerPage. Diciamo che ci sono 202 risultati. Dividendolo per 10 (entità per pagina) si otterrà 20 pagine (convertite in int). Tuttavia ci sono ancora 2 entità rimaste. Ecco perché devo controllare il modulo e aggiungere un'altra pagina se necessario.

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

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

Ora siamo pronti per costruire un'impaginazione. Ma prima dobbiamo avere una variabile che contenga la pagina corrente.

$currentPage = $_GET['page']; 

O in modo più elegante.

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

Tuttavia, se non esiste alcuna pagina, supponiamo di essere sulla prima pagina.

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

Ok, ora è il momento per un array contenente informazioni sulla paginazione.

$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, 
    ]; 
} 

E infine la query per ottenere i risultati sulla pagina corrente.

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

Ora tutto ciò che dovete fare è passare in rassegna la variabile $ pagination e stampare il corretto codice HTML di bootstrap.

4

Ero di fronte alla stessa situazione, ho seguito un articolo e l'ho adattato al mio uso. Ecco di cosa hai bisogno per il tuo codice.

Testato con Bootstrap v3.3.5.


Prima di tutto: Si dovrebbe cambiare la vostra funzione mysql_query(). Questa estensione è stata deprecata in PHP 5.5.0 ed è stata rimossa in PHP 7.0.0. Invece, dovrebbe essere usata l'estensione MySQLi o PDO_MySQL. Maggiori informazioni here.

Detto questo, passiamo al nostro codice PHP.

PHP (gestisce le query MySQL e genera il codice HTML impaginazione)
Nota: è possibile modificare la pagina di destinazione tramite $targetpage variabile.

//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"; 
} 

Ora che abbiamo l'impaginazione istituito, lo chiamano semplicemente dove vuoi:

HTML

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


vostri <a> elementi riceveranno href=targetPage?page=pageNumber


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

Speranza che aiuta!

+0

Dovresti mettere abbastanza informazioni per rispondere alla domanda direttamente nella tua risposta. Se la pagina cui si collega si spegne, la risposta è inutile. – blm

+0

Abbastanza giusto. L'ho appena risolto. –

0

Per i nuovi utenti ...

$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;