Newsgroup: it.comp.www.php
Titolo: impaginazione

come posso creare delle pagine in base al numero che proviene da 
mysql_num_rows??
per esempio come faccio a fare un ciclo che ogni 5 mi crea una nuova 
pagina??

 wrote in message
news:3D627B1D...@wappi.com...


 escribió en el mensaje
news:3D627B1D...@wappi.com...


grazie sto a buon . grazie al tuo aiuto. Xo' nn ho ben capito il select 
lo devo fare un ciclo
guarda a che punto sono
$db_host = "localhost";       //indirizzo del vostro database
$db_user = "kandalf";         //utente del database
$db_passwd = "21";            //password del database
$db_name = "kan_news";      //nome del database
$db_tablename = "news";       //nome della tabella
// connessione al db
$connect = mysql_connect ("$db_host", "$db_user", "$db_passwd")
               or die ( "Non riesco a connettermi al database : 
$db_dbname");
// seleziono il db
mysql_select_db ($db_name, $connect)
or die ( "Non riesco a selezionare il db $db_name<br>");
$query = "SELECT * FROM $db_tablename ORDER BY id DESC";
$esegui = mysql_query($query, $connect);
$rows = mysql_num_rows($esegui);
$numero_pag = ceil($rows / 3);
for ($pag = 1; $pag <= $numero_pag; $pag++)
{
echo "<A href=\"$_SERVER[PHP_SELF]?action=visualizza$pag\">$pag</A> ";
}
echo $numero_pag * 3;

 ha scritto nel messaggio
news:3D62A759...@wappi.com...


nn ho capito xchč č meglio.
cmq sai risp alla domanda di prima
ciao

 nn ho capito xchè è meglio.



nn ho capito una cosa.
la query sql la devo cambiare così vero??
$sql = "SELECT * FROM $db_tablename LIMIT $min_limit, 
$records_per_pagina;";
mi dà questo errore
Notice: Undefined variable: pagina in c:\programmi\apache 
group\apache\htdocs\prove\imp.php on line 21
Sei a pagina 1 di 1 - Vai a pagina: 0 |
ciao e grazie

ho provato così
// Quanti records devo visualizzare per ogni pagina (il limit della tua 
query SQL)
$records_per_pagina = 3;
$db_host = "localhost";       //indirizzo del vostro database
$db_user = "kandalf";         //utente del database
$db_passwd = "21";            //password del database
$db_name = "kan_news";      //nome del database
$db_tablename = "news";       //nome della tabella
// connessione al db
$connect = mysql_connect ("$db_host", "$db_user", "$db_passwd")
                or die ( "Non riesco a connettermi al database : 
$db_dbname");
// seleziono il db
$db = mysql_select_db($db_name, $connect)
         or die ( "Non riesco a selezionare il db $db_name<br>");
// Verifichiamo se è stata richiesta una pagina specifica altrimenti 
siamo a pagina 1
if (!isset($pagina)) {
   $pagina = 1;
   $min_limit = 0;
} else {
   $min_limit = ($pagina  -1) * $records_per_pagina ;
}
$sql = "SELECT * FROM $db_tablename LIMIT $min_limit, $records_per_pagina;";
$esegui = mysql_query($sql, $connect);
// Quanti records ho nel recordset
$num_records = mysql_num_rows($esegui);
// Il numero di pagine senza resto...
$pagine = intval($num_records / $records_per_pagina);
// C'è un avanzo?
$resto = $num_records % $records_per_pagina;
// Se c'è un avanzo, allora incrementa di uno il numero di pagine
if ($resto)
     $pagine++;
echo "Sei a pagina $pagina di $pagine - Vai a pagina: ";
for ($i=0; $i < $pagine; $i++) {
     // Stampa i numeri
if ($i == ($pagina -1) ) {
     echo $i;
} else
     echo "<a href=\"tuolink.php?pagina=$i\">$i</a>>";
}
echo "&nbsp;|&nbsp;";
xo' nn riesce a visualizzare i vari collegamenti alle pagine.
mi dà solo una scritta così
Sei a pagina 1 di 1 - Vai a pagina: 0 |
senza link


L'errore sta nella variabile $esegui, che da sempre valore 3, che poi dividi
per 3,
e la arrotondi se c'è resto ;)
Ti spiego: se tu chiedi quanti rows corrispondono a
SELECT * FROM $db_tablename LIMIT $min_limit, $records_per_pagina;
ti risponderá invariabilmente che il numero corrisponde a
$records_per_pagina. Del resto, gli hai detto tu di limitare (LIMIT), la
ricerca.
Dovresti invece dividere tutti i risultati ottenuti da SELECT * FROM
$db_tablename per il numero di records per pagina.
Un consiglio... ciascuno ha il suo stile. Personalmente, piuttosto che
calcolare l'intero e controllare se c'è un resto, arrotondo per eccesso il
risultato della divisione con ceil().
Metti che il risultato sia 5,6 ... puoi prendere il cinque, calcolare se
esiste un resto e poi incrementare di uno il numero di pagine, o arrotondare
per eccesso e ottenere 6. Sostanzialmente è lo stesso.
Ah, una cosina trascurabile relativa alla sicurezza .... KANDALF !!!
Spero che i dati come password database, database ecc. non corrispondano ai
tuoi reali.
Basterebbe conoscere il tuo IP, che peraltro è visibile, e chiunque potrebbe
connettersi, via telnet ad esempio, ma non solo ;) al tuo database.
Ripeto... mi auguro che siano nomi di fantasia. In caso contrario, ti
consiglio di cambiarli.
Appena ho un attimo di tempo vedo anche il resto del codice, per sapere se
tutto funziona bene. Se nel frattempo ti serve aiuto, fai un fischio.
;)

