Ciao a tutti.
Ho una form con i campi select provincia, comune e cap che prendono i dati dal db e che si compilano in base alla scelta della select precedente: le classiche select dinamiche.
Il problema è che ho 2 gruppi di queste select nella stessa form e ho dovuto adottare un espediente un pò bruttino; vi illustro il codice cosi capite.
class.php
Codice PHP:
class Form
{
var $label;
var $id;
var $name;
var $type;
var $radio = array();
function set_var($a, $b, $c, $d)
{
$this->label = $a;
$this->id = $b;
$this->name = $c;
$this->type = $d;
}
function create_field()
{
switch($this->type)
{
.......
case "dynamic_select":
echo "
<label for='".$this->id."'>".$this->label."</label>";
echo "<font id='".$this->id."'>";
echo "<select name='".$this->name."'>";
echo "<option value='0'>----</option>";
echo "</select></font></p>";
break;
}
}
}
form.php
Codice PHP:
<script type="text/javascript" src="../js/ajax_cap.js">
</script>
<script type="text/javascript">
//<![CDATA[
window.onLoad=[b]dochange[/b]('id_12', -1),[b]dochange1[/b]('id_29',-1); // carica la prima select
//]]>
</script>
...
<form>
$field = new Form;
$field->set_var('Provincia','id_12','es_12','dynamic_select');//primo gruppo
$field->create_field();
$field->set_var('Comune','id_13','es_13','dynamic_select');//primo gruppo
$field->create_field();
$field->set_var('Cap','id_14','es_14','dynamic_select');//primo gruppo
$field->create_field();
$field->set_var('Provincia','id_29','es_29','dynamic_select');//secondo gruppo
$field->create_field();
$field->set_var('Comune','id_30','es_30','dynamic_select');//secondo gruppo
$field->create_field();
$field->set_var('Cap','id_31','es_31','dynamic_select');//secondo gruppo
$field->create_field();
</form>
ajax_cap.js
codice:
function Inint_AJAX()
{
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {} //IE
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {} //IE
try { return new XMLHttpRequest(); } catch(e) {} //Native Javascript
alert("XMLHttpRequest not supported");
return null;
};
function dochange(src, val)
{
var req = Inint_AJAX();
req.onreadystatechange = function ()
{
if (req.readyState==4)
{
if (req.status==200)
{
document.getElementById(src).innerHTML=req.responseText; //retuen value
}
}
};
req.open("GET", "../application/italia.php?data="+src+"&val="+val); //make connection
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=iso-8859-1"); // set Header
req.send(null); //send value
}
function dochange1(src, val)
{
var req = Inint_AJAX();
req.onreadystatechange = function ()
{
if (req.readyState==4)
{
if (req.status==200)
{
document.getElementById(src).innerHTML=req.responseText; //retuen value
}
}
};
req.open("GET", "../application/italia1.php?data="+src+"&val="+val); //make connection
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=iso-8859-1"); // set Header
req.send(null); //send value
}
italia.php
Codice PHP:
<?
include("../config/config.php");
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header("content-type: application/x-javascript; charset=tis-620");
$data=$_GET['data'];
$val=$_GET['val'];
if ($data=='id_12') { // prima select
echo "<select class='text' name='provincia' onChange=\"[b]dochange[/b]('id_13', this.value)\">\n";
echo "<option value='0'>Scegli la provincia</option>\n";
$result=mysql_query("select `id`, `nome` from province order by `id`");
while(list($id, $name)=mysql_fetch_array($result)){
echo "<option value=\"$id\" >$name</option> \n" ;
}
} else if ($data=='id_13') { // seconda select
echo "<select class='text' name='comune' onChange=\"[b]dochange[/b]('id_14', this.value)\">\n";
echo "<option value='0'>scegli il comune</option>\n";
$result=mysql_query("SELECT `id`, `nome` FROM comuni WHERE `id_province` = '$val' ORDER BY `id` ");
while(list($id, $name)=mysql_fetch_array($result)){
echo "<option value=\"$id\" >$name</option> \n" ;
}
} else if ($data=='id_14') { // terza select
echo "<select class='text' name='cap' >\n";
$result=mysql_query("SELECT `id`, `nome` FROM cap WHERE `id_comuni` = '$val' ORDER BY `id` ");
while(list($id, $name)=mysql_fetch_array($result)){
echo "<option value=\"$id\" >$name</option> \n" ;
}
}
echo "</select>\n";
?>
italia1.php
Codice PHP:
<?
include("../config/config.php");
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header("content-type: application/x-javascript; charset=tis-620");
$data=$_GET['data'];
$val=$_GET['val'];
if ($data=='id_29') { // prima select
echo "<select class='text' name='provincia1' onChange=\"[b]dochange1[/b]('id_30', this.value)\">\n";
echo "<option value='0'>Scegli la provincia</option>\n";
$result=mysql_query("select `id`, `nome` from province order by `id`");
while(list($id, $name)=mysql_fetch_array($result)){
echo "<option value=\"$id\" >$name</option> \n" ;
}
} else if ($data=='id_30') { // seconda select
echo "<select class='text' name='comune1' onChange=\"[b]dochange1[/b]('id_31', this.value)\">\n";
echo "<option value='0'>scegli il comune</option>\n";
$result=mysql_query("SELECT `id`, `nome` FROM comuni WHERE `id_province` = '$val' ORDER BY `id` ");
while(list($id, $name)=mysql_fetch_array($result)){
echo "<option value=\"$id\" >$name</option> \n" ;
}
} else if ($data=='id_31') { // terza select
echo "<select class='text' name='cap1' >\n";
$result=mysql_query("SELECT `id`, `nome` FROM cap WHERE `id_comuni` = '$val' ORDER BY `id` ");
while(list($id, $name)=mysql_fetch_array($result)){
echo "<option value=\"$id\" >$name</option> \n" ;
}
}
echo "</select>\n";
?>
in pratica la funzione dochange() carica il primo gruppo inviando la richiesta a italia.php,
mentre la funzione dochange1() carica il secondo gruppo inviando la richiesta a italia1.php.
In questo modo devo avere tante funzioni e tanti file italia.php quanti sono i gruppi di select nella form.
La domanda è:
Posso raggruppare tutto in una funzione 'dochange()' e in un file 'italia.php'?