Newsgroup: it.comp.www.php
Titolo: record su più pagine

Salve a tutti,
 ho cercato su google gruppi, ma non ho trovato nulla che facesse al caso
mio (funzionasse).
Non riesco a capire cosa non funziona in questo script semplice:
<?php $db = mysql_connect(localhost, treska, joint);
mysql_select_db("crogiuolo");
 $start = 0;
$step = 2; // crei una query che estrapola solo un certo numero di risultati
pari a$step
$query = "select * from  contatti LIMIT $start,$step";
$result = mysql_query($query , $db); // li visualizzi
while($row = mysql_fetch_array($result))
{echo "<a href =\"view.php?id=$row[id]\">".$row[nome]. "</a><br>";};
//parti a creare i link per le pagine successive
//ricavi il totale delle ricerche
$query="SELECT count(*)AS tot FROM contatti";
mysql_query($query,$db);
$row=mysql_fetch_array($result);
//ricavi il numero di pagine
$pages = intval(($row[tot]-1) / $step)+1;
//crei tuttti i link delle pagine
for ($i=0; $i<$pages AND $i<10; $i++)
{ $start_page = $i * $step;
echo "<a href=contatti.php?start=$start_page>" . ($i+1) . "</a><br> ";
echo "<a href=contatti.php?start=$start_page>" . ($pages) . "</a><br> ";
echo "<a href=contatti.php?start=$start_page>" . ($i) . "</a><br> ";
} ?>
restituisce
2 record e 1 (($i+1)),1  ($pages) cosa che mi sembra la più strana, 0($i)
Grazie 1000 a tutti
 SIlvio

 $row=mysql_fetch_array($result);
dovrebbe essere
if ($result = mysql_query($query, $db)) {
    $row = mysql_fetch_array($result);
    $pages = intval(($row['tot']-1) / $step)+1;
    ...
}
oppure così (risparmi una riga ma è più lento)
if ($result = mysql_query($query, $db)) {
    $pages = int_val((mysql_result($result, 0) - 1) / $step) + 1;
    ...
}
Saluti
LB

 In attesa di delucidazioni, alcune osservazioni ;-)
Ho fatto come hai detto tu, effettivamente adesso riconosce che ci sono 7
pagine, però per ogni pagina ricarica sempre i primi 2 record.
A mio avviso è perchè la variabile start è fissata a 0 e per quanto noi
gliela passiamo con il link lui la risetta a zero ogni volta che la pagina
viene ricaricata.
(dai forse il problema l'ho capito è gia un passo avanti!! è la soluzione il
problema!!)
Grazie 1000!!
Silvio
copio il codice corretto:
<?php $db = mysql_connect(localhost, treska, joint);
mysql_select_db("crogiuolo");
 $start = 0;
$step = 2;
$query = "select * from  contatti LIMIT $start,$step";
if ($result = mysql_query($query, $db)) {
while($row = mysql_fetch_array($result))
{echo "<a href =\"view.php?id=".$row['id']."\">".$row['nome']."</a><br>";};
}
$query="SELECT count(*)AS tot FROM contatti";
if ($result = mysql_query($query, $db)) {
    $row = mysql_fetch_array($result);
    $pages = intval(($row['tot']-1) / $step)+1;
for ($i=0; $i<$pages AND $i<10; $i++)
{ $start_page = $i * $step;
echo "<a href=prova.php?start=$start_page>" . ($i+1) . "</a><br> ";
}
} ?>

Se può servire ho fatto un:
print_r($_SESSION);
con risultato
Array
(
    [start] => 0
)
probabilmente non serve a niente, ma io lo uso per verificare se lo script
passa qualcosa.
Ciao
 Silvio

  $start = 0;
dovresti usare questo codice
if (isset($_GET['start'])) $start = $_GET['start'];
else $start = 0;
o meglio una funzione che recuperi la variabile col nome fornito dalle
variabili superblobali e se non esiste la crei con un valore di default *

