Popolare menu a tendina in EDIT

  • Creatore Discussione Creatore Discussione Max61
  • Data di inizio Data di inizio

Max61

Utente Attivo
2 Mar 2014
760
4
18
Buongiorno come al solito sono a richiedere aiuto ai membri del forum, cerco di spiegarmi
ho fatto una pagina di inserimento dati, dove inserisco i dati nel db con questo codice:

PHP:
<label for="RespTecnico">&nbsp; Resp. tecnico &nbsp;</label>
		<select name="RespTecnico" value="" >
		<option value=""></option> 
			<option value="<?php echo $RespTecnico; ?>" selected="selected"> <?php echo $RespTecnico; ?></option>    
  		</select>
	
<label for="RespTecnico">&nbsp; Resp. tecnico</label>
<?php
// ===Preparazione elenco per menu a tendina Residenza ====
  $Query1="SELECT * FROM tblresptecnico ORDER BY id";
       //esecuzione della query 
     	   $Leggi_RespTecnico=@mysql_query($Query1) or die (mysql_error());
       if(!$Leggi_RespTecnico)
         print("<H2>Queryfallita!</H2>");
       else
	   echo "<select name='RespTecnico' id='RespTecnicoid'>";//Genera casella a discesa
	   while ($row = mysql_fetch_array($Leggi_RespTecnico)) 
{ 
$RespTecnico = $row['RespTecnico'];

echo "<option value =\"$RespTecnico\">$RespTecnico </option>"; //Popola casella
}
echo "value=$RespTecnico </select>"; 
?>

e fin qui tutto bene, il problema nasce se nell'insert non popolo per esempio questo campo, in modifica non mi permette di popolarlo perchè il menu a tendina è vuoto.
Quindi vorrei nello stesso menu a tendina che mi leggesse il db nel caso avessi inserito i dati e che me li facesse inserire nel caso non li avessi inseriti in precedenza.
I dati dal db li recupero con questo codice

PHP:
<label for="RespTecnico">&nbsp; Resp. tecnico &nbsp;</label>
		<select name="RespTecnico" value="" >
		<option value=""></option> 
			<option value="<?php echo $RespTecnico; ?>" selected="selected"> <?php echo $RespTecnico; ?></option>    
  		</select>

Con la speranza di essermi spiegato...
Un Grazie grandissimo a chi saprà aiutarmi
Max61
 
Ciao, non ho capito bene..o meglio: tu stai creando una pagina web che ha dei campi in PHP e che ti inserisce quello che l'utente vuole e può inserire, nel database. Bene se è questo basta ricercare il mio NICK e trovi una discussione.

Se tu invece avendo una tabella:
Id - Mick - nazione
89900 - pup3770 - Italia
89098 - Max61 - Italia

Vuoi che un utente inserisca nuovi utenti che abbiano id diverso da 89900 e da 89098 allora basta fare un controllo..puoi generare random gli id oppure far inserire all'utente il nuovo id e su quello fare il controllo prima di passarlo alla insert
 
Ciao, non ho capito bene..o meglio: tu stai creando una pagina web che ha dei campi in PHP e che ti inserisce quello che l'utente vuole e può inserire, nel database. Bene se è questo basta ricercare il mio NICK e trovi una discussione.

Se tu invece avendo una tabella:
Id - Mick - nazione
89900 - pup3770 - Italia
89098 - Max61 - Italia

Vuoi che un utente inserisca nuovi utenti che abbiano id diverso da 89900 e da 89098 allora basta fare un controllo..puoi generare random gli id oppure far inserire all'utente il nuovo id e su quello fare il controllo prima di passarlo alla insert



Ciao e grazie per l' interessamento, cerco di spiegarmi con gli allegati che invio.

Nella pagina Pagina Edit.php 1, il campo Legale è vuoto e se lo volessi valorizzare non possoVedi l'allegato Pagina Edit.php 1.zip


Nella pagina Pagina Edit.php 2, il campo Legale è valorizzatoVedi l'allegato Pagina Edit.php 2.zip


Guarda se capisci cosa voglio...

