Paginazione record su più pagine

lughino

Nuovo Utente
23 Mar 2010
24
0
0
Ciao a tutti,
sono nuovo del forum.
Per questo vi chiedo venia per la mia ignoranza in fattore di programmazione, ma sto cercando di imparare da autodidatta..
Come da titolo ho creato una pagina di risultati da una semplice form, e dato che i risultati sono diventati tanti, ho pensato di suddividerli su più pagine...
Ho letto molte guide e molti post in merito ed fatto questo:
PHP:
if (get_magic_quotes_gpc()) 
{ 
    $tipo = stripslaches($tipo); 
} 
$tipo = mysql_real_escape_string($tipo); 
//inizio parte inerente la paginazione
$ris_conteggio = mysql_query("SELECT count(*) as tot FROM Immobili WHERE Tipo LIKE '%$tipo%'") or die( mysql_error() );
$righe = mysql_fetch_array( $ris_conteggio );
$messaggi = 20;
$current_page = (!$_GET['pag']) ? 1 : (int)$_GET['pag'];
$pagine = ceil ( $righe['tot'] / $messaggi );
echo "Pagine: ";
for ( $i = 1; $i <= $pagine; $i++ ) {
  if($i == $current_page) {
$paginazione .= $i . " ";
} else {
$paginazione .= "<a href=\"risultato.php?tipo=" . $tipo . " &amp;pagina=" . $i . "&amp;Invia=true\">" . $i . "</a>";
}
}
echo $paginazione;
// estraggo i record
if (! isset ($_GET['pag']) || (int)$_GET['pag'] < 1) {
  $_GET['pag'] = 1;
}

if (isset ($_GET['pag']) && (int)$_GET['pag'] > $pagine) {
  $_GET['pag'] = $pagine;
}
if(isset ($_GET['Invia']) && $_GET['Invia'] == "true") {
$query = "SELECT Immobili.Tipo, Immobili.Comune, Immobili.Acquisto, Immobili.Prezzo, Immobili.Descrizione, Immobili.ID, Immagini.Id_Immobili, Immagini.Percorso, Immagini.Flag FROM Immobili JOIN Immagini ON Immobili.ID = Immagini.Id_Immobili  WHERE Immobili.Tipo LIKE '%$tipo%' LIMIT " . ( ( (int)$_GET['pag'] - 1 ) * $messaggi ) . "," . $messaggi or die( mysql_error() );
$risultato = mysql_query($query);
// qui il codice che stampa i messaggi 

if(mysql_num_rows($ris_conteggio) == 0) {
echo ("<div id=\"contenutoimmobile\">Non ci sono immobili al momento per questa sezione.</div>");
}else{ 
while ($ris_array = mysql_fetch_assoc($risultato)) {
	echo "<div id=\"contenutorecord\">";
	echo "<div id=\"sfondoimgsmall\"><img src=\"" . $ris_array['Percorso'] . "\" height=\"99\" width=\"150\" /></div>";
	echo "<div id=\"contenutoimmobile\">";
	$Acquisto = strtoupper($ris_array['Acquisto']);
	$Tipo = strtoupper($ris_array['Tipo']);
	$Comune = strtoupper($ris_array['Comune']);
	$Descrizione = tagliastringa($ris_array['Descrizione'],150);
	$Prezzo = "€ " . $ris_array['Prezzo'];
	echo "<h2>" . $Acquisto . " - " . $Tipo . " - " . $Comune . "   -   " . $Prezzo . "</h2>";
	echo "<p>" . $Descrizione . "</p></div></div>";

}
} 
}
solo che ho un problema...ora i record non si visualizzano più!
Nonostante mi si vedano correttamente i numeri delle pagine (ho 35 record e ne deve visualizzare 20 per pagina, quindi due pagine).
La cosa strana è che prima avevo lo script senza la parte inerente alla paginazione e funzionava tutto benissimo..
Dove sto sbagliando?
Non ci sarebbe anche un modo per visualizzare anche avanti e indietro?
anche su questo non sono riuscito...
Grazie a tutti quanti
ciao
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Guarda, non so dirti dove sia l'errore... ma posso consigliarti una diversa modalità di ottenere un multipage?
Crea una funzione, così che i parametri sono più chiari e il codice del multipage non si mescola troppo con il codice su cui lavori..
Io per fare questo tipo di cose mi sono basata su questa pagina: CLICCA QUI

In fondo trovi molti esempi di funzioni con le relative differenze e spiegazioni.
 

lughino

Nuovo Utente
23 Mar 2010
24
0
0
Guarda, non so dirti dove sia l'errore... ma posso consigliarti una diversa modalità di ottenere un multipage?
Crea una funzione, così che i parametri sono più chiari e il codice del multipage non si mescola troppo con il codice su cui lavori..
Io per fare questo tipo di cose mi sono basata su questa pagina: CLICCA QUI

In fondo trovi molti esempi di funzioni con le relative differenze e spiegazioni.

