capire un paio di cose su questo codice

patriziou

Utente Attivo
12 Lug 2011
79
0
0
Domanda editata per errore, scusa per il disagio Patriziu, se vuoi puoi ripostare qui stesso.
 
Ultima modifica di un moderatore:
ciao
non è che i dati si postino, esempio tu hai 50 record, avendo messo 10 record per pagina quando accedi ti visualizza i primi 10 record, se clicchi su un numero di pag o su pag avanti ti mostra i successivi 10 e così via da pag 1 a 5 avanti indietro
 
e allora per una cosa del genere come devo fare? mica con il codice che mi trovo dopo come dovrò fare appena aggiunti 10 dati per l' undicesimo che dovrò fare per far spostare il dato 1 alla seconda pagina?
 
e allora per una cosa del genere come devo fare? mica con il codice che mi trovo dopo come dovrò fare appena aggiunti 10 dati per l' undicesimo che dovrò fare per far spostare il dato 1 alla seconda pagina?
Se ricordo bene il codice, in realtà la pagina è una sola, quella dove lo inserisci la prima volta, poi sarà lo script a suddividere i records visualizzandone (se sono 11) 10 a pag. 1 e 1 a pag. 2.
 
okkei ma dato che nel codice dice
PHP:
// Creo una variabile dove imposto il numero di record 
// da mostrare in ogni pagina
$x_pag = 10;

// Recupero il numero di pagina corrente.
// Generalmente si utilizza una querystring
$pag = $_GET['pag'];

// Controllo se $pag è valorizzato...
// ...in caso contrario gli assegno valore 1
if (!$pag) $pag = 1; 

// Mi connetto al database
$conn = mysql_connect("localhost","admin","admin1");
mysql_select_db("my_crashgiochi", $conn);

// Uso mysql_num_rows per contare le righe presenti
// all'interno della tabella agenda
$all_rows = mysql_num_rows(mysql_query("SELECT id FROM giochi"));

// Tramite una semplice operazione matematica definisco
// il numero totale di pagine
$all_pages = ceil($all_rows / $x_pag);

// Calcolo da quale record iniziare
$first = ($pag - 1) * $x_pag;

// Recupero i record per la pagina corrente...
// utilizzando LIMIT per partire da $first e contare fino a $x_pag
$rs = mysql_query("SELECT * FROM giochi ORDER BY id DESC LIMIT $first, $x_pag") or die(mysql_error());
$nr = mysql_num_rows($rs);
if ($nr != 0){
  for($x = 0; $x < $nr; $x++){
    $row = mysql_fetch_assoc($rs);
	$immagine = $row['immagine'];
    echo "<p><table><tr>";
    echo "<td width=\"300\"><a href='".$row['url']."'>" . $row['nome'] . "</a></td>";	
	echo "<td width=\"312\">";
	echo "<div align=\"right\">".$row['data_ins']."</div>";
	echo "</td>";
	echo"</tr></table>";
    echo "<table><tr>";
    echo "<td width=\"100\" border=\"0\" height=\"100\"><img src=\"$immagine\"></td>";
	echo "<td width=\"512\" border=\"0\" height=\"100\">" . $row['testo'] . "</td>";
    echo "</tr></table></p>";
  }
}else{
  echo "Nessun record trovato!";
}

// Se le pagine totali sono pi&ugrave; di 1...
// stampo i link per andare avanti e indietro tra le diverse pagine!
if ($all_pages > 1){
  if ($pag > 1){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag - 1) . "\">";
    echo "Pagina Indietro</a>&nbsp;";
  } 
  if ($all_pages > $pag){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag + 1) . "\">";
    echo "Pagina Avanti</a>";
  } 
}

// Chiudo la connessione ad DB
mysql_close($conn);
$pag = $_GET['pag'];
dice che richiama la pagina con un metodo get io dovrò fare nel database un record di niome pagina? se sì con quali dati?
 
ciao
no, non devi (dovresti se funzia) fare altro.
il get va a modificare il numero di inizio dei record da nodificare.
es. se sei su pag 1 l'inizio e 1 con u segenti 10 record (1,2,...10). cliccando su due l'inizio devienta 11 con i successivi 10 (11,12,...) e così via.
cioe la pagina è sempre la stessa, quello che cambia e il numero di partenza dei record
 
ciao
se vuoi fare una prova senza scrivere molti record (es max 5) modifica la variabile
$x_pag = 10;

