Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    2 while non funzionano bene

    Sono alle prese con una doppia query MySQL e devo fare in modo che in una tabella HTML, ogni riga corrisponda ad una riga della prima query. Fin qui nessun problema, uso il while con i dati della prima query. Però, uno dei campi di questa tabella ha un menu' di scelta che devo riempire con i dati presi da un'altra query. Allora ecco il codice che ho scritto (che è online anche e potete visualizzare cliccando qui: http://www.radiowebstereo.it/admin/admin_palinsesto.php)

    Codice PHP:
     <? 
    include("config.php"//dati connessione ecc... 
    $query_visualizza_giorno "SELECT palinsesto.id, palinsesto.inizio, palinsesto.fine, palinsesto.replica, programmi.id AS idprogramma, programmi.nome AS nomeprogramma, wj.id AS idwj, wj.nome AS nomewj FROM palinsesto INNER JOIN programmi ON (programmi.id=palinsesto.idprogramma) INNER JOIN wj ON (wj.id=programmi.idwj) WHERE giorno = 1 ORDER BY inizio ASC"
    $visualizza_giorno mysql_query($query_visualizza_giorno$connessione) or die(mysql_error()); 
    $row_visualizza_giorno mysql_fetch_assoc($visualizza_giorno); 
    $totalRows_visualizza_giorno mysql_num_rows($visualizza_giorno); 
    if (
    $totalRows_visualizza_giorno 0) { 
    $query_visualizza_programmi "SELECT id, nome from programmi"
    $visualizza_programmi =  mysql_query($query_visualizza_programmi,
     
    $connessione) or die(mysql_error()); 
    $row_visualizza_programmi =  mysql_fetch_assoc($visualizza_programmi)

    $totalRows_visualizza_programmi mysql_num_rows($visualizza_programmi); 
    ?> 
      </p> 
      

    Ecco qui di seguito listati gli eventi di [b]Lunedì:[/b] </p> 
    <table width="700" border="1" align="center" cellpadding="1" cellspacing="1" bordercolor="#000000"> 
       <tr bgcolor="#00DFFF"> 
         <th width="18%" scope="col">Ora inizio</th> 
         <th width="18%" scope="col">Ora fine</th> 
         <th width="46%" scope="col">Programma</th> 
         <th width="18%" scope="col">Azioni</th> 
       </tr> 
       <?php while ($row_visualizza_giorno mysql_fetch_assoc($visualizza_giorno)) {  ?> 
      <form name="dato_<?php echo $row_visualizza_giorno['id']; ?>" method="post" action="<? echo $PHP_SELF?>"> 
       <tr bgcolor="#CCFFFF"> 
           <td><div align="center"> 
             <input name="inizio" type="text" id="inizio" value="<?php echo  cambia_ora($row_visualizza_giorno['inizi
    o'
    ]); ?>" size="10"> 
           </div></td> 
           <td><div align="center"> 
             <input name="fine" type="text" id="fine" value="<?php echo  cambia_ora($row_visualizza_giorno['fine'
    ]); ?>" size="10"> 
           </div></td> 
           <td><div align="center"> 
             <select name="programma"> 
             <?php 

    //SECONDO WHILE (FUNZIONA SOLO NELLA PRIMA RIGHA DEL PRIMO WHILE... ma perché???) 

             
    while ($row_visualizza_programmi =  mysql_fetch_assoc($visualizza_programmi)
    ) { 
                  if(
    $row_visualizza_giorno['idprogramma'
    ] == $row_visualizza_programmi['id']) { 
                    echo 
    "<option value=\"".$row_visualizza_programmi['id']."\">".$row_visualizza_programmi['nome']."</option>"
                } else { 
                    echo 
    "<option value=\"".$row_visualizza_programmi['id']."\">".$row_visualizza_programmi['nome']."</option>"
                } 
             } 
              
    ?> 
             </select> 
           </div></td> 
           <td><div align="center"> 
                <input type="submit" name="Submit" value="Modifica"> 
                <input type="submit" name="Submit" value="Cancella"> 
                <input name="id" type="hidden" id="id" value="<?php echo $row_visualizza_giorno['id']; ?>"> 
                <input name="giorno" type="hidden" id="giorno" value="<?php echo $_REQUEST['giorno']; ?>"> 
                <input name="azione" type="hidden" id="azione" value="modifica"> 
           </div></td> 
       </tr> 
    </form>
    Il risultato a cui sono giunto è che il menu' a discesa viene riempito correttamente solo la prima volta...

    Dovrei resettare l'array? :master:
    Il 90% dei problemi di un pc si trova
    tra la tastiera e la sedia.

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    Penso che il tuo problema sia dovuto al fatto che hai percorso l'intero recordset.

    Fossi in te agirei in maniera diversa. A quanto pare, leggi la seconda tabella quante volte ci sono records selezionati nella prima.
    Potresti leggere una sola volta la seconda tabella ed usare il codice generato ....

    codice:
    $visualizza_programmi =   mysql_query($query_visualizza_programmi,$connessione) or die(mysql_error());  
    $row_visualizza_programmi =   mysql_fetch_assoc($visualizza_programmi);  // Questo non lo capisco !!!!
    $totalRows_visualizza_programmi = mysql_num_rows($visualizza_programmi); 
    //================================ 
    // BUfferizzazione dei dati HTML
    ob_start();
    while ($row_visualizza_programmi = mysql_fetch_assoc($visualizza_programmi)) {  
     if($row_visualizza_giorno['idprogramma'] == $row_visualizza_programmi['id']) {  
      echo "<option value=\"".$row_visualizza_programmi['id']."\">".$row_visualizza_programmi['nome']."</option>";  
     } else {  
     echo "<option value=\"".$row_visualizza_programmi['id']."\">".$row_visualizza_programmi['nome']."</option>";  
     }
    }  
    $contents = ob_get_contents();
    ob_end_clean();
    //================================ 
    ?>  
    ...
    ... dove c'è il secondo ciclo
    <select name="programma"> 
    <?php print $contents ?>  
    </select> 
    ...

  3. #3
    Scusa ma io non ho capito bene cosa significa "non viene visualizzato bene". Cosa c'è che non va?
    A prima vista, comunque, non ho capito a cosa serva questo if!
    Codice PHP:
    echo "<option value=\"" 
          
    $row_visualizza_programmi['id'] .
          
    "\">" $row_visualizza_programmi['nome'] . 
          
    "</option>"
                } else { 
                    echo 
    "<option value=\"".$row_visualizza_programmi['id']."\">".$row_visualizza_programmi['nome']."</option>"
                } 
    Scrivi la stessa cosa! Io credo che il codice corretto sia così:

    Codice PHP:
    echo '<option value="'
         
    .$row_visualizza_programmi['id'].
         
    '" selected>' $row_visualizza_programmi['nome'] . 
         
    '</option>'
    } else { 
    echo 
    "<option value=\"".$row_visualizza_programmi['id']."\">".$row_visualizza_programmi['nome']."</option>"
                } 

  4. #4
    Originariamente inviato da mircov
    Scusa ma io non ho capito bene cosa significa "non viene visualizzato bene". Cosa c'è che non va?
    A prima vista, comunque, non ho capito a cosa serva questo if!
    Codice PHP:
    echo "<option value=\"" 
          
    $row_visualizza_programmi['id'] .
          
    "\">" $row_visualizza_programmi['nome'] . 
          
    "</option>"
                } else { 
                    echo 
    "<option value=\"".$row_visualizza_programmi['id']."\">".$row_visualizza_programmi['nome']."</option>"
                } 
    Scrivi la stessa cosa! Io credo che il codice corretto sia così:

    Codice PHP:
    echo '<option value="'
         
    .$row_visualizza_programmi['id'].
         
    '" selected>' $row_visualizza_programmi['nome'] . 
         
    '</option>'
    } else { 
    echo 
    "<option value=\"".$row_visualizza_programmi['id']."\">".$row_visualizza_programmi['nome']."</option>"
                } 
    no, è che ho dimenticato di inserire che a seconda del programma che è presente nella prima query, quel valore viene selezionato, quindi il codice sarebbe così:
    Codice PHP:
                 if($row_visualizza_giorno['idprogramma'] == $row_visualizza_programmi['id']) {
                    echo 
    "<option selected value=\"".$row_visualizza_programmi['id']."\">".$row_visualizza_programmi['nome']."</option>";
                } else {
                    echo 
    "<option value=\"".$row_visualizza_programmi['id']."\">".$row_visualizza_programmi['nome']."</option>";
                } 
    Il 90% dei problemi di un pc si trova
    tra la tastiera e la sedia.

  5. #5
    Quindi come ho scritto io!

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    Comunque puoi fare una sola seconda query e salvare il risultato in un array che poi all'interno del ciclo della prima query potrai usare quante volte vuoi.

    Esempio :

    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    
    <html>
    <head>
    <title>Untitled</title>
    </head>
    <body>
    <?   
     $link = mysql_connect("", "root", "") or die ("Impossible de se connecter => ".mysql_error());
     mysql_select_db ("test") or die ("Impossible de se connecter => ".mysql_error());  
     $query = "select id,nome , nome from catalogo_categorie order by nome";
     $res   = mysql_query($query) or die(mysql_error());
     $array = array();
     while ($array[] = mysql_fetch_array($res))  
     ?>
     <select>
     <? foreach($array as $key => $value) { 
      $selected = $value['id'] == 12 ? "selected" : "";?>
      <option <? print $selected; ?> value="<? print $value['id'] ?>"><? print $value['nome'] ?></option>
     <? } ?>
     </select>
     
    
     <select>
     <? foreach($array as $key => $value) { ?>
      <option value="<? print $value['id'] ?>"><? print $value['nome'] ?></option>
     <? } ?>
     </select>
     
    
    </body>
    </html>

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 © 2024 vBulletin Solutions, Inc. All rights reserved.