Paginazione dati PDO

DieciJack

Nuovo Utente
22 Feb 2015
13
0
0
Salve a tutti ragazzi, sto cercando di applicare la paginazione dei dati ad una query che estrae i dati dal DB. Purtroppo gli esempi on-line sono abbastanza obsoleti e mi viene difficile adattare il codice visto che attualmente sto utilizzando PDO per le operazioni con MySQL.

Ecco il codice:
PHP:
   	//PAGINAZIONE DATI 
	$count = 'SELECT id_articolo FROM `articoli`';
	$res = $pdo->query($count);
        $res_count = $res->fetch(PDO::FETCH_NUM);
	
	$tot_records = $res_count[0];
	$per_page = 10;
	
        $tot_pages = ceil($tot_records / $per_page);
	
	$current_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];
	
	$first = ($current_page - 1) * $per_page;

    // SELECT ELEMENTI 
    $sql = 'SELECT * FROM `articoli` ORDER BY `data_articolo` DESC LIMIT $first, $per_page';
    $result = $pdo->query($sql);

E poi tramite
PHP:
include("paginazione.php");
includo questo script:

PHP:
<?php

if($current_page == 1) { // se siamo nella prima pagina
$precedente = “<< precedente”;
} else { // altrimenti
$previous_page = ($current_page – 1);
$precedente = “<a href=\”?page=$previous_page\” title=\”Vai alla pagina precedente\”><< precedente</a>”;
}

if($current_page == $tot_pages) { // se siamo nell’ultima pagina
$successiva = “successiva >>”;
} else { // altrimenti
$next_page = ($current_page + 1);
$successiva = “<a href=\”?page=$next_page\” title=\”Vai alla pagina successiva\”>successiva >></a>”;
}
$paginazione = “$precedente   $successiva”;
?>

L'errore che ricevo è il seguente:

Notice: Undefined index: page in "..." on line 65

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1327 Undeclared variable: $first' in "...":71 Stack trace: #0 "..." (71): PDO->query('SELECT * FROM `...') #1 {main} thrown in "..." on line 71

Da quello che ho capito l'errore è nella variabile $current_page ma non riesco a trovare una soluzione, come posso risolvere? Grazie in anticipo.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, per il primo Notice modifica questa riga con isset()
PHP:
$current_page = !isset($_GET['page']) ? 1 : (int) $_GET['page'];
poi sistema gli apici della query
PHP:
// SELECT ELEMENTI 
$sql = "SELECT * FROM articoli ORDER BY data_articolo DESC LIMIT $first , $per_page";
 

DieciJack

Nuovo Utente
22 Feb 2015
13
0
0
Grazie adesso la query funziona correttamente, adesso però ho un problema con lo script della paginazione: utilizzando quello che ho inserito nel messaggio riscontro questo errore: Parse error: syntax error, unexpected '–' (T_STRING) on line 6

Con uno script differente, ossia questo:

PHP:
<?php

$paginazione = “Pagine totali: ” . $tot_pages . “
[";
for($i = 1; $i <= $tot_pages; $i++) {
if($i == $current_page) {
$paginazione .= $i . " ";
} else {
$paginazione .= "<a href=\"?page=$i\" title=\"Vai alla pagina $i\">$i</a> ";
}
}
$paginazione .= "]“;

L'errore che ricevo è il seguente:

PHP:
Parse error: syntax error, unexpected 'totali' (T_STRING) on line 2

Sembrano tutti errori di sintassi perciò ho provato a modificare gli apici di entrambi gli script senza però alcun risultato.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Usi degli apici strani ( “ )
che editor utilizzi ?
cmq cambiali con i doppi normali ( " )
 

DieciJack

Nuovo Utente
22 Feb 2015
13
0
0
Seguendo l'esempio di mrwebmaster: https://www.mrw.it/php/paginazione-dati-mysql_6871.html sono riuscito a risolvere.

Ecco il codice per la paginazione con PDO:
PHP:
   	//PAGINAZIONE DATI 
	
	$x_pag= 6;
	
	$pag = isset($_GET['page']) ? $_GET['page'] : 1;
	if (!$pag || !is_numeric($pag)) $pag = 1; 
	
	
	 $count = 'SELECT COUNT(id_articolo) FROM articoli';
     $res = $pdo->prepare($count);
     $res->execute();
     $res_count = $res->fetchColumn();
	 
	 $all_pages = ceil($res_count / $x_pag);
	 
	 $first = ($pag - 1) * $x_pag;

All'inizio ho provato con
PHP:
$count = 'SELECT id_articolo FROM articoli';
ma la query non riusciva a contare il numero di risultati.
Utilizzando
PHP:
$res_count = $res->fetch(PDO::FETCH_NUM);
l'errore che ricevevo è il seguente: Fatal error: Unsupported operand types probabilmente perchè anche quella stringa non contava con esattezza i risultati e non risuciva ad arrotondare con ceil in
PHP:
$all_pages = ceil($res_count / $x_pag);
Potrebbe esserci qualche problema di sicurezza con questo codice?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Fai il controllo sul parametro ricevuto per verificare che sia numerico, credo possa bastare
 

DieciJack

Nuovo Utente
22 Feb 2015
13
0
0
Fai il controllo sul parametro ricevuto per verificare che sia numerico, credo possa bastare

Grazie per la dritta, avrei un altra domanda da fare: ho provato ad inserire index.php?page=5,6,7,8 ecc. e ad ogni link visualizzo una pagina senza risultati, ma le pagine esistenti sono 4. C'è un modo per limitare solamente alle pagine esistenti? Ovvero se inserisco index.php?page=5 visualizzare un messaggio di errore come "La pagina non esiste."
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
puoi provare cosi
PHP:
if($pag > $all_pages) {
   $pag = $all_pages;
}
 
Discussioni simili
Autore Titolo Forum Risposte Data
elpirata [PHP] Paginazione dati estratti da una query con più condizioni PHP 17
L articolo: Paginazione dei dati presenti in un file di testo - informazioni PHP 2
L testare una paginazione "Creazione di 1000 dati random in una tabella" PHP 7
L Problema paginazione che ripete i dati doppi PHP 1
L probelma paginazione dati PHP 3
P paginazione dati mysql PHP 2
S Paginazione di dati con ASP e MySQL Classic ASP 3
D Paginazione dei dati estratti da un db MySQL PHP 5
C Paginazione dei dati presenti in un file di testo PHP 2
C paginazione dati PHP 9
K Paginazione dati PHP 1
C Paginazione dei dati presenti in un file di testo PHP 0
I Errore 80040220 nella newsletter con paginazione Classic ASP 0
motleyrulez Paginazione Tabella Bootstrap Javascript 2
B [Java] Paginazione in risposta HTTP Java 0
L [PHP] paginazione con classi vendor PHP 2
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
paloppa [PHP] paginazione con ajax PHP 1
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
MarcoGrazia Problema con bootstrap, saltata tutta la paginazione in IE8 HTML e CSS 1
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
M Paginazione di risultati query mysql PHP 2
zorro Help paginazione PHP 10
M Problema su numerazione paginazione php PHP 6
D [risolto] Problemi di paginazione dei risultati con una determinata query Classic ASP 4
L paginazione testo senza troncare le parole PHP 3
L problema paginazione con valori -1 -2 -3 -4 PHP 0
N Paginazione con invio modulo PHP 0
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
filippino Paginazione file txt con PHP? PHP 1
felino PHP e Paginazione Jquey PHP 2
H [RISOLTO] paginazione PHP + mysql PHP 15
M Problema Paginazione con Mod_rewrite .htaccess PHP 0
J Paginazione PHP in jQuery UI Tabs jQuery 13
ste80 interazione PHP Access con paginazione PHP 7
W Problema eliminazione ultimo record da ultima pagina di crud con paginazione PHP 2
L Paginazione con pdo. PHP 8

Discussioni simili