problemi con paginazione tabella

  • Creatore Discussione Creatore Discussione karlo
  • Data di inizio Data di inizio

karlo

Nuovo Utente
20 Gen 2013
20
0
0
Salve a tutti
Ho una pagina php che estrae i dati da un database e li visualizza su una tabella filtrandoli con dei parametri inseriti dall'utente. Tutto funziona correttamente. Sucessivamente ho inserito del codice per paginare i risultati della query, ma nonostante i collegamenti vengono creati e visualizzati correttamente non mi viene mostrato il risultato corretto.
In pratica succede questo.
ES. :
* l'utente insrisce i parametri di ricerca
* la query estrae i dati e i primi 10 vengono stampati nella tabella
* viene creato il collegamento alle pagine rimanenti. es: 1 2 3
* Se clicco sul due la tabella scompare e per vedere i risultati selezionati (dal 11 al 20) devo cliccare sul submit "Cerca"
Questo il codice della pagina
PHP:
<?php 

	include 'header.php';
	
?>
<div id="wrapper1">

    <?php 

	if(!isset($_POST['cerca'])){ ?>	

            <form method="post" action="#" id="formcerca">
			
			            <ul>
					     
                        <li>
					    <label for="isbn">ISBN del libro.</label>
				        <input type="number" name="isbn" id="isbn" value=""/>
				    	 </li>
						 <li>
					    <label for="testo">Parola contenuta nel titolo del libro.</label>
				        <input type="text" name="testo" id="testo" />
				    	 </li>
						<br>
					    <input type="submit" name="cerca" id="cerca" value="Cerca" />
			            </ul>

            </form>
			
				 <div id="divinfo">	
	     <center><img src="Immagini/info.jpeg" style=pos/></center>
	     <h5>
         <p>Per la ricerca di un testo di tuo interesse puoi usare tutto o parte del codice ISBN e/o titolo del libro.</p>
         </h5>
	  
         </div>		

      <?php } else {
	         
	             $isbn = mysql_real_escape_string($_POST['isbn']);
				 $testo = mysql_real_escape_string($_POST['testo']);
				
		 ?>		 
	

             <form method="post" action="#" id="formcerca">
			
			            <ul>
					     
                        <li>
					    <label for="isbn">ISBN del libro.</label>
				        <input type="number" name="isbn" id="isbn" value="" />
				    	 </li>
						 <li>
					    <label for="testo">Parola contenuta nel titolo del libro.</label>
				        <input type="text" name="testo" id="testo" />
				    	 </li>
						<br>
					    <input type="submit" name="cerca" id="cerca" value="Cerca" />
			            </ul>

            </form>
		
					 <div id="divinfo">	
	     <center><img src="Immagini/info.jpeg" style=pos/></center>
	     <h5>
         <p>Per la ricerca di un testo di tuo interesse puoi usare tutto o parte del codice ISBN e/o titolo del libro.</p>
		 <p>Usa il link sulla colonna "Contatti" della tabella sottostante per inviare una email al venditore. </p>
         </h5>
	  
         </div>		
	
         </div>
         <?php echo "<p1></p1>";?>
          <div id="table" class="tabella">
	
	    <?php 
	               
				    $cerca = mysql_query("SELECT * FROM libri WHERE isbn LIKE '%$isbn%' AND titolo LIKE '%$testo%'");
					$contacerca= mysql_num_rows($cerca);
					
					//inizio codice paginazione.Il codice paginazione è stato aggiunto per inserire la paginazione della tabella
					// per ripristinare eliminare tutto codice paginazione
					$per_pagina = 10 ;
					$tot_pagine=ceil($contacerca / $per_pagina);
					//pausa codice paginazione e continua codice originale
					
				    if($contacerca > 0){
					echo "<p1> <h3>Sono stati trovati <strong>".$contacerca."</strong> libri in vendita.</h3></p1>";
					
					//continua codice paginazione
					//pagina corrente
					if (isset($_GET['idpag'])){
					   $idpag=$_GET['idpag'];
					}  else {
					   $idpag = 1 ;
					   }
					//calcolo numero iniziale e finale che andranno a limitare la query
                    if($idpag == 1){
					   $inizio = 0 ;
					 } else {
                       $inizio = ($idpag * $per_pagina) - $per_pagina;
					   }
					// ripeto query con limitazioni record
					$result=mysql_query("SELECT * FROM libri WHERE isbn LIKE '%$isbn%' AND titolo LIKE '%$testo%' LIMIT $inizio, $per_pagina");
					
					//pausa codice paginazione e continua codice originale
					?> 
					

					
					<table id="table">
					<tr>
					  <TH colspan="8" scope="colgroup" align="center">Elenco dei libri corrispondenti alla tua ricerca.</TH>
					</tr>
                      <tr align="center">
					  
                      <td><b>ISBN</b></td>
                      <td><b>Titolo</b></td>
					  <td><b>Autore</b></td>
					  <td><b>Editore</b></td>
					  <td><b>Prezzo Copertina</b></td>
					  <td><b>Prezzo Richiesto</b></td>
					  <td><b>Stato</b></td>
					  <td><b>Contatti</b></td>
					 
					  </tr>
					 
                    <?php
					 
					 while($row=mysql_fetch_assoc($result)){ // sostituire $result con $cerca per ripristinare modifiche paginazione
					 ?>
				     <tr align="center" >
					
                     <td><?php echo $row['isbn']?></td>
                     <td><?php echo $row['titolo']?></td>
					 <td><?php echo $row['autore']?></td>
					 <td><?php echo $row['editore']?></td>
					 <td><?php echo $row['prezzo_cop']?></td>
					 <td><?php echo $row['prezzo_ric']?></td>
					 <td><?php echo $row['stato']?></td>
					 <!--<?php $id=$row['id'] ?>-->
					
					 <td><a href= "email.php?cod=<?php echo $id?>">Contatta il venditore</a></td>
					 </tr>
                   
                    
				     <?php }} else {
					
					 
                     echo "Attualmente non risulta inserito nessun libro corrispondente ai tuoi criteri di ricerca. ";
					
					 exit();
			       	}
				 
	                ?>
	

              </div> <!--fine div tabella-->
          
					  <!-- inizio codice paginazione-->	 
			        <div style="float: right;">
		
        	         <?php
		            if($idpag>1){?>
		        	<span style="text-decoration: underline; margin-right: 10px"><a href="?idpag=<?php echo ($idpag-1);?>"><</a></span>
		            <?php }else{?>
		         	<span><</span>
	            	<?php }
        
		            $i=1;
	            	do{
		
		        	//Link per scorrere le pagine: la pagina corrente ha un aspetto diverso
		        	if($i==$idpag){?>
			    	<span style="text-decoration: none; font-weight: bold; margin-right: 10px"><a href="?idpag=<?php echo $i;?>"><?php echo $i;?></a></span>
			        <?php }else{?>
				    <span style="text-decoration: underline; margin-right: 10px"><a href="?idpag=<?php echo $i;?>"><?php echo $i;?></a></span>
			         <?php }
		        	$i++;

		            }while($i<=$tot_pagine);
		
		            if($idpag<$tot_pagine){?>
		           	<span style="text-decoration: underline; margin-right: 10px"><a href="?idpag=<?php echo ($idpag+1);?>">></a></span>
		            <?php }else{?>
			        <span>></span>
		            <?php }?>
		
		            </div>

		
		

                    <!--fine codice paginazione-->
			
		<?php
		}
        ?>			
    




