Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [PHP] ciclo for

  1. #1

    [PHP] ciclo for

    Salve a tutti,

    nel mio script recupero quanto righe ha la tabella argomenti e per ciascuna stampo il risultato... però così ho tutti i titoli uguali ? Cosa sto sbagliando?

    Ecco il codice...

    Codice PHP:
       <?php 
                      
                      
    include ("config.inc.php");
                      include (
    "connect.php");
                      
                      
    $query "SELECT * FROM argomenti ORDER BY idarg DESC";
                      
    $result mysql_query($query,$db) or die (mysql_error()); 
                      
    $numfields mysql_num_rows($result);
                      while (
    $row mysql_fetch_array($result)) {
                      
    $id $row['idarg'];
                      
    $titolo $row['titolo'];
                      
    $testo =  $row['testo'];
                      }
                      
                     
                      
                      
    ?>
                      <tr>
                        <td><?php  for ($x 0$x<$numfields$x++) {
                      
                      echo 
    $tabella "<tr>
                        <td><table border='0' cellspacing='0' cellpadding='0'>
                          <tr>
                            <td width='11'>[img]img/argomenti/bt1.jpg[/img]</td>
                            <td background='img/argomenti/bt_mid.jpg'><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>[url='metod_dett.php?id=
    $id']$titolo[/url]</font></td>
                            <td width='12'>[img]img/argomenti/bt2.jpg[/img]</td>
                          </tr>
                        </table></td>
                      </tr>"
    ;
                
                      
                     
                     }
    ?></td>
                      </tr>

  2. #2
    se vuoi continuare col tuo script le variabili id, titolo e testo devono diventare array e nel ciclo for le richiami con $x indice numerico

  3. #3
    ehm?

    ma guarda spostando la graffa del ciclo while mi stampa tutti i risultati ma doppi!
    come posso farne stampare uno di uno ?

    Codice PHP:
      <?php 
                      
                      
    include ("config.inc.php");
                      include (
    "connect.php");
                      
                      
    $query "SELECT * FROM argomenti ORDER BY idarg DESC";
                      
    $result mysql_query($query,$db) or die (mysql_error()); 
                      
    $numfields mysql_num_rows($result);
                      while (
    $row mysql_fetch_array($result)) {
                      
    $id $row['idarg'];
                      
    $titolo $row['titolo'];
                      
    $testo =  $row['testo'];
                      
                      
                     
                      
                      
    ?>
                      <tr>
                        <td><?php  for ($x 0$x<$numfields$x++) {
                      
                      echo 
    $tabella "<tr>
                        <td><table border='0' cellspacing='0' cellpadding='0'>
                          <tr>
                            <td width='11'>[img]img/argomenti/bt1.jpg[/img]</td>
                            <td background='img/argomenti/bt_mid.jpg'><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>[url='metod_dett.php?id=
    $id']$titolo[/url]</font></td>
                            <td width='12'>[img]img/argomenti/bt2.jpg[/img]</td>
                          </tr>
                        </table></td>
                      </tr>"
    ;
                
                      }
                     
                     }
    ?>

  4. #4
    Codice PHP:
    while ($row mysql_fetch_array($result)) { 
                      
    $id $row['idarg']; 
                      
    $titolo $row['titolo']; 
                      
    $testo =  $row['testo']; 
                      } 
    in questo modo le 3 variabili conterranno per forza l'ultimo valore estratto dal db, perchè il ciclo continua a sovrascriverle, se invece le trasformi in array, tutti i valori del db saranno registrati.
    Codice PHP:
    while ($row mysql_fetch_array($result)) { 
                      
    $id[] = $row['idarg']; 
                      
    $titolo[] = $row['titolo']; 
                      
    $testo[] =  $row['testo']; 
                      } 

  5. #5
    scusa ma come l'hai impostato tu stampa: array
    come l'ho impostato io stampa correttamente il titolo dell'item ma doppio ogni volta...

    qualcuno ha qualche suggerimento?

    Codice PHP:

        <?php 
                      
                      
    include ("config.inc.php");
                      include (
    "connect.php");
                      
                      
    $query "SELECT * FROM argomenti ORDER BY idarg DESC";
                      
    $result mysql_query($query,$db) or die (mysql_error()); 
                      
    $numfields mysql_num_rows($result);
                      while (
    $row mysql_fetch_array($result)) {
                      
    $id $row['idarg'];
                      
    $titolo $row['titolo'];
                      
    $testo =  $row['testo'];
                      
                      
                     
                      
                      
    ?>
                      <tr>
                        <td><?php  for ($x 0$x<$numfields$x++) {
                      
                      echo 
    $tabella "<tr>
                        <td><table border='0' cellspacing='0' cellpadding='0'>
                          <tr>
                            <td width='11'>[img]img/argomenti/bt1.jpg[/img]</td>
                            <td background='img/argomenti/bt_mid.jpg'><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>[url='metod_dett.php?id=
    $id']$titolo[/url]</font></td>
                            <td width='12'>[img]img/argomenti/bt2.jpg[/img]</td>
                          </tr>
                        </table></td>
                      </tr>"
    ;
                
                      }
                     
                     }
    ?>

  6. #6
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    queste due cose sono inutili

    $numfields = mysql_num_rows($result);

    for ($x = 0; $x<$numfields; $x++)

    gia te li cicla tutti facendo

    while ($row = mysql_fetch_array($result))

    se ci metti anche il for te li cila tutti due volte, quindi o usi il for o lo while (ti consiglio la seconda)


    quindi o fai
    Codice PHP:
    $numfields mysql_num_rows($result); 
    for (
    $x 0$x<$numfields$x++)
    {
          
    $row mysql_fetch_array($result);
          
    var_dump($row);

    oppure (consigliato molto più snello)
    Codice PHP:
     while ($row mysql_fetch_array($result))
     {
        
    var_dump($row);  
     } 
    questi due codici hanno output equivalente
    se li combini insieme come hai fatto te li stampa doppio

  7. #7
    così stampa tutto e non va bene...

    però perché me li stampa doppi?

  8. #8
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    te li stampa doppi perchè hai messo sia il while che il for
    io ti ho messo un var_dump così per fare un test ma te devi poi adeguare a quello che ti serve
    fai così
    Codice PHP:
    <?php  
                       
                      
    include ("config.inc.php"); 
                      include (
    "connect.php"); 
                       
                      
    $query "SELECT * FROM argomenti ORDER BY idarg DESC"
                      
    $result mysql_query($query,$db) or die (mysql_error());  
                      echo 
    "<table border='0' cellspacing='0' cellpadding='0'>";
                      while (
    $row mysql_fetch_array($result)) { 
                      
    $id $row['idarg']; 
                      
    $titolo $row['titolo']; 
                      
    $testo =  $row['testo'];
                       
                      echo 
    $tabella "
                          <tr> 
                            <td width='11'>[img]img/argomenti/bt1.jpg[/img]</td> 
                            <td background='img/argomenti/bt_mid.jpg'><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>[url='metod_dett.php?id=
    $id']$titolo[/url]</font></td> 
                            <td width='12'>[img]img/argomenti/bt2.jpg[/img]</td> 
                          </tr> "

                  }
    echo 
    "</table>";
    ?>

  9. #9
    Originariamente inviato da seokey
    così stampa tutto e non va bene...

    però perché me li stampa doppi?
    Per via di un errore molto banale che su questo forum capita con frequenza stupefacente.

    Questo pezzo di codice:
    Codice PHP:
    while ($row mysql_fetch_array($result)) {
        
    $id $row['idarg'];
        
    $titolo $row['titolo'];
        
    $testo =  $row['testo'];

    esegue un ciclo tante volte quante sono i record restituiti dalla query, ma ogni volta registra i valori NELLE STESSE VARIABILI sovrascrivendole quindi ad ogni giro. Poi tu esegui un ciclo for e stampi questo valore tutte le volte.

    Se faccio cosi':
    Codice PHP:
    $id 1;
    $id 2;
    $id 3
    alla fine quanto vale $id?

    Non puoi registrare piu' valori in una semplice variabile, devi usare un array. Esempio:

    Codice PHP:
    $result = array()
    while (
    $row mysql_fetch_array($result)) {
        
    $result[] = array(
            
    'id' $row['idarg'];
            
    'titolo' $row['titolo'];
            
    'testo' =  $row['testo'];
        );

    e per stampare i contenuti usi questa forma:
    Codice PHP:
    <table>
    <?php foreach ( $result as $record ): ?>
    <tr>
    <td><?php echo $record['id']; ?></td>
    <td><?php echo $record['titolo']; ?></td>
    <td><?php echo $record['testo']; ?></td>
    </tr>
    <?php endforeach; ?>
    (ovviamente il markup HTML e' solo un esempio).

  10. #10
    allora il problema l'avevo risolto all'inizio e come al solito per disattenzione mi sono complicato la vita aggiungendo un ciclo for...

    risultava doppio certo per il for erroneo, ma l'avevo aggiunto perché il while mi stampava soltanto un risultato invece che più risultati, e il tutto, perché avevo diviso in due lo script...

    grazie per il supporto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.