Non serve a nulla, perchè non attivi alcuna sessione nel tuo script...
Inoltre ti consiglio di impostare error_reporting=E_ALL nel php.ini
dato che dovresti ottenere (specialmente durante la fase di sviluppo)
Notice: Undefined variable: _SESSION in prova.php on line ...
* funzione recupero parametri in omaggio ;-)
function get_parameter($name, $type, $default = null, $allow_empty = true) {
    $param = $default;
    if (!empty($type)) {
        $type = strtoupper($type);
        if ($type === 'GET' && isset($_GET)) $paramarray = $_GET;
        elseif ($type === 'POST' && isset($_POST)) $paramarray = $_POST;
        elseif ($type === 'SESSION' && isset($_SESSION)) $paramarray =
$_SESSION;
        elseif ($type === 'COOKIE' && isset($_COOKIE)) $paramarray =
$_COOKIE;
        elseif ($type === 'ENV' && isset($_ENV)) $paramarray = $_ENV;
        if (isset($paramarray) && isset($paramarray['$name'])) {
            if ($allow_empty || !empty($paramarray['$name']))
                $out = $paramarray['$name'];
        }
    }
    return $param;
}
nel tuo caso
$start = get_parameter('start', 'GET', 0);
Saluti
LB

Grazie, ma ho optato per un'altra soluzione (che posto sotto), e della quale
volevo un parere, immagino sia una confusione di prim'ordine... ma
funziona!!!
In ogni caso grazie,  error.function = E_ALL mi è serito moltissimo.
Grazzzzzie mille!
record_pagine.php
<?php
include ("../include/include.php");
   class Pager
   {
       function getPagerData
 ($numHits, $limit, $page)
       {
           $numHits  = (int) $numHits;
          $limit    = max((int) $limit, 1);
           $page     = (int) $page;
           $numPages = ceil
 ($numHits / $limit);
           $page = max($page, 1);
           $page = min($page, $numPages);
           $offset = ($page - 1) * $limit;
           $ret = new stdClass;
           $ret->offset   = $offset;
           $ret->limit    = $limit;
           $ret->numPages = $numPages;
           $ret->page     = $page;
           return $ret;
       }
   }
$page = $_GET['page'];
$limit = 10;
$result = mysql_query("select count(*) from contatti");
$total = mysql_result($result, 0, 0);
$pager  = Pager::getPagerData($total, $limit, $page);
$offset = $pager->offset;
$limit  = $pager->limit;
$page   = $pager->page;
$query = "select * from contatti limit $offset, $limit";
$result = mysql_query($query);
while($row = mysql_fetch_array($result))
{echo "<a href =\"view.php?id=".$row['id']."\">".$row['nome']."</a><br>";};
if ($page == 1)
echo "Previous";
else
echo "<a href=\"prova3.php?page=" . ($page - 1) . "\">Previous</a>";
for ($i = 1; $i <= $pager->numPages; $i++) {
echo " .:. ";
if ($i == $pager->page)
echo "Page $i";
else
echo "<a href=\"prova3.php?page=$i\">Page $i</a>";
}
if ($page == $pager->numPages)
echo ".:.Next";
else         ge
echo "<a href=\"prova3.php?page=" . ($page + 1) . "\">.:.Next</a>";
?>

Ho un problemino, se voglio visualizzare i record suddivisi in piů pagine,
ma provenienti da un piccolo motore di ricerca presente nella stessa pagina
dovrei fare cosě credo...
$result = mysql_query("select count(*) from contatti WHERE (nome LIKE
'$cerca') ");
cosě mi conta il numero di record solo nella ricerca e non in tutto il DB!,
perň facendo cosě non trova assolutamente nulla!!!
Grazie per ogni eventuale risposta.
 Ciao
 Silvio
CODICE INTERO:
<?php
include ("../include/include.php");
   class Pager
   {
       function getPagerData
 ($numHits, $limit, $page)
       {
           $numHits  = (int) $numHits;
          $limit    = max((int) $limit, 1);
           $page     = (int) $page;
           $numPages = ceil
 ($numHits / $limit);
           $page = max($page, 1);
           $page = min($page, $numPages);
           $offset = ($page - 1) * $limit;
           $ret = new stdClass;
           $ret->offset   = $offset;
           $ret->limit    = $limit;
           $ret->numPages = $numPages;
           $ret->page     = $page;
           return $ret;
       }
   }
