Ciao a tutti!
Vorrei ottenere una specie di configuratore di prodotto con select a cascata concatenate per individuare tramite le varie opzioni il prodotto desiderato.

Per questo ho modificato un esempio di select a cascata (regioni-province-comuni)
http://www.yourinspirationweb.com/20...-php-e-jquery/

Sono arrivata al 5° livello (se ne ipotizzano una decina se possibile) ma non riesco a proseguire... sicuramente per mia ignoranza di codice, avrò sbagliato da qualche parte ma penso soprattutto nell'ultima select in cui mi si ingarbugliano le condizioni :/

Mi scuso già per il post lunghissimo ma vi riporto il codice.

Utilizzo un'unica tabella del tipo:

codice----tipo-----base_mat------len

numero tipo1 materiale1 lunghezza1 ...
numero tipo1 materiale2 lunghezza1 ...
numero tipo2 materiale1 lunghezza2 ...

i file:
db_config.php contiene i parametri di connessione al database.
jquery-1.3.2.js è il file che si può scaricare dal link sopra

select.php

Codice PHP:
<?php

include_once 'select.class.php';
$opt = new SelectList();

if(isset(
$_POST['tipo']))
{
    echo 
$opt->ShowBaseMaterial();
    die;
}

if(isset(
$_POST['base_mat']))
{
    echo 
$opt->ShowLen();
    die;
}

if(isset(
$_POST['len']))
{
    echo 
$opt->ShowStudSize();
    die;
}

if(isset(
$_POST['stud_size']))
{
    echo 
$opt->ShowBaseSize();
    die;
}

?>
select.class.php

Codice PHP:
<?php
class SelectList{
    protected 
$conn;
        public function 
__construct()
        {
            
$this->DbConnect();
        }
    
        protected function 
DbConnect()
        {
        include 
"db_config.php";
        
$this->conn mysql_connect($host,$user,$password) OR die("Impossibile connettersi al database");
        
mysql_select_db($db,$this->conn) OR die("Impossibile selezionare il database $db");
        return 
TRUE;
        }
        
        public function 
ShowTipo()
        {
            
$sql "SELECT DISTINCT tipo FROM prodotti";
            
$res mysql_query($sql,$this->conn);
            
$tipo '<option value="0">scegli...</option>';
                while(
$row mysql_fetch_array($res))
                {
                    
$tipo .= '<option value="' $row['tipo'] . '">' utf8_encode($row['tipo']) . '</option>';
                }
            return 
$tipo;
        }
        
        public function 
ShowBaseMaterial()
        {
            if(isset(
$_POST['tipo'])){
            
$tipo $_POST["tipo"];
            
$sql "SELECT DISTINCT base_mat FROM prodotti WHERE tipo = \"$tipo\" GROUP BY base_mat";
            
$res mysql_query($sql,$this->conn);
            
$base_mat '<option value="0">scegli...</option>';
            
                while(
$row mysql_fetch_array($res))
                {
                    
$base_mat .= '<option value="' $row['base_mat'] . '">' utf8_encode($row['base_mat']) . '</option>';
                }
            return 
$base_mat;
            }
        }
        public function 
ShowLen()
        {
            if(isset(
$_POST['base_mat'])){
            
            
$base_mat $_POST["base_mat"];
            
$tipo $_POST["tipo"];
            
            
$sql "SELECT DISTINCT len FROM prodotti WHERE base_mat = \"$base_mat\" AND tipo LIKE \"%$tipo%\" GROUP BY len";
            
            
$res mysql_query($sql,$this->conn);
            
$len '<option value="0">scegli...</option>';
            
                while(
$row mysql_fetch_array($res))
                {
                    
$len .= '<option value="'$row['len'] . '">' utf8_encode($row['len']) . '</option>';
                }
            return 
$len;
            }
        }
        public function 
ShowStudSize()
        {
            if(isset(
$_POST['len'])){
            
$len $_POST["len"];
            
$base_mat $_POST["base_mat"];
            
$tipo $_POST["tipo"];
            
            
$sql "SELECT DISTINCT stud_size FROM prodotti WHERE len = \"$len\" AND base_mat LIKE \"%$base_mat%\" AND tipo LIKE \"%$tipo%\" GROUP BY stud_size";
            
            
$res mysql_query($sql,$this->conn);
            
$stud_size '<option value="0">scegli...</option>';
            
                while(
$row mysql_fetch_array($res))
                {
                    
$stud_size .= '<option value="' $row['stud_size'] . '">' utf8_encode($row['stud_size']) . '</option>';
                }
            return 
$stud_size;
            }
        }
        public function 
ShowBaseSize()
        {
            if(isset(
$_POST['stud_size'])){
            
            
$stud_size $_POST["stud_size"];
            
$len $_POST["len"];
            
$base_mat $_POST["base_mat"];
            
$tipo $_POST["tipo"];
            
            
$sql "SELECT DISTINCT base_size FROM prodotti WHERE stud_size = \"$stud_size\" AND (len LIKE \"%$len%\" AND base_mat LIKE \"%$base_mat%\" AND tipo LIKE \"%$tipo%\") GROUP BY base_size";
        
//    $sql = "SELECT DISTINCT base_size FROM prodotti WHERE base_size IN (SELECT stud_size FROM prodotti WHERE len = \"$len\" AND (base_mat LIKE \"%$base_mat%\" AND tipo LIKE \"%$tipo%\"))";
            
            
$res mysql_query($sql,$this->conn);
            
$base_size '<option value="0">scegli...</option>';
            
                while(
$row mysql_fetch_array($res))
                {
                    
$base_size .= '<option value="' $row['base_size'] . '">' utf8_encode($row['base_size']) . '</option>';
                }
            return 
$base_size;
            }
        }    
}
?>
Questo è index.php

codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

<html>

<head>
	<meta http-equiv="content-type" content="text/html charset=utf-8">
	<meta name="author" content="Baba - IseoComSolution" >

	<script type="text/javascript" src="jquery-1.3.2.js"></script>

	<link href="screen.css" rel="stylesheet" type="text/css" />
	<title>Test catalogo configuratore Mbase_sizein</title>
	
	<script type="text/javascript">
	$(document).ready(function(){

		var scegli = '<option value="0">Scegli...</option>';
		var attendere = '<option value="0">Attendere...</option>';
		
		$("select#base-material").html(scegli);
		$("select#base-material").attr("disabled", "disabled");
		$("select#len").html(scegli);
		$("select#len").attr("disabled", "disabled");
		$("select#stud_size").html(scegli);
		$("select#stud_size").attr("disabled", "disabled");
		$("select#base_size").html(scegli);
		$("select#base_size").attr("disabled", "disabled");
		
		$("select#tipo").change(function(){
			var tipo = $("select#tipo option:selected").attr('value');
			$("select#base-material").html(attendere);
			$("select#base-material").attr("disabled", "disabled");
			$("select#len").html(scegli);
			$("select#len").attr("disabled", "disabled");
			$("select#stud_size").html(scegli);
			$("select#stud_size").attr("disabled", "disabled");
			$("select#base_size").html(scegli);
			$("select#base_size").attr("disabled", "disabled");
			
			$.post("select.php", {tipo:tipo}, function(data){
				$("select#base-material").removeAttr("disabled"); 
				$("select#base-material").html(data);	
			});
		});	


		$("select#base-material").change(function(){
			var base_mat = $("select#base-material option:selected").attr('value');
			$("select#len").html(attendere);
			$("select#len").attr("disabled", "disabled");
			$("select#stud_size").html(scegli);
			$("select#stud_size").attr("disabled", "disabled");
			$("select#base_size").html(scegli);
			$("select#base_size").attr("disabled", "disabled");
			
			$.post("select.php", {base_mat:base_mat}, function(data){
				$("select#len").removeAttr("disabled"); 
				$("select#len").html(data);	
			});
		});	
		
		$("select#len").change(function(){
			var len = $("select#len option:selected").attr('value');
			$("select#stud_size").html(scegli);
			$("select#stud_size").attr("disabled", "disabled");
			$("select#base_size").html(scegli);
			$("select#base_size").attr("disabled", "disabled");
			
			$.post("select.php", {len:len}, function(data){
				$("select#stud_size").removeAttr("disabled"); 
				$("select#stud_size").html(data);	
			});
		});
		
		$("select#stud_size").change(function(){
			var stud_size = $("select#stud_size option:selected").attr('value');
			$("select#base_size").html(scegli);
			$("select#base_size").attr("disabled", "disabled");
			
			$.post("select.php", {stud_size:stud_size}, function(data){
				$("select#base_size").removeAttr("disabled"); 
				$("select#base_size").html(data);	
			});
		});
		
		
		
		

		$("select#base_size").change(function(){
			var base_size = $("select#base_size option:selected").attr('value');
			
			$.post("select.php", {base_size:base_size}, function(data){

			});
		});
		
	});
	
	</script>
</head>
<?php
include_once 'select.class.php';
$opt = new SelectList();
?>
<body>
	<div id="container">
	
	<h1>Test catalogo configuratore</h1>
	<h2>Seleziona:</h2>
	
		<form action="?" id="myform" method="post">
			Seleziona il prodotto:

			<select id="tipo">
				<?php echo $opt->ShowTipo(); ?>
			</select>
			


			
			Seleziona il materiale:

			<select id="base-material">
			<option>Scegli...</option>
			</select>
			


		
			Seleziona lenght:

			<select id="len">
			<option>Scegli...</option>
			</select>
			


			
			Seleziona stud size:

			<select id="stud_size">
			<option>Scegli...</option>
			</select>
			


			
			Seleziona base size:

			<select id="base_size">
			<option>Scegli...</option>
			</select>
			


			
			
			
		</div>
	</form>


</body>
</html>