impaginazione risultati

Ciao!!

Vi scrivo per avere dei suggerimenti in merito alla seguente questione.

Devo impaginare dei risultati provenienti da una query.

               

while ($data = mysql_fetch_array($result)) {

               

   for($rows=0;$rows<1;$rows++)

  {

       echo "<tr>";

   for($cols=0;$cols<8;$cols++)

   {

                     

      echo "<td align=\"left\" width=\"98\" valign=\"top\" height=\"120\">";

      $id = $data['id'];

      $provincia = htmlspecialchars($data['provincia']);

      $testo = htmlspecialchars($data['testo']);

      $foto="<img src=\"visualizza.php?id=$id \" width=\"90\" height=\"68\" border=\"0\" alt=\"immagini\">";

      echo "<a href='descrizione.php?id=$id' target=_blank>$foto</a><br>";

      echo "<font size=\"1\">";

      echo strtoupper($provincia);

      echo "</font><br>";

      echo "<font size=\"1\">";

      echo strtoupper($testo);

      echo "</font>";

      echo "</td>";

      }

   }

}

   

 

Il risultato è che ogni riga a dei risultati diversi ma sono replicati 8 volte nella stessa riga.

1° riga 8 foto uguali + resto

2° riga 8 foto uguali(diverse dalla prima riga) + resto

Dove sbaglio??? Il risultato che vorrei ottenere è 8 foto+.. diverse per ogni riga.

Potreste darmi qualche suggerimento??

Grazie

Ciao

 

inviato 10 anni fa
micetta
X 0 X

E' concettualmente sbagliato...

Nel senso che tu recuperi l'id, poi cicli 8 volte lo stesso id per fargli fare 8 colonne...

Prova a fare così:

echo "<tr>";

$i=0;   

while ($data = mysql_fetch_array($result)) {                                           

      

      if(($i % 8) != 0)

       {

                echo "<td align=\"left\" width=\"98\" valign=\"top\" height=\"120\">";

      $id = $data['id'];

      $provincia = htmlspecialchars($data['provincia']);

      $testo = htmlspecialchars($data['testo']);

      $foto="<img src=\"visualizza.php?id=$id \" width=\"90\" height=\"68\" border=\"0\" alt=\"immagini\">";

      echo "<a href='descrizione.php?id=$id' target=_blank>$foto</a><br>";

      echo "<font size=\"1\">";

      echo strtoupper($provincia);

      echo "</font><br>";

      echo "<font size=\"1\">";

      echo strtoupper($testo);

      echo "</font>";

      echo "</td>";

        }

      else

      {

          echo "</tr><tr>";

          $i=0;

      }      

  $i++;

} //fine while

   

 

Non l'ho testato, comunque l'idea dovrebbe essere questa  ;)

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
modificato 10 anni fa
X 0 X

grazie,

purtroppo l'ho provato e non funziona. A dire la verità ho fatto un pò di debug e mi sono accorta che non entra nel ciclo IF.

 ???

risposto 10 anni fa
micetta
X 0 X

Prova a vedere l'esempio che ti ho fatto, perchè ho modificato una cosa, un incremento...perchè mi ero accorto che l'avevo dimenticato...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

dopo vari test mi sono accorta che il primo risultato non viene mai visualizzato.

Es.

Mettiamo che i risultati che devo ottenere siano foto1,foto2,foto3.......foto10,foto11,foto12

Ho ottenuto come risultati visualizzati i seguenti (8 per riga)

(prima riga) foto2,foto3,.......foto9

(sec. riga) foto11,foto12...

A questo punto foto1 e foto 10... come faccio a recuperarle??