</body>
</html>

Perche non mi funziona? Qualcuno può darmi qualche dritta?
Grazie a tutti per la pazienza
Carlo
 
ciao, il tuo problema è qui
PHP:
<?php if (!isset($_POST['cerca'])) { ?>
quando clicchi sul numero della pagina ti perdi il POST
potresti risolvere passando anche i dati di ricerca in GET e cambiando la prima if cosi
PHP:
<?php if (!isset($_POST['cerca']) && !isset($_GET)) { ?>
oppure modificando i numeri di navigazione in tanti piccoli form
HTML:
<form method='post'>
<input type='hidden' name='isbn' value='$isbn'/>
<input type='hidden' name='testo' value='$testo'/>
<input type='button' name='idpag' value='$i'/>
</form>
nel codice ci sono dgli errori di sintassi :
non chiudi la table e questa sintassi è errata (<img src="Immagini/info.jpeg" style=pos/>)
 
Grazie criric per la risposta e per le segnalazioni agli errori di sintassi.
Ho provato con il primo metodo suggerito ma mi ritorna due notice:

Notice: Undefined index: isbn in C:\xampp\htdocs\Sito_scambio_libri\cerca.php on line 41

Notice: Undefined index: testo in C:\xampp\htdocs\Sito_scambio_libri\cerca.php on line 42

che scompaiono appena clicco sul submit.
Inoltre mi stampa sulla tabella i risultati della prima query appena apro la pagina. Comunque i link di navigazione funzionano.
La seconda soluzione non l'ho capita.
Ti ringrazio ancora per le possibili soluzioni.
 
Grazie criric per la risposta e per le segnalazioni agli errori di sintassi.
Ho provato con il primo metodo suggerito ma mi ritorna due notice:

Notice: Undefined index: isbn in C:\xampp\htdocs\Sito_scambio_libri\cerca.php on line 41

Notice: Undefined index: testo in C:\xampp\htdocs\Sito_scambio_libri\cerca.php on line 42

che scompaiono appena clicco sul submit.
Inoltre mi stampa sulla tabella i risultati della prima query appena apro la pagina. Comunque i link di navigazione funzionano.
La seconda soluzione non l'ho capita.
Ti ringrazio ancora per le possibili soluzioni.
Scusate
le rige 41 e42 sono queste:
PHP:
  $isbn = mysql_real_escape_string($_POST['isbn'];
  $testo = mysql_real_escape_string($_POST['testo']);
 
in effetti la condizioni che ti ho postato non era corretta ho provato a invertire il form e metterlo nell'else
èrova cosi dovrebbe funzionare
PHP:
<?php
include 'header.php';
?>
<div id="wrapper1">
    <?php
    if (isset($_POST['cerca']) || isset($_GET['i'])) {
        if (isset($_POST['cerca'])) {
            $isbn = mysql_real_escape_string($_POST['isbn']);
            $testo = mysql_real_escape_string($_POST['testo']);
        } else {

            $isbn = mysql_real_escape_string($_GET['i']);
            $testo = mysql_real_escape_string($_GET['t']);
        }
        ?>
        <form method="post" action="#" id="formcerca">
            <ul>
                <li>
                    <label for="isbn">ISBN del libro.</label>
                    <input type="number" name="isbn" id="isbn" value="" />
                </li>
                <li>
                    <label for="testo">Parola contenuta nel titolo del libro.</label>
                    <input type="text" name="testo" id="testo" />
                </li>
                <br>
                <input type="submit" name="cerca" id="cerca" value="Cerca" />
            </ul>
        </form>
        <div id="divinfo">    
            <center><img src="Immagini/info.jpeg"/></center>
            <h5>
                <p>Per la ricerca di un testo di tuo interesse puoi usare tutto o parte del codice ISBN e/o titolo del libro.</p>
                <p>Usa il link sulla colonna "Contatti" della tabella sottostante per inviare una email al venditore. </p>
            </h5>
        </div> 
    </div>
    <?php echo "<p1></p1>"; ?>
    <div id="table" class="tabella">
        <?php
        $cerca = mysql_query("SELECT * FROM libri WHERE isbn LIKE '%$isbn%' AND titolo LIKE '%$testo%'");
        $contacerca = mysql_num_rows($cerca);
        if (!$cerca)
            echo mysql_error();
        //inizio codice paginazione.Il codice paginazione è stato aggiunto per inserire la paginazione della tabella
        // per ripristinare eliminare tutto codice paginazione
        $per_pagina = 10;
        $tot_pagine = ceil($contacerca / $per_pagina);
        //pausa codice paginazione e continua codice originale
        if ($contacerca > 0) {
            echo "<p1> <h3>Sono stati trovati <strong>" . $contacerca . "</strong> libri in vendita.</h3></p1>";
            //continua codice paginazione
            //pagina corrente
            if (isset($_GET['idpag'])) {
                $idpag = $_GET['idpag'];
            } else {
                $idpag = 1;
            }
            //calcolo numero iniziale e finale che andranno a limitare la query
            if ($idpag == 1) {
                $inizio = 0;
            } else {
                $inizio = ($idpag * $per_pagina) - $per_pagina;
            }
            // ripeto query con limitazioni record
            $cerca = mysql_query("SELECT * FROM libri WHERE isbn LIKE '%$isbn%' AND titolo LIKE '%$testo%'");
            //pausa codice paginazione e continua codice originale
            ?> 
            <table id="table">
                <tr>
                    <TH colspan="8" scope="colgroup" align="center">Elenco dei libri corrispondenti alla tua ricerca.</TH>
                </tr>
                <tr align="center">
                    <td><b>ISBN</b></td>
                    <td><b>Titolo</b></td>
                    <td><b>Autore</b></td>
                    <td><b>Editore</b></td>
                    <td><b>Prezzo Copertina</b></td>
                    <td><b>Prezzo Richiesto</b></td>
                    <td><b>Stato</b></td>
                    <td><b>Contatti</b></td>
                </tr>
                <?php
                while ($row = mysql_fetch_assoc($result)) { // sostituire $result con $cerca per ripristinare modifiche paginazione
                    ?>
                    <tr align="center" >
                        <td><?php echo $row['isbn'] ?></td>
                        <td><?php echo $row['titolo'] ?></td>
                        <td><?php echo $row['autore'] ?></td>
                        <td><?php echo $row['editore'] ?></td>
                        <td><?php echo $row['prezzo_cop'] ?></td>
                        <td><?php echo $row['prezzo_ric'] ?></td>
                        <td><?php echo $row['stato'] ?></td>
                        <!--<?php $id = $row['id'] ?>--> 
                        <td><a href= "email.php?cod=<?php echo $id ?>">Contatta il venditore</a></td>
                    </tr>
                    <?php
                }
                ?>
            </table>
            <?php
        } else {
            echo "Attualmente non risulta inserito nessun libro corrispondente ai tuoi criteri di ricerca. ";
            exit();
        }
        ?>
    </div> <!--fine div tabella-->
    <!-- inizio codice paginazione-->     
    <div style="float: right;">
        <?php if ($idpag > 1) { ?>
            <span style="text-decoration: underline; margin-right: 10px"><a href="i=<?php echo $isbn ?>&t=<?php echo $testo ?>&?idpag=<?php echo ($idpag - 1); ?>"><</a></span>
        <?php } else { ?>
            <span><</span>
            <?php
        }
        $i = 1;
        do {
            //Link per scorrere le pagine: la pagina corrente ha un aspetto diverso
            if ($i == $idpag) {
                ?>
                <span style="text-decoration: none; font-weight: bold; margin-right: 10px">
                    <a href="?idpag=<?php echo $i; ?>"><?php echo $i; ?></a></span>
            <?php } else { ?>
                <span style="text-decoration: underline; margin-right: 10px"><a href="?i=<?php echo $isbn ?>&t=<?php echo $testo ?>&idpag=<?php echo $i; ?>"><?php echo $i; ?></a></span>
                <?php
            }
            $i++;
        } while ($i <= $tot_pagine);
        if ($idpag < $tot_pagine) {
            ?>
            <span style="text-decoration: underline; margin-right: 10px"><a href="?i=<?php echo $isbn ?>&t=<?php echo $testo ?>&idpag=<?php echo ($idpag + 1); ?>">></a></span>
        <?php } else { ?>
            <span>></span>
        <?php } ?>
    </div>
    <!--fine codice paginazione-->
    <?php
} else {
    ?>
    <form method="post" action="#" id="formcerca">
        <ul>
            <li>
                <label for="isbn">ISBN del libro.</label>
                <input type="number" name="isbn" id="isbn" value=""/>
            </li>
            <li>
                <label for="testo">Parola contenuta nel titolo del libro.</label>
                <input type="text" name="testo" id="testo" />
            </li>
            <br>
            <input type="submit" name="cerca" id="cerca" value="Cerca" />
        </ul>
    </form>
    <div id="divinfo">    
        <center><img src="Immagini/info.jpeg"/></center>
        <h5>
            <p>Per la ricerca di un testo di tuo interesse puoi usare tutto o parte del codice ISBN e/o titolo del libro.</p>
        </h5>
    </div>  
    <?php
}
?>         
</body>
</html>
visto che il form lo mostri in ogni caso ti converrebbe scriverlo una volta sola fuori dalle condizioni
 
Non vorrei aprofittare troppo della tua disponibilità ma adesso non vengono visualizzati i link della navigazione.
Io ha solo sostituito $result con $cerca perchè giustamente mi dava errore.
PHP:
while ($row = mysql_fetch_assoc($result))
Se mi puoi aiutare ancora, grazie infinite.
 
a me in locale funzionava
avevo solo modificato la query per interrogare una mia tabella
hai scoperto l'inghippo?
 
Ciao criric
Scusa se ti rispondo solo ora ma ho voluto testare meglio il codice e non ho avuto troppo tempo in questi giorni.
Avevi ragione tu, funziona tutto bene, ho sistemato solo alcune cosette. Oro non mi funziona il link che fa tornare indietro di una pagina "<" , provo a vedere cos'è che no va e casomai chiedo aiuto ancora.
Grazie di tutto.
Carlo
 

Discussioni simili