Ciao Max61
 
ciao Max,

per prima cosa ti suggerirei di usare una funzione per reperire i dati che servono per popolare il menu a tendina,
mantenere separato html da php rende tutto più facile da gestire e da leggere,
in particolare, puoi testare le diverse funzioni anche separatamente concentrandoti sul loro funzionamento e sul loro risultato
le funzioni puoi anche canservarle in un file che "includi" nello script html migliorando molto la leggibilità dello stesso

tornando al problema che prospetti, parli di due database (quindi non due tabelle dello stesso db),
ti posto un esempio con due tabelle nello stesso db, ma puoi modificarlo per selezionare i dati in successione dal primo db e poi dal secondo
l'esempio non controlla la duplicazione dei dati, quindi dovrai inserire questa funzionalità
PHP:
<?php
function selectLegale($db)
  {
  $sql  = "select ca_cod as legaleC1, ca_nr as legaleC2, ca_descr as legaleC3, ca_sort as legaleC4"
        . " from caratteristiche"
        . " order by ca_sort,ca_cod";
  $sth = $db->query( $sql ); 

  $risposta="";
  while( $row = $sth->fetch() )
    {
    $risposta.="<option value='".$row['legaleC1'].">".$row['legaleC3']."</option>";
    }

  $sql  = "select co_cod as legaleC1, co_nr as legaleC2, co_descr as legaleC3, co_sort as legaleC4"
        . " from componenti"
        . " order by co_sort,co_cod";
  $sth = $db->query( $sql ); 

  while( $row = $sth->fetch() )
    {
    $risposta.="<option value='".$row['legaleC1'].">".$row['legaleC3']."</option>";
    }

  return $risposta
  }
?>

nel caso avessi due tabelle nello stesso db, tutto diventa molto più semplice, integrando nella query il controllo dei duplicati
PHP:
<?php
function selectLegale($db)
  {
  $sql  = "select distinct x.legaleC1, x.legaleC2, x.legaleC3, x.legaleC4 from ( "
        . "select ca_cod as legaleC1, ca_nr as legaleC2, ca_descr as legaleC3, ca_sort as legaleC4"
        . " from caratteristiche"
        . " UNION ";
        . "select co_cod as legaleC1, co_nr as legaleC2, co_descr as legaleC3, co_sort as legaleC4"
        . " from componenti"
        . " ) x order by x.legaleC4, x.legaleC1";
  $sth = $db->query( $sql ); 

  $risposta="";
  while( $row = $sth->fetch() )
    {
    $risposta.="<option value='".$row['legaleC1'].">".$row['legaleC3']."</option>";
    }

  return $risposta
  }
?>

il codice html è banale con,
HTML:
<label for='Legale' name='LLegale' id='LLegale' >Legale : </label>
<select name='Legale' id='Legale'><?php echo selectLegale($db); ?></select>

spero di aver capito e di esserti stato utile, ciao
Marino
 
ciao Max,

per prima cosa ti suggerirei di usare una funzione per reperire i dati che servono per popolare il menu a tendina,
mantenere separato html da php rende tutto più facile da gestire e da leggere,
in particolare, puoi testare le diverse funzioni anche separatamente concentrandoti sul loro funzionamento e sul loro risultato
le funzioni puoi anche canservarle in un file che "includi" nello script html migliorando molto la leggibilità dello stesso

tornando al problema che prospetti, parli di due database (quindi non due tabelle dello stesso db),
ti posto un esempio con due tabelle nello stesso db, ma puoi modificarlo per selezionare i dati in successione dal primo db e poi dal secondo
l'esempio non controlla la duplicazione dei dati, quindi dovrai inserire questa funzionalità
PHP:
<?php
function selectLegale($db)
  {
  $sql  = "select ca_cod as legaleC1, ca_nr as legaleC2, ca_descr as legaleC3, ca_sort as legaleC4"
        . " from caratteristiche"
        . " order by ca_sort,ca_cod";
  $sth = $db->query( $sql ); 

  $risposta="";
  while( $row = $sth->fetch() )
    {
    $risposta.="<option value='".$row['legaleC1'].">".$row['legaleC3']."</option>";
    }

  $sql  = "select co_cod as legaleC1, co_nr as legaleC2, co_descr as legaleC3, co_sort as legaleC4"
        . " from componenti"
        . " order by co_sort,co_cod";
  $sth = $db->query( $sql ); 

  while( $row = $sth->fetch() )
    {
    $risposta.="<option value='".$row['legaleC1'].">".$row['legaleC3']."</option>";
    }

  return $risposta
  }
