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

    problema di ripetizione (while)

    Io devo ripetere in base ai dati del db una riga di tabella. Al suo interno qst tabella ha un menu a tendina le cui opzioni sono visualizzate ankesse da db.
    Problema:
    la prima volta che viene visualizzata la riga da ripetere il menu a tendina è perfettamente funzionante (ovvero visualizza tutti i suoi campi) mentre dalla seconda riga ripetuta in giu il menu a tendina è vuoto, non ha scelte.
    Il codice che ho scritto è qst:
    codice:
    <?
    session_start();
    
    include "../config.inc.php";
    
    $CORPORAZIONE_TIPO=$_GET['CORPORAZIONE_TIPO'];
    
    $sql = "SELECT USERS.USERNAME,USERS.CARICA_TIPO,CARICHE.CARICA FROM USERS 
    	INNER JOIN CARICHE
    	ON USERS.CARICA_TIPO = CARICHE.ID_CARICA 
    	WHERE USERS.CORPORAZIONE_TIPO = '$CORPORAZIONE_TIPO'";
    $query = mysql_query($sql, $connessione) or die(mysql_error());
    
    switch ($CORPORAZIONE_TIPO){
     case 2:
    	$NUM_CARICHE = "ID_CARICA > 0 AND ID_CARICA < 13";
    	break;
     case 3:
    	$NUM_CARICHE = "ID_CARICA > 12 AND ID_CARICA < 21";
    	break;
     case 4:
    	$NUM_CARICHE = "ID_CARICA > 20 AND ID_CARICA < 29";
    	break;
    }
    $sql2 = "SELECT CARICA FROM CARICHE WHERE $NUM_CARICHE ";
    $query2 = mysql_query($sql2, $connessione) or die(mysql_error());
    ?>
    .
    .
    .
    
    <?
    while ($row=mysql_fetch_array($query)) {
    $NOME_GILDATO=$row["USERNAME"];
    $CARICA_TIPO_GILDATO=$row["CARICA_TIPO"];
    $CARICA_GILDATO=$row['CARICA'];
    
    $CONTA += 1; // Aggiunta *
    		$APPLICA_COLORE = (($CONTA % 2) > 0) ? "bgcolor=#eeeeee" : "";// Aggiunta *
    ?>
    <form name="modificarica" method="post" action="mod_carica.php?GILDATO=<?=$NOME_GILDATO?>">
    <tr <?=$APPLICA_COLORE?>>
    <td>
    <div align="center" class="BlackB"><?=$NOME_GILDATO?></div>
    </td>
    <td>
    <div align="center" class="BlackL"><?=$CARICA_GILDATO?>
    </div>
    </td>
    <td>
    <div align="center" class="BlackL">
    
    <select name="modcarica" class="textfieldBASE" id="modcarica">
    	<option value="seleziona" selected>Seleziona Carica</option>
    	<?
    	while ($row2=mysql_fetch_array($query2)){
    	$CARICHE = $row2['CARICA'];
    	?>
    	<option value="<?=$CARICHE?>"><?=$CARICHE?></option>
    	<?
    	}
    	?>
    </select>
    </div>
    </td>
    <td>
    <div align="center" class="BlackL">
    <input type="submit" name="modifica" class="textfieldBASE" value="Modifica Carica">
    </div>
    </td>
    <td>
    <div align="center">[img]../posta/elimina.gif[/img]</div>
    </td>
    </tr>
    </form>
    <?
    }
    ?>
    Flash Developer for Rich Media
    PHP, jQuery Developer

  2. #2
    Il problema sta tutto qua: hai fatto la query $sql2 = ... fuori da un doppio ciclo while innestato, e la tua idea sarebbe quella di ripetere ad ogni iterazione del primo, il contenuto della query nel secondo, ma cosi facendo te la fa una volta sola.
    La questione la puoi risolvere facilmente spostando la query all'interno del primo ciclo, in quanto ogni chiamata a mysql_fetch_array scorre la tabella fino in fondo, svuotandola per la chiamata successiva al ciclo...
    Graficamente:

    codice:
    Prima:
    $sql2 = ...
    $query2 = ...
    while() {
       while(mysql_fetch_array(...)) {
          ...
       }
    }
    
    Dopo:
    $sql2 = ...
    while() {
       $query2 = ...
       while(mysql_fetch_array(...)) {
          ...
       }
    }
    Così dovrebbe andare
    Windows 7 x64 + Ubuntu Linux 10.10 (Default)
    In principio era il C...
    C/C++ & C# & JavaSE/EE Developer

  3. #3
    FUNZIA!!!!

    Grande! grazie ^_-
    Flash Developer for Rich Media
    PHP, jQuery Developer

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.