problemi con la paginazione dei dati

Ciao ragazzi,

ho problemi con la paginazione, quando deve passare alla seconda pagina mi ripresenta il form

<?php   
   
   $errori = array();

   if (isset($_POST['invia'])) {
      if ($regioni == "") {
         $errori[0] = "il campo &egrave; necessario<br />";
      }
   
      if ($errori == FALSE) {

         //istruzioni sql

         include('connessione.php');

         // Escape dei campi del form 
         $regioni   = mysql_real_escape_string($_POST['regioni']); 
         $provincia = mysql_real_escape_string($_POST['provincia']);
         $struttura = mysql_real_escape_string($_POST['struttura']); 


         $condizioni_query = array(); 

         // Costruiamo le istruzioni SQl per selezionare i record desiderati, basandoci sulle checkbox selezionate 
         // Ogni servizio spuntato implicherà la ricerca dei record che hanno il relativo campo settato a 1 
         
         if (count($_POST['servizio'])) { 
           $function = create_function('$servizio', 'return "$servizio = 1";'); 
           $condizioni_query = array_map($function, $_POST['servizio']); 
         } 

         if ($regioni) 
            $condizioni_query[] = "regioneazienda = '$regioni'"; 

         if ($provincia != 'tutte') 
             $condizioni_query[] = "provincia = '$provincia'";

         if ($tipoazienda != 'tutte') 
             $condizioni_query[] = "tipoazienda = '$tipoazienda'";

         // Costruiamo la clausola WHERE solo se sono stati selezionati i campi di ricerca 
         if ($condizioni_query) 
             $clausola_where = 'WHERE '. implode(' AND ', $condizioni_query); 
            
         
         $max = 3; //amount of articles per page. change to what to want
         $p = $_GET['p'];

         if(empty($p)){
            $p = 1;
         }

         $limits = ($p - 1) * $max; 

         //view all the news articles in rows

         $sql = mysql_query("SELECT * FROM $table02 $clausola_where LIMIT ".$limits.",$max") or die(mysql_error());

         //the total rows in the table

         $totalres = mysql_result(mysql_query("SELECT COUNT(id) AS tot FROM scheda"),0);   

         //the total number of pages (calculated result), math stuff...

         $totalpages = ceil($totalres / $max); 


         if ($totalres == 0) {
            echo "La ricerca non ha prodotto nessun risultato";
         }else{

            while($r = mysql_fetch_array($sql)) {
               $id = $r['id'];
               $tipoazienda = $r['tipoazienda'];
               $nomeazienda = $r['nomeazienda'];
               echo "<a href='index.php?act=view&id=$id'>$nomeazienda</a><br />"; //view
            }

            for($i = 1; $i <= $totalpages; $i++){ 
               //this is the pagination link
               echo "<a href='index.php?p=$i'>$i</a> | ";
            }
         }
         
         
         
      }
   
   }else{
      $errori = TRUE;
   }

   if($errori == TRUE) {
   
   ?>
      <form method="POST" >
         Regioni:<select onchange=setCities(this) name="regioni">
            <option value="" selected="selected">Seleziona la sezione:</option>
            <option value="calabria">Calabria</option>
            <option value="sicilia">Sicilia</option>
            <option value="lombardia">Lombardia</option>
         </select><? echo $errori[0]; ?>
         <br />
         Provincia:<select name="provincia" class="contenuto">
            <option value="tutte" selected="selected">--------------</option>
         </select>
         <br /><br />
         Tipologia struttura:
         <select id="" name="tipoazienda">
            <option value="tutte" selected="selected">Tutte</option>
            <option value="agriturismo">Agriturismo</option>
            <option value="bedandbreakfast">Bed and Breakfast</option>
            <option value="hotel">Hotel</option>
         </select>
         <br /><br />
         Vini<input type="checkbox" name="servizio[]" value="vini" /><br />
         Ristorante<input type="checkbox" name="servizio[]" value="ristorante" /><br />
         equitazione<input type="checkbox" name="servizio[]" value="equitazione" /><br />
         parcheggio<input type="checkbox" name="servizio[]" value="parcheggio" /><br />
         internet<input type="checkbox" name="servizio[]" value="internet" /><br />
         <input type="submit" name="invia" value="Invia la richiesta" />
      </form>

   <?
      }
   ?>
