In realtà avevo già chiesto la stessa cosa in un altra discussione ma data la mia inesperienza è diventata presto confusa. cerco di riiniziare con più ordine:

Cosa voglio fare:

Una select che si popoli con i dati di una tabella (es delle categorie di articoli) e che alla mia scelta mi popoli un'altra select con tutti gli articoli che appartengono alla categoria scelta. dopodichè io seleziono l'articolo che mi interessa e lui mi manda ad un'altra pagina il valore (tipo il prezzo) di quell'articolo.

mi è stato passato gentilmente questo script di 13manuel84 :
Codice PHP:
Originariamente inviato da 13manuel84 
beh, la cosa la puoi fare così (come faccio sempre io): nel primo menù prendi tutte le categorie presenti nel db, e nel secondo tramite un'altra query prendi solo le sottocategorie appartenenti alla categoria selezionata; per fare questo io uso due tabelle, una per la categorie (id_categoria, tipo_categoria) e una per le gruppo(id_gruppo, tipo_gruppo, id_categoria), e per realizzarlo è un misto di php, sql e js.

Menù per le categorie: 
codice:<select name="categoria" onChange="inviaCambiamenti()">
<?
 query
="SELECT * FROM categoria order by 'tipo_categoria'";
 
$result mysql_query($query);
 echo 
"<option value=\"\">Seleziona</option>";
 while(
$row mysql_fetch_assoc($result))
 {
  if(!empty(
$categoria))
  {
   if (
$row[id_categoria]<>$categoria)
   {
    echo 
'<option value="'.$row[id_categoria].'" >'.$row[tipo_categoria].'</option>';
   }
   else                    
   {
    echo 
'<option value="'.$row[id_categoria].'" SELECTED>'.$row[tipo_categoria].'</option>';            
   }
  }
  else 
  {
   echo 
'<option value="'.$row[id_categoria].'">'.$row[tipo_categoria].'</option>';
  }
}
?>
</select>

Menù per le sottocategorie: 
codice:<select name="gruppo">
<?
  $query
="SELECT * FROM gruppo WHERE id_categoria='$categoria' order by 'tipo_gruppo'";
  
$result mysql_query($query);
  echo 
"<option value=\"\">Seleziona</option>";
  while(
$row mysql_fetch_assoc($result))
  {
   if(!empty(
$gruppo))
   {
    if (
$row[id_gruppo]<>$gruppo)
    {
    echo 
'<option value="'.$row[id_gruppo].'" >'.$row[tipo_gruppo].'</option>';
    }
    else                    
    {
     echo 
'<option value="'.$row[id_gruppo].'" SELECTED>'.$row[tipo_gruppo].'</option>';
    }
   }
   else 
   {
    echo 
'<option value="'.$row[id_gruppo].'">'.$row[tipo_gruppo].'</option>';
   }
}
?>
</select>

n.b. il codice vale per la struttura delle tabelle che ho usato io, se la tua è diversa ricordati di modificare leggermente il codice.

la funzione che vedi (onChange="inviaCambiamenti()") è una funzione js che ricarica la pagina inviando il valore della categoria selezionata, in modo da poter fare la seconda query; la devi mettere nell'head dell'html:

codice:<script language="javascript">

function inviaCambiamenti(){
  document.form1.action = "<?php echo $PHP_SELF?>";
  document.form1.submit();
}

</script>

form1 è il nome della form in cui hai messo i menù, se è diverso cambialo pure nella funzione.


Io l'ho adattato al mio codice e.... qualcuno può darmi una mano? :master:

Codice PHP:
<title>Documento senza titolo</title> 


<script language="javascript"> 

function inviaCambiamenti(){ 
  document.form1.action = "<?php echo $PHP_SELF?>"; 
  document.form1.submit(); 


</script> 

</head> 


<body> 
<form name="form1" action="somma_preventivo.php" method="post"> 
<select name="categoria" onChange="inviaCambiamenti()"> 
<?php 
include("mysql.php"); 
$query"SELECT Descrizione FROM categoria"
$result mysql_query($query); 
echo 
"<option value=\"\">Seleziona</option>"
while(
$row mysql_fetch_assoc($result)) 

  if(!empty(
$categoria)) 
  { 
   if (
$row['Descrizione']<>$categoria
   { 
    echo 
'<option value="'.$row['Descrizione'].'" >'.$row['Descrizione'].'</option>'
   } 
   else                     
   { 
    echo 
'<option value="'.$row['Descrizione'].'" SELECTED>'.$row['Descrizione'].'</option>';             
   } 
  } 
  else 
  { 
   echo 
'<option value="'.$row['Descrizione'].'">'.$row['Descrizione'].'</option>'
  } 

?> 
</select> 




<select name="gruppo"> 
<? 
  $query
="SELECT * FROM listino WHERE Categoria='$categoria' order by 'Descrizione'"
  
$result mysql_query($query); 
  echo 
"<option value=\"\">Seleziona</option>"
  while(
$row mysql_fetch_assoc($result)) 
  { 
   if(!empty(
$gruppo)) 
   { 
    if (
$row[Descrizione]<>$gruppo
    { 
    echo 
'<option value="'.$row['Prezzo_Unitario'].'" >'.$row['Descrizione'].'</option>'
    } 
    else                     
    { 
     echo 
'<option value="'.$row['Prezzo_Unitario'].'" SELECTED>'.$row['Descrizione'].'</option>'
    } 
   } 
   else 
   { 
    echo 
'<option value="'.$row['Prezzo_Unitario'].'">'.$row['Descrizione'].'</option>'
   } 

?> 
</select> 


<input name="submit" type="submit" value="Invia" /> 
</form> 


</body> 
</html>