Sei stata gentilissima...
però, so che faccio una domanda stupida, come faccio ad inserire nel mio contesto questa funzione?
Codice:
function pagination_4($total_pages,$page){

    global $webpage;
    $pagination="";

        if($total_pages!=1){

       /*Impostiamo il numero massimo di elementi visualizzabili all'apertura della patina, in questo caso 10;*/

        $max = 10;

        //Usiamo questa variabile nel cilco for piu sotto;

        $max_links = $max+1;
        $h=1;

            //Se la pagina è > di $max_links

        if($page>$max_links){

            //Facciamo partire il nostro loop

            $h=(($h+$page)-$max_links);
        }

          //Se la pagina non è l'unica

        if($page>=1){

                //estendiamo il nosto range di link visualizzabili

            $max_links = $max_links+($page-1);
        }

            //Se il numero massimo di link visualizzabili, supera il numero totale delle pagine, allora il numero di links è =numero totale di pagine

        if($max_links>$total_pages){
            $max_links=$total_pages+1;
        }

            //Creiamo i link prima e prev

        if($page>1){
            $pagination.="<a href=".$webpage."?page=1><small>prima</small></a>
                                       <a href=".$webpage."?page=".($page-1).">Prev</a>";
        }

            //Creiamo le pagine linkate

        for ($i=$h;$i<$max_links;$i++){
            if($i==$page){
                $pagination.="<a>".$i."</a>";
            }
            else{
                $pagination.="<a href=".$webpage."?page=".$i.">".$i."</a>";
            }
        }

            //Creiamo i link Next  last buttons

        if(($page >="1")&&($page!=$total_pages)){
            $pagination.="<a href=".$webpage."?page=".($page+1).">Next</a>
                                       <a href=".$webpage."?page=".$total_pages."><small>Last</small></a>";
        }
    }

    //if one page of results

    else{
        $pagination.="";
    }
    
    return($pagination);
}
echo  pagination_4($total_pages,$page);

Come faccio a collegare la pagina corrente e il numero totali di record presenti nel mio db?
Grazie
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Crea una pagina es: funzioni.php ed inserisci all'interno la funzione pagination_4.

Salva la pag sul server e nella pagina dove fai la query inserisci:
PHP:
 include "funzioni.php";
