Paginazione con pdo.

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
Salve, come mai mi dice sempre
PHP:
echo "Nessun dato Trovato!";
invece i dati ci sono?.
questa è la paginazione che usavo in mysqli e funziona molto bene ora la sto portando in pdo.
ma non so come mai mi dice sempre non trovato record.

PHP:
<?php
	class Paginazione
	{
		private $xpage = 0;
		private $tot = 0;

		private $totpag = 0;
		private $cpage = 0;
		private $query = "";
		private $record = array();
	
		public function Paginazione($query, $xpage, $varq)
		{
            global $db;
			// le rendo globali
			$this->xpage = $xpage;
			$this->varq = $varq;
			$this->query = trim($query);
			
			// pagina corrente sia get che post
			$this->cpage = (int)($varq)>0 ? (int)$varq : 1;
			// inizio record
			$inizio = $xpage * ($this->cpage - 1);
			
			// eseguo la query per contare i record
			$ct = $db->query($this->query) or die($db->error);
			
			$rows = $ct->fetchAll(); 
			$total_records = count($rows);
			// record totali
			$this->tot = $total_records = $ct->rowCount();
		                                           	
			// se ci sono record                                                      // DEVE ESSERE QUI IL PROBLEMA.. perché non so come fare.
			if($this->tot > 0)
			{
				// pagine totali
				$this->totpag = ceil($this->tot / $xpage);
				
				// scrivo ed eseguo la query mirata
				$target = " LIMIT " . $inizio . ", " . $xpage;
				$ex = $db->query($this->query . $target) or die($db->error);
				
				while($ft = $ex->fetch())
				{
					$record[] = $ft;
				}
				
				if(empty($record))
				{				
				
				}
				else
				{
				$this->record = $record;
				}
				
			}
			else
			{
				$this->record = array();
			}
		}
		
		public function Show()
		{
			if(count($this->record) > 0)
			{
				return $this->record;
			}
			else
			{
				return false;
			}
			
		}
		
		public function Link($nlink = 4)
		{
			$before = array();
			$after = array();
			
			if($this->cpage < $nlink)
			{
				$nlink *= 2;
				$nlink -= ($this->cpage - 1);
			}
			elseif($this->cpage > ($this->totpag - $nlink))
			{
				$nlink *= 2;
				$nlink -= ($this->totpag - $this->cpage);
			}
			
			
			
			for($i = $nlink; $i>=1; $i--)
			{
				if(($this->cpage - $i) >= 1)
				{
					$before[] = $this->cpage - $i;
				}
			}
			
			for($i = 1; $i<=$nlink; $i++)
			{
				if(($this->cpage + $i) <= $this->totpag)
				{
					$after[] = $this->cpage + $i;
				}
				
				if($this->cpage == $nlink)
					$nlink += 1;
			}
			
			$link["first"] = 1;
			$link["before"] = $before;
			$link["current"] = $this->cpage;
			$link["after"] = $after;
			$link["last"] = $this->totpag;
			
			if($this->cpage <= $this->totpag && $this->totpag > 1)
			{
				return $link;
			}
			else
			{
				return false;
			}
		}
	}
?>

e questo e il file da lanciare:
PHP:
<?php defined('ENGINE_BLOG') or die("Pagina non accessibile direttamente"); ?>
<?php
include("blog_include.php");
?>

<p class="ph1">Blog</p>
<br /> <br />
<div align="center">
<?php
try {
    $blog_categories = $db->prepare('SELECT * FROM blog_categories ORDER BY is_order ASC');
	$blog_categories->execute();
	
	
} catch (Exception $e) {
        die ($e);
    }
?><span style="color:red;">[&nbsp;&nbsp;<a href="blog.php">Vedi Tutto</a>&nbsp;&nbsp;]</span>
<?php	
while($row = $blog_categories->fetch())
//foreach($rowarray as $row)	
{
?>
 [&nbsp;&nbsp;<a href="blog.php?cat=<?php echo $row["id"]; ?>"><?php echo $row["categories"]; ?></a>&nbsp;&nbsp;]
<?php
}
?>

</div>
<br>
<?php
$cat = (isset($_GET['cat'])) ? trim((int)$_GET['cat']) : '';