in
$x_pag = 2;
se come detto hai 5 record dovresti vederli suddivisi in tre schermate (a due a due).
se vuoi vedere qualcosa di funzionante puoi dare un occhio a
http:// www. borgo-italia. it /foto_dautore/foto_autore.php
(togli gli spazi che ho messo)
in alto sotto il logo vedi il numero delle pagine, cliccando su un numero passi ad un altra, ma se guardi l'indirizzo visualizzato vedrai che non cambia (la pagina è sempre la stessa)
 
è vero non bisognava cambiare niente anche se io da questo codice :
PHP:
   <?
// Creo una variabile dove imposto il numero di record 
// da mostrare in ogni pagina
$x_pag = 10;

// Recupero il numero di pagina corrente.
// Generalmente si utilizza una querystring
$pag = $_GET['pag'];

// Controllo se $pag &egrave; valorizzato...
// ...in caso contrario gli assegno valore 1
if (!$pag) $pag = 1; 

// Mi connetto al database
$conn = mysql_connect("localhost","crashgiochi","fikbasisnu91");
mysql_select_db("my_crashgiochi", $conn);

// Uso mysql_num_rows per contare le righe presenti
// all'interno della tabella agenda
$all_rows = mysql_num_rows(mysql_query("SELECT id FROM giochi_sparatutto"));

// Tramite una semplice operazione matematica definisco
// il numero totale di pagine
$all_pages = ceil($all_rows / $x_pag);

// Calcolo da quale record iniziare
$first = ($pag - 1) * $x_pag;

// Recupero i record per la pagina corrente...
// utilizzando LIMIT per partire da $first e contare fino a $x_pag
$rs = mysql_query("SELECT * FROM giochi_sparatutto ORDER BY id DESC LIMIT $first, $x_pag") or die(mysql_error());
$nr = mysql_num_rows($rs);
if ($nr != 0){
  for($x = 0; $x < $nr; $x++){
    $row = mysql_fetch_assoc($rs);
	$immagine = $row['immagine'];
     echo "<p><table><tr>";
    echo "<td width=\"300\"><a href='".$row['url']."'>" . $row['nome'] . "</a></td>";	
	echo "<td width=\"312\">";
	echo "<div align=\"right\">".$row['data_ins']."</div>";
	echo "</td>";
	echo"</tr></table>";
    echo "<table><tr>";
    echo "<td width=\"100\" border=\"0\" height=\"100\"><img src=\"$immagine\"></td>";
	echo "<td width=\"512\" border=\"0\" height=\"100\">" . $row['testo'] . "</td>";
    echo "</tr></table></p>";
  }
}else{
  echo "Nessun record trovato!";
}

// Se le pagine totali sono pi&ugrave; di 1...
// stampo i link per andare avanti e indietro tra le diverse pagine!
if ($all_pages > 1){
  if ($pag > 1){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag - 1) . "\">";
    echo "Pagina Indietro</a>&nbsp;";
  } 
  if ($all_pages > $pag){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag + 1) . "\">";
    echo "Pagina Avanti</a>";
  } 
}

// Chiudo la connessione ad DB
mysql_close($conn);
?>
ho tolto:
PHP:
if ($all_pages > 1){
  if ($pag > 1){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag - 1) . "\">";
    echo "Pagina Indietro</a>&nbsp;";
  } 
  if ($all_pages > $pag){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag + 1) . "\">";
    echo "Pagina Avanti</a>";
  } 
}
e ho messo questa funzione per far vedere quello che si vede nell' ultimo commento :
PHP:
function pagination_3($all_pages,$page,$webpage){ //imposto la mia $webpage come parametro formale
        
$pagination = ""; 
    if($all_pages!=1){ 
        if($pag>'1') 
            { 
          $pagination.="<a href=".$webpage."?page=1><small>prima</small></a> 
                                 <a href=".$webpage."?page=".($pag-1).">Prev</a>"; 
            } 

       
           if($all_pages<=$x_pag) 
            { 
               //Il numero massimo di links che occorreranno saranno pari al numero totale di pagine + 1 
                $x_pag = $all_pages+1; 
            } 
            
           else{ 
                  
                $x_pag=$x_pag+1; 
                   if($pag>=$x_pag){ 
                      $x_pag=$pag+1; 
                    } 
              } 

        for ($i=1;$i<$x_pag;$i++) 
               { 

                   if($i==$pag){ 
                $pagination.="<a>".$i."</a>"; 
            } 

            else{ 
                $pagination.= "<a href=".$webpage."?pag=".$i.">".$i."</a>"; 
                        } 
        } 

            //next e ultima pagina; 

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

    } 
    else{ 
        $pagination.=""; 
    } 
    return($pagination); 

} 