?>

nel caso avessi due tabelle nello stesso db, tutto diventa molto più semplice, integrando nella query il controllo dei duplicati
PHP:
<?php
function selectLegale($db)
  {
  $sql  = "select distinct x.legaleC1, x.legaleC2, x.legaleC3, x.legaleC4 from ( "
        . "select ca_cod as legaleC1, ca_nr as legaleC2, ca_descr as legaleC3, ca_sort as legaleC4"
        . " from caratteristiche"
        . " UNION ";
        . "select co_cod as legaleC1, co_nr as legaleC2, co_descr as legaleC3, co_sort as legaleC4"
        . " from componenti"
        . " ) x order by x.legaleC4, x.legaleC1";
  $sth = $db->query( $sql ); 

  $risposta="";
  while( $row = $sth->fetch() )
    {
    $risposta.="<option value='".$row['legaleC1'].">".$row['legaleC3']."</option>";
    }

  return $risposta
  }
?>

il codice html è banale con,
HTML:
<label for='Legale' name='LLegale' id='LLegale' >Legale : </label>
<select name='Legale' id='Legale'><?php echo selectLegale($db); ?></select>

spero di aver capito e di esserti stato utile, ciao
Marino



Ciao Marino hai centrato il problema, ho due tabelle nello stesso db le tabelle si chiamano tblverbali e tbllegale1, ho fatto le modifiche del caso ma sicuramente sbaglio qualcosa perchè mi da errore qui . "select co_cod as Legale" .
Allego errore
Parse error: syntax error, unexpected '.' in C:\xampp\htdocs\GestioneSinistri\views\Edit_Verbali.php on line 272


PHP:
<?php 

function selectLegale($db) 
  { 
  $sql  = "select distinct tblverbali.Legale from ( " 
        . "select ca_cod as Legale" 
        . " from tblverbali" 
        . " UNION "; 
        . "select co_cod as Legale" 
        . " from tblverbali" 
        . " ) tbllegale1 order by tblverbali.Legale"; 
  $sth = $db->query( $sql );  

  $risposta=""; 
  while( $row = $sth->fetch() ) 
    { 
    $risposta.="<option value='".$row['Legale']."></option>"; 
    } 

  return $risposta 
  } 

?>

Ciao
Max61
 
Ciao Marino hai centrato il problema, ho due tabelle nello stesso db le tabelle si chiamano tblverbali e tbllegale1, ho fatto le modifiche del caso ma sicuramente sbaglio qualcosa perchè mi da errore qui . "select co_cod as Legale" .
Allego errore
Parse error: syntax error, unexpected '.' in C:\xampp\htdocs\GestioneSinistri\views\Edit_Verbali.php on line 272


PHP:
<?php 

function selectLegale($db) 
  { 
  $sql  = "select distinct tblverbali.Legale from ( " 
        . "select ca_cod as Legale" 
        . " from tblverbali" 
        . " UNION "; 
        . "select co_cod as Legale" 
        . " from tblverbali" 
        . " ) tbllegale1 order by tblverbali.Legale"; 
  $sth = $db->query( $sql );  

  $risposta=""; 
  while( $row = $sth->fetch() ) 
    { 
    $risposta.="<option value='".$row['Legale']."></option>"; 
    } 

  return $risposta 
  } 

?>

Ciao
Max61



Ciao Marino ho fatto alcune modifiche alla query non mi da alcun errore ma il campo Legale rimane vuoto
Allego codice modificato:
PHP:
<?php
function selectLegale($db)
  {
  $sql  = "SELECT * FROM tblverbali UNION SELECT * FROM tbllegale1;";
  $sth = $db->query( $sql ); 

  $risposta="";
  while( $row = $sth->fetch() )
    {
    $risposta.="<option value='".$row['Legale1']."></option>";
    }

  return $risposta;
  }