$pagina = (isset($_GET["pagina"])) ? trim ((int)$_GET["pagina"]): '';

  $pag = new Paginazione("SELECT  blog_categories.categories as _cat , blog.* FROM blog 
       INNER JOIN blog_categories 
          ON blog_categories.id = blog.id_categories WHERE blog.is_public=1 ORDER BY data_reg DESC",1, $pagina);

if($record = $pag->Show())
{
	foreach($record as $row)
	{
?><div class="post">
<h2><?php echo $row["subject"]; ?></h2>
<div class="contents">
<?php echo bbcode_more(bbcode($row['content']), $row['id']); ?>	
</div>
<ul class="info">
<li><strong>Data:</strong>&nbsp;<?php echo data_it($row['data_reg']) ?>&nbsp;</li>
<li><strong>Categoria:</strong>&nbsp;<?php echo $row["_cat"]; ?>&nbsp;</li>
</ul>
</div>
<?php
}
}
	else
	{
		echo "Nessun dato Trovato!";
	}
// restituisce i link alle pagine
	if($link = $pag->Link(3))
	{
		?>
		<a href="?uid=<?php echo $uid; ?>&cat=<?php echo $cat; ?>&pagina=<?php echo $link['first']; ?>">&laquo;</a> <?php
			foreach($link['before'] as $bf)
			{
				?><a href="?uid=<?php echo $uid; ?>&cat=<?php echo $cat; ?>&pagina=<?php echo $bf;?>"><?php echo $bf;?></a> <?php
			}
			?><?php echo $link['current'];?> <?php
			foreach($link['after'] as $at)
			{
				?><a href="?uid=<?php echo $uid; ?>&cat=<?php echo $cat; ?>&pagina=<?php echo $at;?>"><?php echo $at;?></a> <?php
			}
		?><a href="?uid=<?php echo $uid; ?>&cat=<?php echo $cat; ?>&pagina=<?php echo $link['last'];?>">&raquo;</a>
		<?php
	}
$db = NULL;
?>
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
scusate, lascio perdere la mia ma ho trovato una classe.. ma non so come mai se metto la mia con inner join non fa più...

ecco il codice funzionante:
PHP:
$pages = new Paginator('1','p');

//get number of total records
$stmt = $db->query('SELECT count(id) FROM blog');
$row = $stmt->fetch(PDO::FETCH_NUM);
$total = $row[0];

//pass number of records to
$pages->set_total($total); 

$data = $db->query('SELECT * FROM blog '.$pages->get_limit());
foreach($data as $row) {
    //display the records here

?><div class="post">
<h2><?php echo $row["subject"]; ?></h2>
<div class="contents">
<?php echo bbcode_more(bbcode($row['content']), $row['id']); ?>	
</div>
<ul class="info">
<li><strong>Data:</strong>&nbsp;<?php echo data_it($row['data_reg']) ?>&nbsp;</li>
<li><strong>Categoria:</strong>&nbsp;<?php echo $row["_cat"]; ?>&nbsp;</li>
</ul>
</div>
<?php

}

link:
http://www.daveismyname.com/tutorials/php-tutorials/pagination-with-a-php-class/

link 2:
https://github.com/daveismyname/pagination

idee come fare?

grazie mille.
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
help.

$data = $db->query('SELECT blog_categories.categories as _cat,blog.* FROM blog INNER JOIN blog_categories
ON blog_categories.id = blog.id_categories WHERE blog.is_public=1 ORDER BY data_reg DESC'.$pages->get_limit());

se metto cosi ricevo errore:

Warning: Invalid argument supplied for foreach()
idee?
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Ti sei dimenticato la clausola LIMIT:
PHP:
$data = $db->query('SELECT blog_categories.categories as _cat,blog.* FROM blog INNER JOIN blog_categories 
ON blog_categories.id = blog.id_categories WHERE blog.is_public=1 ORDER BY data_reg DESC LIMIT ' . $pages->get_limit());
E dovresti impostare PDO per lanciare un'eccezione quando una query fallisce, così puoi gestire gli errori in un blocco try/catch o in un gestore delle eccezioni.
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
ciao , ho messo quello che mi hai detto.. ma mi da il solito:
bool(false)
Warning: Invalid argument supplied for foreach()

ora ho messo anche var_dump e mi dice false.

come mai?

non supporta SQLitE?

PHP:
$data = $db->query('SELECT blog_categories.categories as _cat,blog.* FROM blog INNER JOIN blog_categories 
ON blog_categories.id = blog.id_categories WHERE blog.is_public=1 ORDER BY data_reg DESC LIMIT ' . $pages->get_limit()); 
		  
var_dump($data);
foreach($data as $row) {

idee?..

grazie mille.
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
ops... non so come mai ora funziona... forse ho messo male io page_limit..
non saprei ho copiato il codice tuo e messo nel mio ha funzionato.

ti ringrazio molto..alla prossima.
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
ultima cosa.. mi sai dire come faccio fare generare i link della paginazione:
ad questa righa di codice:
PHP:
echo $pages->page_links('?','&status='.$_GET['status'].'&active='.$_GET['active']);

il mio deve essere ?b=list_cat&cat=(numero)

non riesco a capire la guida.

hai idee?.
 

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
niente ho risolto.. vedendo bene gli esempi della guida..

poi ho messo il sito su altervista per non pagare più. e non aver problemi in quel servizio lì che ne hanno sempre una..
andava bene per imparare a programmare .. però dopo quando scade il dominio lo sposto su register se c'è la farò con i soldi.

vi ringrazio molto.. e buona serata.
 
Discussioni simili
Autore Titolo Forum Risposte Data
I Errore 80040220 nella newsletter con paginazione Classic ASP 0
L [PHP] paginazione con classi vendor PHP 2
paloppa [PHP] paginazione con ajax PHP 1
elpirata [PHP] Paginazione dati estratti da una query con più condizioni PHP 17
MarcoGrazia Problema con bootstrap, saltata tutta la paginazione in IE8 HTML e CSS 1
D [risolto] Problemi di paginazione dei risultati con una determinata query Classic ASP 4
L problema paginazione con valori -1 -2 -3 -4 PHP 0
N Paginazione con invio modulo PHP 0
filippino Paginazione file txt con PHP? PHP 1
M Problema Paginazione con Mod_rewrite .htaccess PHP 0
ste80 interazione PHP Access con paginazione PHP 7
W Problema eliminazione ultimo record da ultima pagina di crud con paginazione PHP 2
K problemi con paginazione tabella PHP 7
I aiuto con paginazione PHP 5
M paginazione con 16 pagine Classic ASP 0
B Problemi con paginazione dei risultati PHP 1
D Paginazione con tot righe per javascript Classic ASP 6
S Paginazione di dati con ASP e MySQL Classic ASP 3
S paginazione di xml con asp/php XML 2
M paginazione record con lettere Classic ASP 0
S Paginazione con MYSQL e ADO Database 1
motleyrulez Paginazione Tabella Bootstrap Javascript 2
B [Java] Paginazione in risposta HTTP Java 0
K [PHP] Paginazione Wordpress: passare variabile PHP 6
A [PHP] If e Else paginazione ok ci sono risultati no ma avanti lo stesso PHP 15
O paginazione php mysql PHP 10
A [PHP] limitare counter paginazione PHP 7
V [ASP] paginazione-risultati-query-grandi-dimensioni Classic ASP 8
A [PHP] Problema paginazione motore di ricerca PHP 48
A [PHP] inserire paginazione su script php/mysql PHP 6
Marcello.Fiore Paginazione jQuery - PHP jQuery 2
X come modificare paginazione del tutorial PHP 0
F paginazione record di una query Classic ASP 5
Luca13 ASP Easy-News paginazione Classic ASP 2
G Problema di Indice e Paginazione PHP 5
L articolo: Paginazione dei dati presenti in un file di testo - informazioni PHP 2
M Paginazione di risultati query mysql PHP 2
D Paginazione dati PDO PHP 8
zorro Help paginazione PHP 10
M Problema su numerazione paginazione php PHP 6
L paginazione testo senza troncare le parole PHP 3
L testare una paginazione "Creazione di 1000 dati random in una tabella" PHP 7
L Paginazione file di testo PHP 3
N Script paginazione PHP 0
N Paginazione PHP 2
felino Pagina di ricerca: la paginazione non funziona WordPress 0
xone Evitare Meta Tag duplicati su paginazione php PHP 2
felino PHP e Paginazione Jquey PHP 2
H [RISOLTO] paginazione PHP + mysql PHP 15
J Paginazione PHP in jQuery UI Tabs jQuery 13

Discussioni simili