// get the pager input values
$limit = 8;
$result = mysql_query("select count(*) from contatti WHERE (nome LIKE
'$cerca') ");
$total = mysql_result($result, 0, 0);
// work out the pager values
$pager  = Pager::getPagerData($total, $limit, $page);
$offset = $pager->offset;
$limit  = $pager->limit;
$page   = $pager->page;
// use pager values to fetch data
$cerca = "%$cerca%";
$query = "select * from contatti WHERE (nome LIKE '$cerca') limit $offset,
$limit";
$return = "<a href='archivio_channeling.php'>Visualizza tutti i
contatti</a>";
$result = mysql_query($query);
// use $result here to output page content
while($row = mysql_fetch_array($result))
{
    $nome = $row['nome'];
      $id_cont = $row['ID_cont'];
   $visualizza_blocco .= "
     <p><a href='modifica_cont.php?id=$id_cont'>$nome</a></p>";
};
// output paging system (could also do it before we output the page content)
if ($page == 1) // this is the first page - there is no previous page
$pp = "Previous";
else            // not the first page, link to the previous page
$pp1 = "<a href=\"archivio_channeling.php?page=" . ($page - 1) .
"\">Previous?????C??I?A
 </a>";
for ($i = 1; $i <= $pager->numPages; $i++) {
$pp2 = " .:. ";
if ($i == $pager->page)
$pp3 = "Page $i";
else
$pp4 = "<a href=\"archivio_channeling.php?page=$i\">Page $i</a>";
}
if ($page == $pager->numPages) // this is the last page - there is no next
page
$pp5 = ".:.Next";
else            // not the last page, link to the next page
$pp6 = "<a href=\"archivio_channeling.php?page=" . ($page + 1) .
"\">.:.Next</a>";
$tot_num = " $pp $pp1 $pp2 $pp3 $pp4 $pp5 $pp6";
?>
<HTML>
...
<form name="form2" method="post" action="archivio_channeling.php">
                        <br>
                        <table width="300" height="73" border="0"
class="text_centrale">
                          <tr>
                            <td width="216" height="43"> <div align="right">
                                <input name="cerca" type="text" id="cerca"
style="width:150" size="15" class="campiform"/>
                              </div></td>
                            <td width="234"><input type="submit"
name="Submit2" value="cerca" class="bottone" /></td>
                          </tr>
                          <tr valign="top">
                            <td colspan="2"> <div align="center"><? echo
"$return";?>
                              </div></td>
                          </tr>
                        </table>
                      </form>
<br><? echo "$visualizza_blocco";?>
      <br>
                    <br>
     <? echo "$tot_num";?>
...
</HTML>

 $tot_num = " $pp $pp1 $pp2 $pp3 $pp4 $pp5 $pp6";
Vedi quanto dicevo sopra per i notice
Immagino che con questo codice (a partire da *) tu intendessi ottenere una
serie di collegamenti del tipo:
Previous.:.Page 1.:.Page 2.:.Page 3.:.Next
dove Previous e Next sono disabilitati se si tratta della prima o
dell'ultima pagina, mentre Page n è disabilitato se la pagina attuale è n
Il codice seguente, sebbene non testato, dovrebbe fornirti ciò che ti serve:
if ($page == 1) $tot_num = "Previous";
else $tot_num = "<a href=\"archivio_channelling.php?page=".($page -
1)."\">Previous</a>";
for ($i = 2; $i < $pager->numPages; $i++) {
    $tot_num .= ".:.";
    if ($i == $page) $tot_num .= "Page $i";
    else $tot_num .= "<a href=\"archivio_channelling.php?page=$i\">Page
$i</a>";
}
$tot_num .= ".:.";
if ($page == $pager->numPages) $tot_num = "Next";
else $tot_num = "<a href=\"archivio_channelling.php?page=".($page +
1)."\">Next</a>";
Sperando di esserti stato utile :-)
Saluti
LB