//il risultato di questa paginazione è il seguente :
//prima PREV 1 2 3 4 5 6 7 8 9 10 Next ultima
ma nn mi funziona non esce niente sotto alla pagina di questo //prima PREV 1 2 3 4 5 6 7 8 9 10 Next ultima qualè l' errore?
 
ecco:
PHP:
    <?
// Creo una variabile dove imposto il numero di record 
// da mostrare in ogni pagina
$x_pag = 10;

// Recupero il numero di pagina corrente.
// Generalmente si utilizza una querystring
$pag = $_GET['pag'];

// Controllo se $pag &egrave; valorizzato...
// ...in caso contrario gli assegno valore 1
if (!$pag) $pag = 1; 

// Mi connetto al database
$conn = mysql_connect("localhost","crashgiochi","fikbasisnu91");
mysql_select_db("my_crashgiochi", $conn);

// Uso mysql_num_rows per contare le righe presenti
// all'interno della tabella agenda
$all_rows = mysql_num_rows(mysql_query("SELECT id FROM giochi"));

// Tramite una semplice operazione matematica definisco
// il numero totale di pagine
$all_pages = ceil($all_rows / $x_pag);

// Calcolo da quale record iniziare
$first = ($pag - 1) * $x_pag;

// Recupero i record per la pagina corrente...
// utilizzando LIMIT per partire da $first e contare fino a $x_pag
$rs = mysql_query("SELECT * FROM giochi ORDER BY id DESC LIMIT $first, $x_pag") or die(mysql_error());
$nr = mysql_num_rows($rs);
if ($nr != 0){
  for($x = 0; $x < $nr; $x++){
    $row = mysql_fetch_assoc($rs);
	$immagine = $row['immagine'];
    echo "<p><table><tr>";
    echo "<td width=\"300\"><a href='".$row['url']."'>" . $row['nome'] . "</a></td>";	
	echo "<td width=\"312\">";
	echo "<div align=\"right\">".$row['data_ins']."</div>";
	echo "</td>";
	echo"</tr></table>";
    echo "<table><tr>";
    echo "<td width=\"100\" border=\"0\" height=\"100\"><img src=\"$immagine\"></td>";
	echo "<td width=\"512\" border=\"0\" height=\"100\">" . $row['testo'] . "</td>";
    echo "</tr></table></p>";
  }
}else{
  echo "Nessun record trovato!";
}

// Se le pagine totali sono pi&ugrave; di 1...
// stampo i link per andare avanti e indietro tra le diverse pagine!
function pagination_3($all_pages,$page,$webpage){ //imposto la mia $webpage come parametro formale
        
$pagination = ""; 
    if($all_pages!=1){ 
        if($pag>'1') 
            { 
          $pagination.="<a href=".$webpage."?page=1><small>prima</small></a> 
                                 <a href=".$webpage."?page=".($pag-1).">Prev</a>"; 
            } 

    
            
         
           if($all_pages<=$x_pag) 
            { 
              
                $x_pag = $all_pages+1; 
            } 
           
           else{ 
                 
                $x_pag=$x_pag+1; 
                   if($pag>=$x_pag){ 
                      $x_pag=$pag+1; 
                    } 
              } 

        for ($i=1;$i<$x_pag;$i++) 
               { 

                   if($i==$pag){ 
                $pagination.="<a>".$i."</a>"; 
            } 

            else{ 
                $pagination.= "<a href=".$webpage."?pag=".$i.">".$i."</a>"; 
                        } 
        } 

     

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

    } 
    else{ 
        $pagination.=""; 
    } 
    return($pagination); 

} 

//il risultato di questa paginazione è il seguente :
//prima PREV 1 2 3 4 5 6 7 8 9 10 Next ultima 


mysql_close($conn);
?>
 
il codice funziona ma nn si vedono i numeri questo è il problema ho provato a richiamare la funzione ma nn riesco a capire dove metterla ho ftt varie prove ma nn va
 
ciao
hai fatto un po' di casino nella function, ti conviene prima studiare come dichiararle e SOPRATTUTTO capire come agiscono le variabili interne rispetto alle esterne e viceversa.
comunque se non metti un echo la function (così come è anche se funzionasse) non ti stampa nulla.
vado a ricercarmi il metodo di impaginazione e poi ti so dire
 
ciao
se non erro stai usando il metodo descritto nell'articolo
https://www.mrw.it/php/articoli/paginazione-dati-estratti-db-mysql_455.html
è un po' vecchiotto, ti consiglio di seguire questo:
https://www.mrw.it/php/articoli/gestire-paginazione-records-mysql-classe-php_816.html

sembra più complesso, ma non è così.
lo script si divide in due parti:

1. classe per la paginazione (che trovi nella pag 1 dell'articolo), la copi così come è e la salvi in un file chiamato
paginazione.php
se vuoi la puoi mettere in una cartella a parte (però ricordati quando richiami il file dei percorsi)

2. la seconda (pag 2) è la parte di visualizzazione dei dati e la salvi in un file chiamalo_come_ti_pare.php
modifica solo i valori del db per la connessione e i nomi delle tabelle e/o campi nelle query
modifica inoltre l'istruzione
@require("paginazione.php");
in
require_once"paginazione.php";
e togli tutte le @ (soprattutto mentre fai le prove)
 
okkei ma quel codice lo devo sostituire a tutto questo:
PHP:
<?
// Creo una variabile dove imposto il numero di record 
// da mostrare in ogni pagina
$x_pag = 10;

// Recupero il numero di pagina corrente.
// Generalmente si utilizza una querystring
$pag = $_GET['pag'];

// Controllo se $pag &egrave; valorizzato...
// ...in caso contrario gli assegno valore 1
if (!$pag) $pag = 1; 

// Mi connetto al database
$conn = mysql_connect("localhost","","");
mysql_select_db("my_crashgiochi", $conn);

// Uso mysql_num_rows per contare le righe presenti
// all'interno della tabella agenda
$all_rows = mysql_num_rows(mysql_query("SELECT id FROM giochi"));

// Tramite una semplice operazione matematica definisco
// il numero totale di pagine
$all_pages = ceil($all_rows / $x_pag);

// Calcolo da quale record iniziare
$first = ($pag - 1) * $x_pag;

// Recupero i record per la pagina corrente...
// utilizzando LIMIT per partire da $first e contare fino a $x_pag
$rs = mysql_query("SELECT * FROM giochi ORDER BY id DESC LIMIT $first, $x_pag") or die(mysql_error());
$nr = mysql_num_rows($rs);
if ($nr != 0){
  for($x = 0; $x < $nr; $x++){
    $row = mysql_fetch_assoc($rs);
	$immagine = $row['immagine'];
    echo "<p><table><tr>";
    echo "<td width=\"300\"><a href='".$row['url']."'>" . $row['nome'] . "</a></td>";	
	echo "<td width=\"312\">";
	echo "<div align=\"right\">".$row['data_ins']."</div>";
	echo "</td>";
	echo"</tr></table>";
    echo "<table><tr>";
    echo "<td width=\"100\" border=\"0\" height=\"100\"><img src=\"$immagine\"></td>";
	echo "<td width=\"512\" border=\"0\" height=\"100\">" . $row['testo'] . "</td>";
    echo "</tr></table></p>";
  }
}else{
  echo "Nessun record trovato!";
}
if ($all_pages > 1){
  if ($pag > 1){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag - 1) . "\">";
    echo "Pagina Indietro</a>&nbsp;";
  } 
  if ($all_pages > $pag){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag + 1) . "\">";
    echo "Pagina Avanti</a>";
  } 
}



mysql_close($conn);
function pagination_3($all_pages,$page,$webpage){ //imposto la mia $webpage come parametro formale 
         
$pagination = "";  
    if($all_pages!=1){  
        if($pag>'1')  
            {  
          $pagination.="<a href=".$webpage."?page=1><small>prima</small></a>  
                                 <a href=".$webpage."?page=".($pag-1).">Prev</a>";  
            }  

     
             
          
           if($all_pages<=$x_pag)  
            {  
               
                $x_pag = $all_pages+1;  
            }  
            
           else{  
                  
                $x_pag=$x_pag+1;  
                   if($pag>=$x_pag){  
                      $x_pag=$pag+1;  
                    }  
              }  

        for ($i=1;$i<$x_pag;$i++)  
               {  

                   if($i==$pag){  
                $pagination.="<a>".$i."</a>";  
            }  

            else{  
                $pagination.= "<a href=".$webpage."?pag=".$i.">".$i."</a>";  
                        }  
        }  

      

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

    }  
    else{  
        $pagination.="";  
    }  
    return($pagination);  

}  

//il risultato di questa paginazione è il seguente : 
//prima PREV 1 2 3 4 5 6 7 8 9 10 Next ultima  