inviato 7 anni fa
lorymacri
X 0 X

Nello script sembra che la decisione di mostrare il form o l'elenco dei risultati dipenda dalla riga:

if (isset($_POST['invia'])) {

che testa la presenza di $_POST['invia']. Il problema è che se clicchi sul link della pagina 2 allora non vi sarà alcun invio di form e quindi sicuramente $_POST['invia'] non esiste.

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

ciao gianni, come dovrei procedere allora?

grazie

lory

risposto 7 anni fa
lorymacri
X 0 X

prova con:

if (isset($_POST['invia']) || isset($_GET['p'])) {

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

nulla da fare gianni... sempre lo stesso!!!! :'(

risposto 7 anni fa
lorymacri
X 0 X

Ho notato che in testa allo script c'è:

if ($regioni == "") {

non si capisce però da dove provenga il contenuto di $regioni. Chi riempie questa variabile? Forse è la regione selezionata dall'utente? Allora hai il register_global ad on! Infatti in questo modo $regioni = $_POST['regioni']

Se è così allora è nomale che la seconda pagina richiesta, non avendo memorizzato la regione precedentemente selezionata, non possa funzionare.

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni,

si avevi ragione il register_global ad era su on, lo messo su off ma ora non funziona + la ricerca... :'( come proseguo?

risposto 7 anni fa
lorymacri
X 0 X

Secondo me dovresti riorganizzare lo script, ovvero dovresti distinguere la parte che si occupa di 1) recuperare i dati inseriti nel form dall'utente, 2) memorizzarli in sessione e 3) visualizzare la prima pagina di elenco, dalla parte che invece deve 1) recuperare dalla sessione i dati precedentemente inseriti dall'utente, 2) mostrare le pagine successive alla prima.

Infatti la visualizzazione delle pagine successive alla prima non ti funzionava perché continuavi a controllare il valore di $regione (che senza il register_global devi recuperare da $_POST['regione']) ma questo, essendo un valore proveniente dal form, è presente solo al primo invio del form e viene perso con le richieste alle pagine successive. Ecco perché ti dico che alcuni dati devono necessariamente essere memorizzati in sessione.

Comunque sul sito c'è un articolo sulla painazione:

http://www.phpnews.it/articoli/paginazione-dei-dati/

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

grazie gianni... sempre gentile...

vediamo se riesco a risistemarlo...

lory

risposto 7 anni fa
lorymacri
X 0 X

Ciao Gianni,

ho seguito il tuo consiglio e usato il tutorial da te indicato, concentrando il tutto in una sola pagina.

Ora lo script che ho fatto funziona a metà... ho il problema della paginazione che appare prima di iniziare la ricerca e non mi tira fuori "La ricerca non ha prodotto nessun risultato" se non sono presenti dati.

Probabilmente per tutto sbaglio la posizione della seconda parte dello script

<?php

function crea_url($url_base, $pagina) {
    if(strpos($url_base,'?') === false) {
        return $url_base . '?pag=' . $pagina;
    } else {
        return $url_base . '&amp;pag=' . $pagina;
    }
}

function crea_link($url_base, $pagina_corrente, $numero_pagina) {
    if($pagina_corrente == $numero_pagina) {
        return "[$numero_pagina]";
    } else {
        return '<a href="' . crea_url($url_base, $numero_pagina) . '">' . $numero_pagina . '</a>';
    }
}

// funzione che crea i link alle pagine dei risultati
function paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine) {
    $link_paginazione = "Pagine: ";
  
    // link alla pagina precedente
    if($pagina_corrente != 1) {
        $link_paginazione .= '<a href="' . crea_url($url_base, $pagina_corrente - 1) . '">&laquo;</a> ';
    }
  
    // mostriamo sempre il link alla prima pagina
    $link_paginazione .= crea_link($url_base, $pagina_corrente, 1);
  
    // se il prossimo link non è alla seconda pagina aggiungo dei puntini ...
    // oppure la sola pagina mancante
    if($pagina_corrente - $pagine_vicine > 2) {
        if($pagina_corrente - $pagine_vicine == 3) {
            $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, 2);
        } else {
            $link_paginazione .= " ... ";
        }
    }
  
    // creo i link alla pagina corrente ed a quelle ad essa vicine
    for($i = $pagina_corrente - $pagine_vicine; $i <= $pagina_corrente + $pagine_vicine; $i++) {
         // se tra quelle vicine c'è la prima pagina (già riportata)
        if($i < 2) continue;
      
         // se tra quelle vicine c'è l'ultima pagina (che mostrerò con le prossime istruzioni)
        if($i > $tot_pagine - 1) continue;
      
        $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $i);
    }
  
    // se il precedente link non era alla penultima pagina aggiungo dei puntini ...
    // oppure la sola pagina mancante
    if($pagina_corrente + $pagine_vicine < $tot_pagine - 1) {
        if($pagina_corrente + $pagine_vicine == $tot_pagine - 2) {
            $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $tot_pagine - 1) . " ";
        } else {
            $link_paginazione .= " ... ";
        }
    }
  
    // mostriamo il link all'ultima pagina se questa non coincide con la prima
    if($tot_pagine != 1) {
        $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $tot_pagine);
    }
  
    // link alla pagina successiva
    if($pagina_corrente != $tot_pagine) {
        $link_paginazione .= ' <a href="' . crea_url($url_base, $pagina_corrente + 1) . '">&raquo;</a>';
    }
  
    return $link_paginazione;
}