Prova questa pagina.
Occhio alle variabili $HTTP_GET_VARS["pagina"] invece di $pagina e a
$_SERVER[PHP_SELF] per richiamare la stessa pagina.
Dipende un po' dalla versione di PHP che hai installata, ma dovrebbe
funzionare. A me... funziona.
<?php
// Quanti records devo visualizzare per ogni pagina (il limit della tua
query SQL)
$records_per_pagina = 3;
$db_host = "host";                    // dato da specificare
$db_user = "utente";                 // dato da specificare
$db_passwd = "password";      // dato da specificare
$db_name = "kan_news";
$db_tablename = "news";
// connessione al db
$connect = mysql_connect ("$db_host", "$db_user", "$db_passwd")
                or die ( "Non riesco a connettermi al database :
$db_dbname");
// seleziono il db
$db = mysql_select_db($db_name, $connect)
         or die ( "Non riesco a selezionare il db $db_name<br>");
// Verifichiamo se è stata richiesta una pagina specifica altrimenti siamo a
pagina 1
if (!isset($HTTP_GET_VARS["pagina"])) {
   $pagina = 1;
   $min_limit = 0;
}
else {
$pagina = $HTTP_GET_VARS["pagina"];
   $min_limit = ($pagina) * $records_per_pagina ;
}
$sql1 = "SELECT * FROM $db_tablename;";
$esegui = mysql_query($sql1, $connect);
// Quanti records ho nel recordset
$num_records = mysql_num_rows($esegui);
$sql = "SELECT * FROM $db_tablename LIMIT $min_limit, $records_per_pagina;";
$result = mysql_query($sql, $connect);
echo "<TABLE BORDER=\"1\">";
while (($row = mysql_fetch_array($result, MYSQL_NUM))) {
echo "<tr><td>";
printf ("ID: %s </td><td> Titolo: %s </td><td> Testo: %s",  $row[0],
$row[1], $row[2]);
echo "</td></tr>";
}
echo "</TABLE><BR><BR>";
    mysql_free_result($result);
// Il numero di pagine senza resto...
$pagine = ceil($num_records / $records_per_pagina);
$pagina_attuale = $pagina + 1;
echo "Sei a pagina $pagina_attuale di $pagine - Vai a pagina: ";
for ($i=0; $i < $pagine-1; $i++) {
     // Stampa i numeri
 if($pagina != $i) {
      echo "<a href=\"$_SERVER[PHP_SELF]?pagina=$i\">" .($i+1) ."</a> >";
      }
 else {
 echo "<B> $pagina_attuale </B> >";
 }
}
$ultima = $pagine-1;
 echo "<a href=\"$_SERVER[PHP_SELF]?pagina=$ultima\">$pagine </a>";
?>

grazie x tutto funziona! ti rigrazio anche x i suggerimenti x la 
sicurezza.anche se nel mio db nn cè' proprio nulla.....qualche script 
fatto in casa e basta.
Ma nn ho capito conviene usare $_POST o $HTTP_POST_VARS??
ciao, ho php 4.2.2


$_POST, $_GET ecc. sono superglobal, ossia non devi specificare global
quando chiami la variabile dentro una funzione se vuoi che abbia effetto
anche a livello globale.
Fuori dalle funzioni, hanno lo stesso valore. Per esseri sicuri di non
sbagliare, conviene usare $_POST.
Parola di ZEND =>
Normally, any variable used in a function is local in scope to that
function. This means if you wanted to use the global $HTTP_GET_VARS array
values in a function, you would need to first use the statement global
$HTTP_GET_VARS; before referencing this array.
Superglobals are an exception to this rule. You may use the variables $_GET,
$_POST, $_COOKIE, $_ENV, $_SERVER and $_SESSION without having to reference
them as globals first. There is also one additional superglobal array,
$_REQUEST. This array contains all of the variables from GET, POST or COOKIE
methods (basically anything that could be sent by the user, and which is
therefore suspect).
http://www.zend.com/zend/art/art-sweat4.php

se lo dice zend.....grazie ancora!