Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3

    select con foreach da db mysql

    Ciao a tutti, ammetto di aver appena iniziato a tentare di muovere i primi passi nella programmazione PHP, ma è da un po' che provo a risolvere un problema, immagino semplice, ma per me ora risulta inarrivabile:

    Sto seguendo un manuale, ma con questo codice ottengo un SELECT con valori doppi a coppie, ma non riesco a capirne il motivo, non mi è ancora troppo chiaro il lavoro della funzione foreach ( )

    Vi ringrazio ancora e vi saluto.
    Gio

    Codice PHP:
    <select name="movie_leadactor">  
    <?php 
    //seleziona i record degli attori 
    $query 'SELECT people_id, people_fullname     
          FROM     
          people     
          WHERE     
          people_isactor = 1     
          ORDER BY     
          people_fullname'

    $result mysql_query($query$db) or die (mysql_error($db));

    //popola le opzioni della select con i risultati 
    while ($row mysql_fetch_assoc($result))    {
         foreach (
    $row as $value) { 
            if (
    $row['people_id'] == $movie_leadactor) {
                 echo 
    '<option value="' $row['people_id'] . '" selected="selected">';         
    } else {             
    echo 
    '<option value="' $row['people_id'] . '">';         
    }             
    echo 
    $row['people_fullname'] . '</option>';                                         
    }     

    ?>                           
    </select>

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    leva il forech che tanto $value non la usi è quello che ti fa stampare i doppi valori (infatti nella select tiri su due campi)

  3. #3
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Ti commento quel che fai in modo che puoi cercare una soluzione

    Codice PHP:
    <select name="movie_leadactor">   
    <?php  
    //seleziona i record degli attori  
    $query 'SELECT people_id, people_fullname      
          FROM      
          people      
          WHERE      
          people_isactor = 1      
          ORDER BY      
          people_fullname'
    ;  
    $result mysql_query($query$db) or die (mysql_error($db)); 

    //popola le opzioni della select con i risultati 
    //Fintanto che leggi una riga dal record set 
    while ($row mysql_fetch_assoc($result))    { 
         
    //Esegui la foreach con $row, che da query è 
         //array('people_id'=>'un valore', 'people_fullname'=>'un altro valore')
         
    foreach ($row as $value) {  //Il foreach di fatto itera due volte
            //mettendo in $value prima $row['people_id'] e poi $row['people_fullname']
            //Per due volte fai lo stesso confronto otteneneto in output per due volte
            //lo stesso risultato dato che utilizzi direttamente $row e non il valore memorizzato
            //in $value
            
    if ($row['people_id'] == $movie_leadactor) { 
                 echo 
    '<option value="' $row['people_id'] . '" selected="selected">';          
            } else {              
                 echo 
    '<option value="' $row['people_id'] . '">';          
            }              
            echo 
    $row['people_fullname'] . '</option>';                                          
        }      
    }  
    ?>                            
    </select>
    Ecco spiegato perchè le option ti compaiono a due a due.
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3
    Grazie mille. Funziona è vero senza foreach()

    Altro problema è capirlo. Ma devo sbattere un po' la testa!!!
    Vi ringrazio ancora, ciao ciao

  5. #5
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    Originariamente inviato da -v-
    Grazie mille. Funziona è vero senza foreach()

    Altro problema è capirlo. Ma devo sbattere un po' la testa!!!
    Vi ringrazio ancora, ciao ciao
    bhe Grino ha spiegato molto bene, per semplificare con lo while($row.....) scorri le righe (dette tuple) che la select ha appunto selezionato, con la foreach per ogni riga scorri i campi della riga, che in questo caso sono due (people_id, people_fullname) quindi per ogni riga eseguivi due volte la stessa azione

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.