//--------------------------------------------------------------------
//                    SCRIPT PAGINAZIONE DATI 

$DB_host     = 'localhost';
$DB_user     = 'root';
$DB_password = '';
$DB_name     = 'test2';

$righe_per_pagina = 3;
$url_base = "index.php";
$pagine_vicine = 1;

// ----------------------------------------------------------------
//         C O N N E S S I O N E   A L   D A T A B A S E

$link = mysql_connect($DB_host, $DB_user, $DB_password);
if (!$link) {
    die ('Non riesco a connettermi: ' . mysql_error());
}

$db_selected = mysql_select_db($DB_name, $link);
if (!$db_selected) {
    die ("Errore nella selezione del database: " . mysql_error());
}

// ----------------------------------------------------------------
//    C A L C O L O   D E L   N U M E R O   D I   P A G I N E
 
// ricavo il numero totale di record
$query = "SELECT COUNT(*) FROM scheda";
$result = mysql_query($query);
// record complessivi
$tot_righe = mysql_result($result,0);
// totale pagine
$tot_pagine = ceil($tot_righe / $righe_per_pagina);

// ----------------------------------------------------------------
//                 P A G I N A   C O R R E N T E

$pagina_corrente = isset($_GET['pag']) ? (int)$_GET['pag'] : 1;

// se la pagina corrente è minore di 1
if($pagina_corrente < 1)  {
    header('location: ' . $url_base);
    exit();
}

// se la pagina corrente è maggiore dell'ultima pagina
if($pagina_corrente > $tot_pagine) {
    header('location: ' . crea_url($url_base, $tot_pagine));
    exit();
}

// ----------------------------------------------------------------
//            E S T R A Z I O N E   D E I   R E C O R D

// calcolo la prima riga da estrarre con la query
$prima_riga = ($pagina_corrente - 1) * $righe_per_pagina;

session_start();

if(isset($_GET["regioni"])){
   $_SESSION['regioni']=$_GET["regioni"];
}


$query = "SELECT * FROM scheda WHERE regione = '{$_SESSION['regioni']}' LIMIT $prima_riga, $righe_per_pagina";

$result = mysql_query($query);
if (!$result) {
    die("Errore nella query $query: " . mysql_error());
}

$elenco_comuni = array();
while ($row = mysql_fetch_assoc($result)) {
    $elenco_comuni[] = $row;
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Elenco Comuni Italiani</title>
</head>
<body>


<form action="index.php" method="GET">
   Regioni: <input type="text" id="regioni" name="regioni" />
   <input type="submit" id="cerca" name="cerca" value="Cerca"/>
</form>



<?php

if ($tot_pagine == 0) 
{
   echo "La ricerca non ha prodotto nessun risultato";
}
else
{
   foreach($elenco_comuni as $riga)      //while($r = mysql_fetch_array($data)) {
   {
      echo  $riga['struttura'];
   }

   // creazione dei link di paginazione
      $link_paginazione = paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine); 
      //this is the pagination link
      echo "echo $link_paginazione";
      
}

?>


</body>
</html>

Lory

risposto 7 anni fa
lorymacri
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda