Ciao a tutti.
Sto utilizzando uno script per select dinamiche per l'inserimento in un database di due select, in cui la seconda si aggiorna dopo aver selezionato la prima.
Vorrei utilizzare questo script anche per la modifica dei prodotti inseriti, ma non riesco ad impostare quale <option> deve essere "selected".
lo script utilizza questi files;
list.js
codice:
var xmlHttp = getXmlHttpObject();
function loadList(tb, id){
xmlHttp.open('GET', 'request.php?table='+tb+'&id='+id, true);
xmlHttp.onreadystatechange = stateChanged;
xmlHttp.send(null);
}
function addOption(select, value, text) {
//Aggiunge un elemento <option> ad una lista <select>
var option = document.createElement("option");
option.value = value,
option.text = text;
try {
select.add(option, null);
} catch(e) {
//Per Internet Explorer
select.add(option);
}
}
function getSelected(select) {
//Ritorna il valore dell'elemento <option> selezionato in una lista
return select.options[select.selectedIndex].value;
}
function stateChanged() {
if(xmlHttp.readyState == 4) {
//Stato OK
if (xmlHttp.status == 200) {
var resp = xmlHttp.responseText;
if(resp) {
//Le coppie di valori nella striga di risposta sono separate da ;
var values = resp.split(';');
//Il primo elemento è l'ID della lista.
var listId = values.shift();
var select = document.getElementById(listId);
//Elimina i valori precedenti
while (select.options.length) {
select.remove(0);
}
if(listId == 'sezioni') {
addOption (select, 0, '-- Seleziona sezione --');
}
var limit = values.length;
for(i=0; i < limit; i++) {
var pair = values[i].split('|');
//aggiunge un elemento <option>
addOption(select, pair[0], pair[1]);
}
}
} else {
alert(xmlHttp.responseText);
}
}
}
function getXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
request.php
Codice PHP:
<?php
// questo file serve per comporre le select dinamiche delle categorie
define('DB_HOST','xx.xxx.xxx.xx');
define('DB_NAME','nomedatabase');
define('DB_USER','user');
define('DB_PASSWORD','password');
$conn = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die;
mysql_select_db(DB_NAME) or die;
//I valori in input vanno verificati
//id deve essere un valore numerico
$pid = (int)$_REQUEST['id'];
//maschera eventuali caratteri speciali in table
$tb = mysql_real_escape_string($_REQUEST['table'], $conn);
switch($tb) {
case 'sezioni':
$sql="SELECT id, nome FROM `$tb` ORDER BY nome";
break;
case 'categorie':
$sql="SELECT id, nome FROM `$tb` WHERE id_sezione=$pid ORDER BY nome";
break;
}
//Il primo elemento della risposta è il nome della tabella (= attributo ID del tag select)
$out="$tb;";
if($result = mysql_query($sql, $conn)) {
while ($row = mysql_fetch_row($result)) {
$out .= $row[0] . '|' . $row[1] . ';';
}
}
//Rimuove il carattere ; in coda
echo rtrim($out, ';');
?>
e le select vengono richiamate così:
codice:
<select name="sezioni" id="sezioni" onchange="loadList('categorie', getSelected(this))" ></select>
<select name="categorie" id="categorie"></select>
<script type="text/javascript">
//<![CDATA[
loadList('sezioni', 0);
//]]>
</script>
Qualcuno sa darmi una mano?
grazie ciao