$page = $_GET['page'];
/*Setto il numero massimo di record per pagina */
$max_results = 10;
//query di ricerca
$query_ricerca= "SELECT Immobili.Tipo, Immobili.Comune, Immobili.Acquisto, Immobili.Prezzo, Immobili.Descrizione, Immobili.ID, Immagini.Id_Immobili, Immagini.Percorso, Immagini.Flag FROM Immobili JOIN Immagini ON Immobili.ID = Immagini.Id_Immobili  WHERE Immobili.Tipo LIKE '%$tipo%'";
$result=mysql_query($query_ricerca, $conn) or die(mysql_error());
$total_results = mysql_num_rows($result);
$total_pages = ceil($total_results / $max_results);
$webpage = basename($_SERVER['PHP_SELF']);
$pagination=pagination_4($total_pages,$page);
/* Mi calcolo l'offset */
$from = (($page * $max_results) - $max_results); 
$query_ricerca .= " LIMIT $from, $max_results ";
$result2 = mysql_query($query_ricerca, $conn) or die(mysql_error());
while ($ris_array = mysql_fetch_assoc($result2)) {
...
 

lughino

Nuovo Utente
23 Mar 2010
24
0
0
Ti ringrazio molto per la risposta.
Mi da però come rislutato questo errore:
Codice:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-20, 20' at line 1
C'è solo un dubbio che mi affligge, come faccio a modificare i collegamenti delle pagine per fare in modo che funzioni il tutto?
Per spiegarmi meglio:
Codice:
<a href=".$webpage."?page=".($page-1).">Prev</a>
questi collegamenti, considerando che mi passo il tipo, e in futuro anche altri parametri, via get?
Grazie ancora per la tua disponibilità
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
per capire l'errore della query metti tra le due righe

$query_ricerca= "SELECT Immobili.Tipo, Immobili.Comune, Immobili.Acquisto, Immobili.Prezzo, Immobili.Descrizione, Immobili.ID, Immagini.Id_Immobili, Immagini.Percorso, Immagini.Flag FROM Immobili JOIN Immagini ON Immobili.ID = Immagini.Id_Immobili WHERE Immobili.Tipo LIKE '%$tipo%'";

var_dump($query_ricerca);//che poi toglerai

$result=mysql_query($query_ricerca, $conn) or die(mysql_error());

dal vardump vedi come si compone la stringa e capire dove è l'errore
 

lughino

Nuovo Utente
23 Mar 2010
24
0
0
Chiedo scusa per l'immensa ignoranza, ma mi ha restituito questo:
Codice:
string(288) "SELECT Immobili.Tipo, Immobili.Comune, Immobili.Acquisto, Immobili.Prezzo, Immobili.Descrizione, Immobili.ID, Immagini.Id_Immobili, Immagini.Percorso, Immagini.Flag FROM Immobili JOIN Immagini ON Immobili.ID = Immagini.Id_Immobili WHERE Immobili.Tipo LIKE '%Appartamento%' LIMIT -20, 20 " You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-20, 20' at line 1
che in sostanza è come l'errore venuto fuori prima, penso di aver capito che l'errore sta nel calcolo del LIMIT da cui deve partire, ma non ho capito come fare per risolvere.
Scusate ancora per l'ignoranza
 

lughino

Nuovo Utente
23 Mar 2010
24
0
0
Ok,
piccolo passo avanti...
modificando il calcolo dell'offset da
Codice:
$from = (($page * $max_results) - $max_results);
a
Codice:
$from = ($page - 1) * $max_results;

ora i record si vedono, peccato che quando clicco su Next o pagina 2 non mi visualizza nulla...
mi rimane sempre il dubbio che sia giusto o sbagliato quello che ho fatto:
Codice:
 if($page>1){
            $pagination.="<div id=\"contenutorecord\"><a href=".$webpage."?tipo=" . $tipo . "?page=".($page-1).">Prev</a></div>";
        }

            //Creiamo le pagine linkate

        for ($i=$h;$i<$max_links;$i++){
            if($i==$page){
                $pagination.="<a>".$i."</a>";
            }
            else{
                $pagination.="<div id=\"contenutorecord\"><a href=".$webpage."?tipo=" . $tipo . "?page=".$i.">".$i."</a></div>";
            }
        }

            //Creiamo i link Next  last buttons

        if(($page >="1")&&($page!=$total_pages)){
            $pagination.="<div id=\"contenutorecord\"><a href=".$webpage."?tipo=" . $tipo . "?page=".($page+1).">Next</a></div>";
        }
in effetti la variabile $tipo la chiamo fuori dalla funzione, quindi penso che sia per questo...però alla funzione ho aggiunto:
Codice:
global $tipo;
come faccio ad integrarla dentro la funzione?
grazie
ciao
 
Ultima modifica:

lughino

Nuovo Utente
23 Mar 2010
24
0
0
Ce l'ho fatta finalmente!!
nel collegamento invece che questo:
Codice:
if($page>1){
            $pagination.="<div id=\"contenutorecord\"><a href=".$webpage."?tipo=" . $tipo . "?page=".($page-1).">Prev</a></div>";
        }

            //Creiamo le pagine linkate

        for ($i=$h;$i<$max_links;$i++){
            if($i==$page){
                $pagination.="<a>".$i."</a>";
            }
            else{
                $pagination.="<div id=\"contenutorecord\"><a href=".$webpage."?tipo=" . $tipo . "?page=".$i.">".$i."</a></div>";
            }
        }

            //Creiamo i link Next  last buttons

        if(($page >="1")&&($page!=$total_pages)){
            $pagination.="<div id=\"contenutorecord\"><a href=".$webpage."?tipo=" . $tipo . "?page=".($page+1).">Next</a></div>";
        }
ho inserito questo:
Codice:
if($page>1){
            $pagination.="<div id=\"footer\"><a href=".$webpage."?tipo=" . $tipo . "&amp;page=".($page-1).">Prev</a></div>";
        }

            //Creiamo le pagine linkate

        for ($i=$h;$i<$max_links;$i++){
            if($i==$page){
                $pagination.="<div id=\"footer\"><a>".$i."</a></div>";
            }
            else{
                $pagination.="<div id=\"footer\"><a href=".$webpage."?tipo=" . $tipo . "&amp;page=".$i.">".$i."</a></div>";
            }
        }

            //Creiamo i link Next  last buttons

        if(($page >="1")&&($page!=$total_pages)){
            $pagination.="<div id=\"footer\"><a href=".$webpage."?tipo=" . $tipo . "&amp;page=".($page+1).">Next</a></div>";
        }
L'ultima cosa che mi domando è:
come mai mi si vedono uno sotto l'altro invece che uno a fianco all'altro?
il div footer ha il text-align:center; ma non dovrebbe essere per quello.
Me lo sapete spiegare?
Grazie a tutti per la pazienza dimostrata
:)
 
Discussioni simili
Autore Titolo Forum Risposte Data
F paginazione record di una query Classic ASP 5
W Problema eliminazione ultimo record da ultima pagina di crud con paginazione PHP 2
M Classe per paginazione record PHP 8
M query per paginazione record PHP 9
M paginazione record con lettere Classic ASP 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
elpirata [PHP] Paginazione dati estratti da una query con più condizioni PHP 17
X come modificare paginazione del tutorial PHP 0
MarcoGrazia Problema con bootstrap, saltata tutta la paginazione in IE8 HTML e CSS 1
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
D [risolto] Problemi di paginazione dei risultati con una determinata query Classic ASP 4
L paginazione testo senza troncare le parole PHP 3
L testare una paginazione "Creazione di 1000 dati random in una tabella" PHP 7
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
L Paginazione con pdo. PHP 8
G Paginazione php utilizzando le api di careerjet PHP 0
G Paginazione php utilizzando le api di careerjet WordPress 1
S paginazione PHP 2
L Paginazione file evitare di inserire questi \ o altro nella get PHP 1
K problemi con paginazione tabella PHP 7

Discussioni simili