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>