?>

<label for='Legale1' name='Legale1' id='LLegale' >Legale : </label>
<select name='Legale1' id='Legale1'><?php echo selectLegale($db); ?></select>

Vedi se trovi il motivo...
Grazie
Ciao
 
PHP:
function selectLegale($db)  
  {  
  $sql  = "select distinct tblverbali.Legale from ( "  
        . "select ca_cod as Legale"  
        . " from tblverbali"  
        . " UNION ";  
        . "select co_cod as Legale"  
        . " from tblverbali"  
        . " ) tbllegale1 order by tblverbali.Legale";  
  $sth = $db->query( $sql );   

  $risposta="";  
  while( $row = $sth->fetch() )  
    {  
    $risposta.="<option value='".$row['Legale']."></option>";  
    }  
  return $risposta  
  }  
?>

partendo da questa funzione, hai lasciato i miei nomi "ca_cod" e "co_cod", dovresti sostituirli con i nomi presenti in tabella

qui
PHP:
value='".$row['Legale'].">
manca l'apice di chiusura del value
PHP:
value='".$row['Legale']."'>

gestisci così il data base
PHP:
$sth = $db->query( $sql );
?

adatta bene il codice che ti ho postato
ciao
Marino
 
Ciao Marino ho modificato il tuo codice perchè non riesco a farlo funzionare, non legge nessuna tabella perchè il menu a tendina è sempre vuoto.
Con il codice che ho fatto legge tutte due le tabelle che mi interessano, però ancora non ci siamo perchè mi legge sempre il primo record della tabella di destinazione (tblverbali) e non il valore inserito in precedenza, ho verificato in tabella i valori sono quelli inseriti, è un problema di lettura è come se gli mancasse l'ID giusto
Allego codice per vedere se è possibile fare una modifica
PHP:
<?php
$Query1="SELECT DISTINCT tblverbali.Legale1 FROM tblverbali 
		 UNION
		 SELECT DISTINCT tbllegale1.Legale1 FROM tbllegale1";
       //esecuzione della query 
     	   $Leggi_Legale1=@mysql_query($Query1) or die (mysql_error());
       if(!$Leggi_Legale1)
         print("<H2>Queryfallita!</H2>");
       else
	   echo "<select name='Legale1' id='Legale1id'>";//Genera casella a discesa
	   while ($row = mysql_fetch_array($Leggi_Legale1)) 
{ 
$Legale1 = $row['Legale1'];

echo "<option value =\"$Legale1\">$Legale1 </option>"; //Popola casella
}
echo "value=$Legale1 </select>"; 		
?>

Ciao e grazie per la pazienza
Max61
 
Codice:
select distinct x.Legale1 from ( 
select Legale1 from tblverbali
 UNION 
select Legale1 from tbllegale1
 ) x order by x.Legale1
senza modificare nulla (solo copia incolla senza perdere caratteri), puoi provare questa query e valutare se il suo risultato è corretto ?
attendo risposta
grazie
Marino
 
Codice:
select distinct x.Legale1 from ( 
select Legale1 from tblverbali
 UNION 
select Legale1 from tbllegale1
 ) x order by x.Legale1
senza modificare nulla (solo copia incolla senza perdere caratteri), puoi provare questa query e valutare se il suo risultato è corretto ?
attendo risposta
grazie
Marino

Ciao Marino ho provato il tuo codice ma il menu è sempre vuoto mentre nella tabella i dati ci sono
Allego codice
PHP:
<?php
$Query1="select distinct x.Legale1 from ( 
select Legale1 from tblverbali
 UNION 
select Legale1 from tbllegale1
 ) x order by x.Legale1";
       //esecuzione della query 
     	   $Leggi_Legale1=@mysql_query($Query1) or die (mysql_error());
       if(!$Leggi_Legale1)
         print("<H2>Queryfallita!</H2>");
       else
	   echo "<select name='Legale1' id='Legale1id'>";//Genera casella a discesa
	   while ($row = mysql_fetch_array($Leggi_Legale1)) 
{ 
$Legale1 = $row['Legale1'];

echo "<option value =\"$Legale1\">$Legale1 </option>"; //Popola casella
}
echo "value=$Legale1 </select>"; 		
?>

Ciao
Max61
 
posso capire che nella tabella i dati ci sono, ma ti ho chiesto,

"
senza modificare nulla (solo copia incolla senza perdere caratteri), puoi provare questa query e valutare se il suo risultato è corretto ?
"

puoi rispondere alla mia domanda ?
grazie
Marino
 
Ciao Marino la tua Query legge correttamente la tabella di partenza tbllegale1 ma non legge la tabella tblverbali. Non so se è questo che volevi sapere.
Ciao
Max61
 
ma non legge la tabella tblverbali
Codice:
SELECT DISTINCT tblverbali.Legale1 FROM tblverbali
Max, questa query l'hai scritta tu .... , funziona ?

Codice:
SELECT Legale1 FROM tblverbali
io ho tolto ciò che mi sembra ridondante, funziona ?
ciao
Marino
 
Ciao Marino per la query ho preso spunto da esempi in rete che allego sotto.
PHP:
SELECT column_name(s) FROM table1 
UNION
SELECT column_name(s) FROM table2 ;


PHP:
<?php
$Query1="SELECT DISTINCT tblverbali.Legale1 FROM tblverbali
		 UNION
		 SELECT DISTINCT tbllegale1.Legale1 FROM tbllegale1";
       //esecuzione della query 
     	   $Leggi_Legale1=@mysql_query($Query1) or die (mysql_error());
       if(!$Leggi_Legale1)
         print("<H2>Queryfallita!</H2>");
       else
	   echo "<select name='Legale1' id='Legale1id'>";//Genera casella a discesa
	   while ($row = mysql_fetch_array($Leggi_Legale1)) 
{ 
$Legale1 = $row['Legale1'];

echo "<option value =\"$Legale1\">$Legale1 </option>"; //Popola casella
}
echo "value=$Legale1 </select>"; 		
?>
Questa query funziona nel senso che legge la tabella di partenza tbllegale1 e quella di arrivo tblverbali, l'unico inconveniente è che nella lettura va a leggere soltanto il nominativo scritto nel primo record della tabella tblverbali, indipendentemente dal record selezionato, come se mancasse l'ID relativo al record.
Esempio
Record 1 Legale Pippo
Record 2 Legale Minnie
Record 3 Legale Paperino
quando vado a selezionare qualsiasi record mi legge sempre il primo, Legale Pippo.
Con la speranza di essermi spiegato ti saluto e ringrazio del tempo che mi dedichi

Ciao
Max61
 
ciao Max, prima dobbiamo "sintonizzarci",

hai 2 tabelle con le stesse info per i Legali,
all'interno di ciascuna tabella ci sarà un "id" e un "nome del Legale"

spero che il "Legale x" abbia lo stesso "id" nelle due tabelle, altrimenti sorge un primo problema

in ogni caso la "select" delle due tabelle, deve estrarre,
"id" da inserire come "valore da restituire" nel menu a tendina
"nome del Legale" da inserire nel menu come descrizione, per far capire a chi lo usa cosa sta scegliendo

se così è, la query e la funzione, tornano ad essere

PHP:
<?php 
function selectLegale() 
  { 
  $Query1  = "select distinct x.id, x.Legale1 from ( " 
           . "select id, Legale1 from tblverbali" 
           . " UNION "
           . "select id, Legale1 from tbllegale1" 
           . " ) x order by x.Legale1"; 
  $Leggi_Legale1 = mysql_query($Query1) or die (mysql_error());

  $risposta=""; 
  while ( $row = mysql_fetch_array($Leggi_Legale1) )
    { 
    $risposta.="<option value='".$row['id'].">".$row['Legale1']."</option>";
    } 
  return $risposta 
  } 
?>
ciao
Marino
 
ciao Max, prima dobbiamo "sintonizzarci",

hai 2 tabelle con le stesse info per i Legali,
all'interno di ciascuna tabella ci sarà un "id" e un "nome del Legale"

spero che il "Legale x" abbia lo stesso "id" nelle due tabelle, altrimenti sorge un primo problema

in ogni caso la "select" delle due tabelle, deve estrarre,
"id" da inserire come "valore da restituire" nel menu a tendina
"nome del Legale" da inserire nel menu come descrizione, per far capire a chi lo usa cosa sta scegliendo

se così è, la query e la funzione, tornano ad essere

PHP:
<?php 
function selectLegale() 
  { 
  $Query1  = "select distinct x.id, x.Legale1 from ( " 
           . "select id, Legale1 from tblverbali" 
           . " UNION "
           . "select id, Legale1 from tbllegale1" 
           . " ) x order by x.Legale1"; 
  $Leggi_Legale1 = mysql_query($Query1) or die (mysql_error());

  $risposta=""; 
  while ( $row = mysql_fetch_array($Leggi_Legale1) )
    { 
    $risposta.="<option value='".$row['id'].">".$row['Legale1']."</option>";
    } 
  return $risposta 
  } 
?>
ciao
Marino


Ciao Marino, ho provato il tuo codice ma non genera il menu a tendina, il valore dell'id nella tabella tblverbali non glielo passo, gli passo soltanto il nome.

Ciao
Max61
 
ciao Max, prima dobbiamo "sintonizzarci",

hai 2 tabelle con le stesse info per i Legali,
all'interno di ciascuna tabella ci sarà un "id" e un "nome del Legale"

spero che il "Legale x" abbia lo stesso "id" nelle due tabelle, altrimenti sorge un primo problema

in ogni caso la "select" delle due tabelle, deve estrarre,
"id" da inserire come "valore da restituire" nel menu a tendina
"nome del Legale" da inserire nel menu come descrizione, per far capire a chi lo usa cosa sta scegliendo

se così è, la query e la funzione, tornano ad essere

PHP:
<?php 
function selectLegale() 
  { 
  $Query1  = "select distinct x.id, x.Legale1 from ( " 
           . "select id, Legale1 from tblverbali" 
           . " UNION "
           . "select id, Legale1 from tbllegale1" 
           . " ) x order by x.Legale1"; 
  $Leggi_Legale1 = mysql_query($Query1) or die (mysql_error());

  $risposta=""; 
  while ( $row = mysql_fetch_array($Leggi_Legale1) )
    { 
    $risposta.="<option value='".$row['id'].">".$row['Legale1']."</option>";
    } 
  return $risposta 
  } 
?>
ciao
Marino


Ciao Marino volevo comunicarti che c'e l'ho fatta, adesso mi legge correttamente nelle 2 tabelle, unica cosa mi taglia la pagina alla fine del menu a tendina, mica riesci a capire il perchè?
Allego codice modificato
PHP:
<?php
$Query1="SELECT DISTINCT tblverbali.Legale1 FROM tblverbali
		 UNION
		 SELECT DISTINCT tbllegale1.Legale1 FROM tbllegale1";
       //esecuzione della query 
     	   $Leggi_Legale1=@mysql_query($Query1) or die (mysql_error());
       if(!$Leggi_Legale1)
         print("<H2>Queryfallita!</H2>");
       else
	   echo "<select name='Legale1' id='Legale1id'>";//Genera casella a discesa
	   while ($row = mysql_fetch_array($Leggi_Legale1)) 
{ 
//$Legale1 = $row['Legale1'];//ORIGINALE

$Legale1.="<option value='".$row['id'].">".$row['Legale1']."</option>";//MODIFICATO CON IL TUO CODICE

echo "<option value =\"$Legale1\">$Legale1 </option>"; //Popola casella
}
echo "value=$Legale1 </select>"; //DA QUI IN POI NON VEDO GLI ALTRI CAMPI DELLA PAGINA, E' COME SE CI FOSSE UN EXIT;		
?>

Ciao
Max61
 

Discussioni simili