mysql_close($conn); 
?>
o solo a :
PHP:
<?
function pagination_3($all_pages,$page,$webpage){ //imposto la mia $webpage come parametro formale 
         
$pagination = "";  
    if($all_pages!=1){  
        if($pag>'1')  
            {  
          $pagination.="<a href=".$webpage."?page=1><small>prima</small></a>  
                                 <a href=".$webpage."?page=".($pag-1).">Prev</a>";  
            }  

     
             
          
           if($all_pages<=$x_pag)  
            {  
               
                $x_pag = $all_pages+1;  
            }  
            
           else{  
                  
                $x_pag=$x_pag+1;  
                   if($pag>=$x_pag){  
                      $x_pag=$pag+1;  
                    }  
              }  

        for ($i=1;$i<$x_pag;$i++)  
               {  

                   if($i==$pag){  
                $pagination.="<a>".$i."</a>";  
            }  

            else{  
                $pagination.= "<a href=".$webpage."?pag=".$i.">".$i."</a>";  
                        }  
        }  

      

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

    }  
    else{  
        $pagination.="";  
    }  
    return($pagination);  

}  

//il risultato di questa paginazione è il seguente : 
//prima PREV 1 2 3 4 5 6 7 8 9 10 Next ultima  


mysql_close($conn); 
?>
 
ciao
a tutto.
poi volevo dirti due cose
non mettere
mysql_close($conn);
ci pensa php a chiudere quando esci dalla pagina (tra l'altro mi sembra che tu l'abbia messo due volte)
e usa il tag php <?php non <?
 
uhm okkei qualche consiglio in generale per il php nn so qualche dritta roba del genere
però scusa secondo me nn devo modificarlo cn tutto perchè nel codice chè nell' articolo :
<?php
// definiamo una costante per la pagina corrente
define("SELF", $_SERVER['PHP_SELF']);

// definiamo la classe
class Paging
{
// definiamo la pagina di partenza
function paginaIniziale($max_row)
{
if ((!isset($_GET['p'])) || ($_GET['p'] == "1"))
{
$parti_da = 0;
$_GET['p'] = 1;
}else{
$parti_da = ($_GET['p']-1) * $max_row;
}
return $parti_da;
}

// contiamo le pagine e stabiliamo quanti records devono essere impaginati
function contaPagine($conta, $max_row)
{
$pgg = (($conta % $max_row) == 0) ? $conta / $max_row : floor($conta / $max_row) + 1;
return $pgg;
}

// mostriamo l'elenco delle pagine
function listaPagine($p_corrente, $pgg)
{
$listapgg = "";
if (($p_corrente != 1) && ($p_corrente))
{
$listapgg .= " <a href=\"".SELF."?p=1\">Prima pag.</a> ";
}
if (($p_corrente-1) > 0)
{
$listapgg .= "<a href=\"".SELF."?p=".($p_corrente-1)."\"><</a> ";
}
for ($i=1; $i<=$pgg; $i++)
{
if ($i == $p_corrente)
{
$listapgg .= "<b>".$i."</b>";
}else{
$listapgg .= "<a href=\"".SELF."?p=".$i."\">".$i."</a>";
}
$listapgg .= " ";
}
if (($p_corrente+1) <= $pgg)
{
$listapgg .= "<a href=\"".SELF."?p=".($p_corrente+1)."\">></a> ";
}
if (($p_corrente != $pgg) && ($pgg != 0))
{
$listapgg .= "<a href=\"".SELF."?p=".$pgg."\">Ultima pag.</a> ";
}
$listapgg .= "</td>\n";
return $listapgg;
}

// permettiamo la navigazione per pagine precedenti e successive
function precedenteSuccessiva($p_corrente, $pgg)
{
$impaginazione = "";
if (($p_corrente-1) <= 0)
{
$impaginazione .= "Precedente";
}else{
$impaginazione .= "<a href=\"".SELF."?p=".($p_corrente-1)."\">Pag. precedente</a>";
}
$impaginazione .= " | ";
if (($p_corrente+1) > $pgg)
{
$impaginazione .= "Prossima";
}else{
$impaginazione .= "<a href=\"".SELF."?p=".($p_corrente+1)."\">Prossima pag.</a>";
}
return $impaginazione;
}
}
?>
non parla di database e recupero dati ma solo di spostamento dati detto proprio molto rtera terra cioè questo ti fa vedere solo il numero per le pagine ma nn ti recupera i dati quindi secondo me deve andare insieme al vecchio sbaglio?
 
Ultima modifica:

Discussioni simili