grazie

 :(

risposto 10 anni fa
micetta
X 0 X

E' chiaro che non vengono visulizzati tutti i risultati di indice 0 + 8, glielo chiedi tu nell'if:

$i=0;   

while ($data = mysql_fetch_array($result)) {                                           

      

      if(($i % 8) != 0)

       {

....compila la riga....        }

      else

      {

....chiude la riga e resetta il contatore...

          $i=0;

      }      

  $i++;

} //fine while

   

 

Considerando che 0%8 fa sempre 0 il primo risultato non viene mai visualizzato. Per cui come prima indicazione direi di settare il contatore ad 1.

Inoltre il ciclo sulla riga va fatto sempre, il controllo sul contatore servirà solo per chiudere o meno la riga.

Detto questo, prova così:

echo "<tr>";

$i=1;   

while ($data = mysql_fetch_array($result)) {

   //Compilo e visualizzo la riga

                echo "<td align=\"left\" width=\"98\" valign=\"top\" height=\"120\">";

      $id = $data['id'];

      $provincia = htmlspecialchars($data['provincia']);

      $testo = htmlspecialchars($data['testo']);

      $foto="<img src=\"visualizza.php?id=$id \" width=\"90\" height=\"68\" border=\"0\" alt=\"immagini\">";

      echo "<a href='descrizione.php?id=$id' target=_blank>$foto</a><br>";

      echo "<font size=\"1\">";

      echo strtoupper($provincia);

      echo "</font><br>";

      echo "<font size=\"1\">";

      echo strtoupper($testo);

      echo "</font>";

      echo "</td>";

      if(($i % 8) != 0)

        //ho finito di inserire gli elementi della riga, la chiudo e ne apro un'altra

       {

          echo "</tr><tr>";

          $i=1;

      }      

  $i++;

} //fine while

   
risposto 10 anni fa
Nico Colonna
X 0 X

Ha ragione fred nel dire che come ti avevo postato prima non prendeva il primo record,

Prova a modificare così:

echo "<tr>";

$i=0;   

while ($data = mysql_fetch_array($result)) {                                           

      

      if(($i % 8) != 0 || $i == 0)

       {

                echo "<td align=\"left\" width=\"98\" valign=\"top\" height=\"120\">";

      $id = $data['id'];

      $provincia = htmlspecialchars($data['provincia']);

      $testo = htmlspecialchars($data['testo']);

      $foto="<img src=\"visualizza.php?id=$id \" width=\"90\" height=\"68\" border=\"0\" alt=\"immagini\">";

      echo "<a href='descrizione.php?id=$id' target=_blank>$foto</a><br>";

      echo "<font size=\"1\">";

      echo strtoupper($provincia);

      echo "</font><br>";

      echo "<font size=\"1\">";

      echo strtoupper($testo);

      echo "</font>";

      echo "</td>";

               

               $i++;

        }

      else

      {

          echo "</tr><tr>";

          $i=0;

      }      

} //fine while

   

 

Facendo come ti ha indicato fred, però,

 if(($i % 8 ) != 0)

        //ho finito di inserire gli elementi della riga, la chiudo e ne apro un'altra

       {

          echo "</tr><tr>";

          $i=1;

      }

Ti creerebbe sempre una nuova riga, tranne che all'ottavo record

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

Si, ma c'è un altro problema:

- se il numero dei risultati non è multiplo di 8, l'ultima riga risulta incompleta

(es. 12 risultati, i primi 8 nella prima riga, nella seconda avrei <td>9</td><td>10</td><td>11</td><td>12</td>

senza chiudere la riga con il </tr>)

- se il numero dei risultati è multiplo di 8, chiudo l'ultima riga e ne apro una nuova che non verrà mai completata

(es. 16 risultati, i primi 8 nella prima riga, gli altri 8 nella seconda che si conclude con </tr><tr>)

Per cui io lo imposterei così:

$i=1;   

while ($data = mysql_fetch_array($result)) {

if ($i==1) {echo "<tr>";}   //Apro una nuova riga

//Compilo e visualizzo la riga

    echo "<td align=\"left\" width=\"98\" valign=\"top\" height=\"120\">";

   $id = $data['id'];

   $provincia = htmlspecialchars($data['provincia']);

   $testo = htmlspecialchars($data['testo']);

   $foto="<img src=\"visualizza.php?id=$id \" width=\"90\" height=\"68\" border=\"0\" alt=\"immagini\">";

   echo "<a href='descrizione.php?id=$id' target=_blank>$foto</a><br>";

   echo "<font size=\"1\">";

   echo strtoupper($provincia);

   echo "</font><br>";

   echo "<font size=\"1\">";

   echo strtoupper($testo);

   echo "</font>";

   echo "</td>";

   if($i ==8) { echo "</tr>";   $i=1;   }   //ho finito di inserire gli elementi della riga e la chiudo 

   else {   $i++;   }

} //fine while

//Controllo per risultati non multipli di 8   

if ($i!=1){                               //se $i==1 significa che ho completato la riga e resettato il contatore

   $mancano = 8 - $i;             //se $i!=1 significa che non ho completato la riga e mancano 8 - i elementi

   for ($j=1;$j<=$mancano;$j++){echo "<td>&nbsp;</td>";}

   echo "</tr>";

}

 :bye:

risposto 10 anni fa
Nico Colonna
X 0 X

Data un'occhiata a come ho gestito la paginazione in questo script (circa alla metà dello script):

http://www.phpnews.it/forum/index.php?topic=619.msg4148#msg4148

faccio uso di 2 cicli FOR, uno per le righe ed uno per le colonne. Se le righe finiscono interrompo il ciclo più esterno, se le colonne di una riga finiscono (non ci sono dati da mostrare) metto un '&nbsp;' nella cella e vado avanti.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ho testato la soluzione di fred e funziona perfettamente.

Purtroppo però ho dovuto aggiungere un ulteriore controllo all'interno del ciclo perchè alcuni risultati non devono essere visualizzati. Risultato mi si sconvolge tutto di nuovo.

Il controllo fa cosi:

$id = $data['id'];

           

$num=(($id*4)-3);

$res =@mysql_query("SELECT nome_file FROM foto WHERE id_file='$num' ");

$r=mysql_fetch_array($res);

$nome_file=htmlspecialchars($r['nome_file']);

if($nome_file!='bianca.jpg' )

{   

   //stampo la colonna

}

else {

  //non stampo niente e vado al risultato successivo

}

Ho fatto diverse prove ma niente

 :'(

 

risposto 10 anni fa
micetta
X 0 X

Contestualizza il controllo nello script che ti abbiamo mandato, se no non si capisce!  :idiot:

In ogni caso lo spirito è che se non visualizzi qualcosa non devi sostituirlo con "niente" ma con una cella vuota "<td>&nbsp;</td>", altrimenti ti si sfasa la riga!!

 :bye:

risposto 10 anni fa
Nico Colonna
X 0 X
$i=1;   

while ($data = mysql_fetch_array($result)) {

if ($i==1) {

   echo "<tr>";

   }   //Apro una nuova riga

//Compilo e visualizzo la riga

   

      echo "<td align=\"left\" width=\"98\" valign=\"top\" height=\"120\">";

      $id = $data['id'];

      $num=(($id*4)-3);

      $provincia = htmlspecialchars($data['provincia']);

      $testo = htmlspecialchars($data['testo']);

      $foto="<img src=\"visualizza.php?id=$num\" width=\"90\" height=\"68\" border=\"0\" alt=\"immagini\">";

            

      $res =@mysql_query("SELECT nome_file FROM tabella_files WHERE id_file='$num' ");

      $r=mysql_fetch_array($res);

      $nome_file=htmlspecialchars($r['nome_file']);

   

      if($nome_file!='bianca.jpg'  )

      {   

      

      echo "$id <br>";

      echo "$i";

      

      echo "<a href='descrizione.php?id=$id' target=_blank>$foto</a><br>";

         //echo "$nome_file";

      echo "<font size=\"1\">";

      echo strtoupper($provincia);

      echo "</font><br>";

      echo "<font size=\"1\">";

      echo strtoupper($testo);

      echo "</font>";

      echo "</td>";

      }

      else {echo "<td>&nbsp;</td>";}

      

      

         if($i ==8) { echo "</tr>";   $i=1;   }   //ho finito di inserire gli elementi della riga e la chiudo 

         else {   $i++;   }

} //fine while

//Controllo per risultati non multipli di 8   

if ($i!=1){                               //se $i==1 significa che ho completato la riga e resettato il contatore

   $mancano = 8 - $i;             //se $i!=1 significa che non ho completato la riga e mancano 8 - i elementi

   for ($j=1;$j<=$mancano;$j++){echo "<td>&nbsp;</td>";}

   echo "</tr>";

}

In questo modo non ho delle righe omogenee perchè dove la condizione è falsa ho una colonna vuota "per niente" come posso rislvere???

risposto 10 anni fa
micetta
X 0 X

Mi sa che non avevo capito il problema! Vediamo se ora ci sono:

supponiamo che i risultati siano 17 e che tu non voglia visualizzare il 6 e il 12. Lo schema dovrebbe essere

 1   2   3   4   5   7   8   9

10 11 13 14 15 16 17  -

è così?

risposto 10 anni fa
Nico Colonna
X 0 X

Se ho capito bene è sufficiente cambiare il codice in questo:

$i=1;   

while ($data = mysql_fetch_array($result)) {

if ($i==1) {

   echo "<tr>";

   }   //Apro una nuova riga

//Compilo e visualizzo la riga

   

      echo "<td align=\"left\" width=\"98\" valign=\"top\" height=\"120\">";

      $id = $data['id'];

      $num=(($id*4)-3);

      $provincia = htmlspecialchars($data['provincia']);

      $testo = htmlspecialchars($data['testo']);

      $foto="<img src=\"visualizza.php?id=$num\" width=\"90\" height=\"68\" border=\"0\" alt=\"immagini\">";

            

      $res =@mysql_query("SELECT nome_file FROM tabella_files WHERE id_file='$num' ");

      $r=mysql_fetch_array($res);

      $nome_file=htmlspecialchars($r['nome_file']);

   

      if($nome_file!='bianca.jpg'  )

      {   

      

      echo "$id <br>";

      echo "$i";

      

      echo "<a href='descrizione.php?id=$id' target=_blank>$foto</a><br>";

         //echo "$nome_file";

      echo "<font size=\"1\">";

      echo strtoupper($provincia);

      echo "</font><br>";

      echo "<font size=\"1\">";

      echo strtoupper($testo);

      echo "</font>";

      echo "</td>";

                                if($i ==8) { echo "</tr>";   $i=1;   }//ho finito di inserire gli elementi della riga e la chiudo 

         else {   $i++;   }

      }

      else {

      //non inserisco niente e non modifico il contatore $i

      }

      

} //fine while

//Controllo per risultati non multipli di 8   

if ($i!=1){                               //se $i==1 significa che ho completato la riga e resettato il contatore

   $mancano = 8 - $i;             //se $i!=1 significa che non ho completato la riga e mancano 8 - i elementi

   for ($j=1;$j<=$mancano;$j++){echo "<td>&nbsp;</td>";}

   echo "</tr>";

}
risposto 10 anni fa
Nico Colonna
X 0 X

il problema era più o meno questo

devo stampare questi elemtni 1,2,3,4,5,6,7,8,9,10,11

se sono tutte ok stampa 1,2,...8 e poi 9,10,11 nella riga successiva

se però la 2 == binca.jpg deve stampare 1,3,4,5,6,7,8,9            10,11 nella riga successiva

oppure la 2== bianca.jpg , la 7==binaca.jpg  9 == bianca.jpg deve stmpare 1,3,4,5,6,8,10,11

 ???

Come mi hai detto tu mi lascia le colonne vuote dove non dovrebbe proprio visualizzare niente. Cosi mi si sfasa tutto.

risposto 10 anni fa
micetta
modificato 10 anni fa
X 0 X

Hai provato questo:

$i=1;   

while ($data = mysql_fetch_array($result)) {

if ($i==1) {

   echo "<tr>";

   }   //Apro una nuova riga

//Compilo e visualizzo la riga

   

   echo "<td align=\"left\" width=\"98\" valign=\"top\" height=\"120\">";

   $id = $data['id'];

   $num=(($id*4)-3);

   $provincia = htmlspecialchars($data['provincia']);

   $testo = htmlspecialchars($data['testo']);

   $foto="<img src=\"visualizza.php?id=$num\" width=\"90\" height=\"68\" border=\"0\" alt=\"immagini\">";

         

   $res =@mysql_query("SELECT nome_file FROM tabella_files WHERE id_file='$num' ");

   $r=mysql_fetch_array($res);

   $nome_file=htmlspecialchars($r['nome_file']);

   

   if($nome_file!='bianca.jpg'  )

   {         

      echo "$id <br>";

      echo "$i";

      

      echo "<a href='descrizione.php?id=$id' target=_blank>$foto</a><br>";

         //echo "$nome_file";

      echo "<font size=\"1\">";

      echo strtoupper($provincia);

      echo "</font><br>";

      echo "<font size=\"1\">";

      echo strtoupper($testo);

      echo "</font>";

      echo "</td>";

                                if($i ==8) 

                                        { echo "</tr>";   $i=1;   }//ho finito di inserire gli elementi della riga e la chiudo 

      else  {   $i++;   }

   }

   else {

   //non inserisco niente e non modifico il contatore $i

   }

      

} //fine while

//Controllo per risultati non multipli di 8   

if ($i!=1){                               //se $i==1 significa che ho completato la riga e resettato il contatore

   $mancano = 8 - $i;             //se $i!=1 significa che non ho completato la riga e mancano 8 - i elementi

   for ($j=1;$j<=$mancano;$j++){echo "<td>&nbsp;</td>";}

   echo "</tr>";

}
risposto 10 anni fa
Nico Colonna
X 0 X

ok, ritiro tutto,

credo di essere riuscita a far funzionare tutto.

 :D

a dopo -

risposto 10 anni fa
micetta
X 0 X

La risposta è semplice...

quando fai il controllo $nome_file!='bianca.jpg'  sul ramo else non chiudi il tag "<td>"

e per questo viene tutto sfalsato....

prova ad inserire questo echo "&nbsp;</td>".

risposto 10 anni fa
zeta80
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda