Problema con query e script PHP

neo996sps

Utente Attivo
31 Mag 2007
247
0
0
Trentino
Ciao a tutti,

ho preparato uno script PHP da pubblicare su un sito per la gestione delle news. Lo script si deve comportare così:

- creare una tabella 3 X 3 in cui in ogni cella ho la mia news;
- paginare il tutto, in maniera tale che ogni 9 news crei una nuova pagina;

ora, tutto questo è stato realizzato alla perfezione, però solamente per la prima pagina... se passo alla seconda ricevo un errore relativo all'indice della news.

Questo è il codice dello script:

PHP:
<?php
$count = mysql_query("SELECT COUNT(id) FROM news");
$res_count = mysql_fetch_row($count);
$tot_records = $res_count[0];
$per_page = 9;
$tot_pages = ceil($tot_records / $per_page);
$current_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];
$primo = ($current_page - 1) * $per_page;
$result = mysql_query("SELECT * FROM news WHERE archivia = '0' ORDER BY id desc LIMIT $primo, $per_page;");
$num_cols = 3;
$num_rows = ceil($tot_records / $num_cols); // the number of rows
$num = 0;
print("<table class='tabella_moduli'>");
while($results = mysql_fetch_array($result)) {
    print("<tr>");
    for ($cols = 0; $cols < $num_cols; $cols++) {
        if ($num < $tot_records) {
            $titolo = mysql_result($result, $num, "titolo");
            $descrizione = mysql_result($result, $num, "testo_introduttivo");
            $data = mysql_result($result, $num, "data");
            $m = mysql_result($result, $num, "id");
            print("<td class='tdmoduli'>");
            print("<div class='art-block'>
                                <div class='art-block-tl'></div>
                                <div class='art-block-tr'></div>
                                <div class='art-block-bl'></div>
                                <div class='art-block-br'></div>
                                <div class='art-block-tc'></div>
                                <div class='art-block-bc'></div>
                                <div class='art-block-cl'></div>
                                <div class='art-block-cr'></div>
                                <div class='art-block-cc'></div>
                                <div class='art-block-body'>
                                            <div class='art-blockheader'>
                                                 <div class='t'>".$titolo."</div>
                                            </div>
                                            <div class='art-blockcontent'>
                                                <div class='art-blockcontent-body'>
                                            <!-- block-content -->
<div>
".$descrizione."
</div>
                                            <!-- /block-content -->
                                                <br>
                                            		<div class='cleared2'>".$data." - <a href='./news_dettaglio.php?id=$m'>Leggi Tutto</a></div>
                                            		<div class='cleared'></div>
                                                </div>
                                            </div>
                            		<div class='cleared'></div>
                                </div>
                            </div>");
            print("<td>");
            
        } 
        $num++;
    }
  print("</tr>");
}
print("</table>");
?>

questo è l'errore:

Codice:
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 2 on MySQL result index 7 in /var/www/sito/2/index.php on line 107

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 2 on MySQL result index 7 in /var/www/sito/2/index.php on line 108

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 2 on MySQL result index 7 in /var/www/sito/2/index.php on line 109

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 2 on MySQL result index 7 in /var/www/sito/2/index.php on line 110

le righe interessate sono queste:

PHP:
$titolo = mysql_result($result, $num, "titolo");
            $descrizione = mysql_result($result, $num, "testo_introduttivo");
            $data = mysql_result($result, $num, "data");
            $m = mysql_result($result, $num, "id");

qualcuno mi sa dire come si risolve sto problema infame?
 
Un primo problema che mi salta all'occhio è che la count la fai sempre sull'intera tabella news, per cui $tot_records conterrà sempre il numero di tutti i record presenti nella tabella news, ma poi usi $tot_records per scorrere il resultset (if ($num < $tot_records)) che però ottieni tramite una query che usa la clausola LIMIT per cui è normale che prima o poi sfori.
 
quando le fesserie si fanno, bisogna farle in grande stile! Con il tuo suggerimento ho risolto...

Ecco il codice se servisse a qualcuno:

PHP:
<?php
$count = mysql_query("SELECT COUNT(id) FROM news");
$per_page = 9;
$current_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];
$primo = ($current_page - 1) * $per_page;
$result = mysql_query("SELECT * FROM news WHERE archivia = '0' ORDER BY id desc LIMIT $primo, $per_page;");
$res_count = mysql_fetch_row($result);
$tot_records = $res_count[0];

$tot_pages = ceil($tot_records / $per_page);


$num_cols = 3;
$num_rows = ceil($tot_records / $num_cols); 
$num = 0;
print("<table class='tabella_moduli'>");
while($results = mysql_fetch_array($result)) {
    print("<tr>");
    for ($cols = 0; $cols < $num_cols; $cols++) {
        if ($num < $tot_records) {
            $titolo = mysql_result($result, $num, "titolo");
            $descrizione = mysql_result($result, $num, "testo_introduttivo");
            $data = mysql_result($result, $num, "data");
            $m = mysql_result($result, $num, "id");
            print("<td class='tdmoduli'>");
            print("<div class='art-block'>
                                <div class='art-block-tl'></div>
                                <div class='art-block-tr'></div>
                                <div class='art-block-bl'></div>
                                <div class='art-block-br'></div>
                                <div class='art-block-tc'></div>
                                <div class='art-block-bc'></div>
                                <div class='art-block-cl'></div>
                                <div class='art-block-cr'></div>
                                <div class='art-block-cc'></div>
                                <div class='art-block-body'>
                                            <div class='art-blockheader'>
                                                 <div class='t'>".$titolo."</div>
                                            </div>
                                            <div class='art-blockcontent'>
                                                <div class='art-blockcontent-body'>
                                            <!-- block-content -->
<div>
".$descrizione."
</div>
                                            <!-- /block-content -->
                                                <br>
                                            		<div class='cleared2'>".$data." - <a href='./news_dettaglio.php?id=$m'>Leggi Tutto</a></div>
                                            		<div class='cleared'></div>
                                                </div>
                                            </div>
                            		<div class='cleared'></div>
                                </div>
                            </div>");
            print("<td>");
            
        } 
        $num++;
    }
  print("</tr>");
}
print("</table>");
?>
 
grazie per aver postato il codice funzionante, per rendere lo script più sicuro sarebbe meglio filtrare i parametri passati per GET
 
attenzione. Mi sono appena accorto di un errore. Se io voglio dare più colonne si ripresenta l'errore del primo post e non riesco a capire come posso sistemarlo in via definitiva.

vorrei inoltre sapere come fare il passaggio per $_GET dei parametri
 

Discussioni simili