Multi DropDown... Funzionamento

  • Creatore Discussione Creatore Discussione crospa
  • Data di inizio Data di inizio

crospa

Nuovo Utente
18 Giu 2012
6
0
0
Ragazzi ho un dubbio,
nella mia applicazione PHP ho l'esigenza di creare delle Riparazioni, pensavo per poter avere più gestione della situazione di registrare i clienti e i relativi apparecchi per poi richiamarli nella riparazione, mi spiego:

Tabella 1: Riparazioni
Tabella 2: Clienti
Tabella 3: Apparecchi

Quando un operatore carica una nuova riparazione, seleziona da un dropdown il cliente e poi il secondo dropdown farà vedere solamente gli apparecchi di quel cliente, per poi salvare nella tabella Riparazioni dentro a Apparecchio_ID e Cliente_ID i relativi identificativi impostati...

Il dubbio è... è tecnicamente fattibile? se si come? sono nuovo all'Ajax e non ho mai provato fino ad ora... qualcuno mi può guidare su come impostare il tutto? attualmente l'applicativo presenta nella creazione della nuova riparazione una pagina dove l'operatore scrive direttamente dentro i dati, ma che ogni volta vanno persi, quindi non si può per esempio, sapere quante riparazioni ha subito quell'apparecchio e se il cliente ritorna con lo stesso apparecchio per esempio per un Check-up del sistema evito di reinserirlo ma i dati sono già nel sistema...
 
L'idea non è sbagliata, ma quella è molto confusa... io attualmente ho fatto così, ma ovviamente non funziona,

questi sono i due form su cui opera l'utente

PHP:
		<tr>
          <th><?php echo lang('INVC_CNAME');?>: <?php echo required();?></th>
          <td><select name="client_id" class="custombox" style="width:250px" onChange="getState(this.value)">
              <option value="">--- <?php echo lang('INVC_CLIENTSELECT');?> ---</option>
              <?php if($userlist):?>
              <?php foreach ($userlist as $crow):?>
              <option value="<?php echo $crow->id;?>"><?php echo $crow->name;?></option>
              <?php endforeach;?>
              <?php unset($crow);?>
              <?php endif;?>
            </select>
	<a href="index.php?do=clients-rip&action=add"><img src="../images/client-overview.png" alt="" class="tooltip img-wrap2" title="<?php echo lang('PROJ_ADDCLIENTE');?>"/></a>
			</td>
        </tr>
       
	  
  <tr>
   <th><?php echo lang('INVC_CNAME');?>: <?php echo required();?></th>
   <select name="apparecchio" class="custombox" style="width:250px">
    <td><div  id="statediv"><select name="state" >
	<option>Seleziona prima il Cliente</option>
        </select></div></td>
  </tr>

Questa è la funzione del dropdown:

PHP:
// Roshan's Ajax dropdown code with php
// This notice must stay intact for legal use
// Copyright reserved to Roshan Bhattarai - nepaliboy007@yahoo.com
// If you have any problem contact me at http://roshanbh.com.np
function getXMLHTTP() { //fuction to return the xml http object
		var xmlhttp=false;	
		try{
			xmlhttp=new XMLHttpRequest();
		}
		catch(e)	{		
			try{			
				xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e){
				try{
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
				}
				catch(e1){
					xmlhttp=false;
				}
			}
		}
		 	
		return xmlhttp;
    }
	
	function getState(id) {		
		
		var strURL="apparecchiodrop.php?="+name;
		var req = getXMLHTTP();
		
		if (req) {
			
			req.onreadystatechange = function() {
				if (req.readyState == 4) {
					// only if "OK"
					if (req.status == 200) {						
						document.getElementById('statediv').innerHTML=req.responseText;						
					} else {
						alert("There was a problem while using XMLHTTP:\n" + req.statusText);
					}
				}				
			}			
			req.open("GET", strURL, true);
			req.send(null);
		}

e questa è la pagina apparecchiodrop.php

PHP:
#### Roshan's Ajax dropdown code with php
#### Copyright reserved to Roshan Bhattarai - nepaliboy007@yahoo.com
#### if you have any problem contact me at http://roshanbh.com.np
#### fell free to visit my blog http://roshanbh.com.np
?>

<? $apparecchio=intval($_GET['name']);
$link = mysql_connect('localhost', 'root', ''); //changet the configuration in required
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('gecko');
$query="SELECT apparecchi. * ,apparecchi.id as appid, tipo_apparecchio.title AS tipo, marca.title AS marca, CONCAT( users.fname,  ' ', users.lname ) AS clientname"
. "\n FROM apparecchi"
. "\n LEFT JOIN users ON apparecchi.client_id = users.id"
. "\n LEFT JOIN tipo_apparecchio ON apparecchi.tipo_apparecchio = tipo_apparecchio.id"
. "\n LEFT JOIN marca ON apparecchi.marca_app = marca.id";
$result=mysql_query($query);

?>


<select name="apparecchio">
<option>Seleziona Apparecchio</option>
<? while($row=mysql_fetch_array($result)) { ?>
<option value=<?=$row['id']?>><?=$row['tipo']?> <?=$row['marca']?> <?=$row['modello']?></option>
<? } ?>
</select>

di tutto questo l'unica cosa che funziona è soltanto che alla selezione del cliente, il campo sotto si abilita mi mostra tutti i record... senza applicare nessuna condizione ne niente... e sopra compare questo errore: Notice: Undefined index: name in C:\xampp\htdocs\gecko\admin\apparecchiodrop.php on line 15

non so che pesci pigliare....
 
ciao
guarda se ti può servire questo (evidentemente cambiando i vari nomi)
consiste in tre pagine
1. pagina dove c'è il form che ho chiamato index_db.php
2. una pagina in cui si formano i valori della seconda select che ho chiamato select_db.php
3. la pagina ajax.js
il tutto è mutuato da un vecchio script che mi aveva passato eliox che ho adattato all'uso del db

index_db.php
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
var url = "select_db.php";
var what = "SetProvince(req.responseText)";
function GetProvince(regione)
{
  InviaDati("regione="+regione);
}
function SetProvince(province)
{
  var provinciaBox = document.getElementById("provincia");
  provinciaBox.options.length = 0;
  if(province != "")
  {
	var arrProvince = province.split(",");
	for(i = 0; i < arrProvince.length; i++)
    {
	  if(arrProvince[i] != "")
      {
		provinciaBox.options[provinciaBox.options.length] = 
        new Option(arrProvince[i], arrProvince[i]);
      }
    }
  }
}
</script>
<script src="ajax.js" type="text/javascript"></script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><style type="text/css">
<!--
body,td,th {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
}
select{
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
}
-->
</style>
</head>
<body>
<?php
//righe di prova delle selec
if(isset($_POST['invia']) && $_POST['invia'] == "invia"){
	$regione_scelta= $_POST['regione'];
	$provincia_scelta= $_POST['provincia'];
	if($regione_scelta=="" || $provincia_scelta==""){
		echo "non hai selezionato la regione e/o la provincia<br>";
	}else{
		echo "hai selezionato la regione: $regione_scelta con la provincia di $provincia_scelta<br>";
	}
}
//********************qui  mettere i dati di connessione
$query_reg="SELECT * FROM regioni ORDER BY regione";
$ris_reg=mysql_query($query_reg);
$esistono regioni=mysql_num_rows($ris_reg);
if($esistono regioni > 0){
?>
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Regione:<br> 
<select onChange="GetProvince(this.options[this.selectedIndex].text)" id="regione" name="regione">
<?php
while($riga_reg=mysql_fetch_array($ris_reg)){
	echo "<option>".$riga_reg['regione']."</option>";
}
?>
</select>
<br>Provincia:<br> 
<select id="provincia" name="provincia"></select>
<br>
<input name="invia" type="submit" id="invia" value="invia">
</form>
<?php
}else{
	echo "il db è vuoto";
}
?>
</body>
</html>
select_db.php
PHP:
<?php
//...............qui i dati di connessione
$province = array();//diventerà un array di array
$query_reg="SELECT * FROM regioni ORDER BY regione";
$ris_reg=mysql_query($query_reg);
/*
con i due while creo l'array di array che mi servirà per riempire dinamicamente le selct delle province
esempio
$province["ABRUZZO"] = array("Chieti", "L'Aquila", "Teramo")
stati attento all'eventuale addslashes/stripslashes da mettere
qui non l'ho messo, dipende se hai inserito le province nel db con addslashes, se si devi mettere
$province[$nome_reg][]=stripslashes$riga_prov['provincia']);
*/
while($riga_reg=mysql_fetch_array($ris_reg)){
	$id_reg=$riga_reg['id_regione'];
	$nome_reg=$riga_reg['regione'];
	$query_prov="SELECT * FROM province WHERE id_regione=$id_reg ORDER BY provincia";
	$ris_prov=mysql_query($query_prov);
	while($riga_prov=mysql_fetch_array($ris_prov)){
		$province[$nome_reg][]=$riga_prov['provincia'];
	}
}
if(isset($_POST["regione"]) && isset($province[$_POST["regione"]]))
{
  foreach($province[$_POST["regione"]] as $provincia)
  {
    printf("%s,", $provincia);
  }
}
?>
ajax.js
Codice:
function InviaDati(data)
{
  // istanziamo l'oggetto XMLHttpRequest
  if (window.XMLHttpRequest) 
  {
    req = new XMLHttpRequest();
    req.onreadystatechange = function() { PocessaDati(req); };
    req.open('POST', url, true);
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.send(data);
  }
  // controlliamo la versione di ActiveX
  else if (window.ActiveXObject) 
  {
    req = new ActiveXObject('Microsoft.XMLHTTP')
    if (req)
    {
      req.onreadystatechange = PocessaDati;
      req.open('POST', url, true);
      req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      req.send(data);
    }
  }
}

function PocessaDati(req)
{
  // monitoriamo lo stato dell'invio
  if (req.readyState == 4)
  {
    // restituiamo lo stato della richiesta
    if (req.status == 200) 
    {
      eval(what);
    }else{
      alert('Problema nella gestione dei dati: ' +
      req.responseText);
    }
  }
}


è evidente che al posto di province comuni metterai quello che ti serve, e dovrai adattarlo in funzione di come sono fatte le tue tabelle
 

Discussioni simili