Una select tira l'altra.........

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Buon giorno e buon anno,

anno nuovo , problema nuovo.

anticipo che è più uno sfizio perchè in sostanza ho risolto in altra maniera però chisssà si riesca senza troppi ostacoli sarebbe ORO.

allora per farla breve stoc ercando dic reare un sistema di ricerca avanzata, o meglio,l'ho già creato, però vorrei renderlo più bello e funzionale con un paio di accortezze.

ho una pagina con un form solo che invia ad una pagina che fa delle verifiche e poi in funzione diq ueste effettua la ricerca.

la pagina principale che vorrei modificare è quello delle opzioni di ricerca. faccio un esempio pratico con lo script

ho il box età dove si deve scgeliere etamin e eta max
PHP:
mysql_connect($DBhost,$DBuser,$DBpass) or die("Impossibile collegarsi al server");
@mysql_select_db("$DBName") or die("Impossibile connettersi al database $DBName");
$sqlquery = "SELECT Distinct Eta FROM tabella ORDER BY Eta ASC";
$result = mysql_query($sqlquery)or die(mysql_error());
$number = mysql_numrows($result);
$z = 0;
while ($number > $z) {
$Eta = mysql_result($result,$z,"Eta");
echo  "<option value=".$Eta.">".$Eta."</option>";
$z++;
}

questo è in una select

HTML:
<select name="etamin" class="select">
<option value="<?php echo $etamin;?>">Min</option>";

ora vorrei che quando uno ha scelto l'età minima nella select dell'età massima si riparta proprio dall'età minima ma proprio nonr iesco a passare la variabile da una select all'altra, ho provato diversi modi con l'onchange ma non funge nessuno diq uesti.

in giro si trova sempre e solo il classico esempio citta province comuni ma non è il mio caso.

qualcuno ne sa qualcosa?

grazie
 
Io ti consiglio di usare jquery, se vuoi fare questo con il php dovresti usare le sessioni.
 
Allora se ho ben capito tu in relazione di una select hai bisogno di un range di variabili: la mia proposta è perchè non creare un nuovo campo select
quando ne hai selzionato uno?

Forse potresti prendere spunto da questo:

PHP:
function select(){
	
	if($("#category").attr('value')=='categoria1'){
	$("#sotto_cat").html("<select name='sotto_cat' selected><option>Seleziona sotto categoria</option><option>Età 1</option><option>Età 2</option></select>");
	}
}

<select name="cat" onchange="javascript:select()" id='category' >
									
									
	
								<option selected>Categoria 1</option>

									<option>Categoria 2</option>
	
							
</select>
							
							<div id='sotto_cat'>
								Sottocategoria
							</div>
 
manuel intanto ti ringrazio del supporto però io di java script mi limito a ocpiare e dincollar ei codici che trovo in giro, in realtà non ne capisco na mazza sono fermo all'onchange e al ondbclick ed a qualche messaggio di errore, potresti spiegarmi cosa fa questa funzione? non ho ben capito.

Nel mio caso ho una riga così composta

Eta (select eta min) (select eta max)

inq euste due eselect estraggo le eta presenti nel database e vorrei che una volta selezionata la minima ad esempio 25 la select dell'età massima si popoli sempre secondo la query ma aprtendo da 26

non capisco come applicare questo codice al mio intento

help
 
Usa Ajax

Ajax si presta molto bene per queste cose

non è da molto che ho imparato ad apprezzarlo, alla fine non è difficile.

Le funzioni principali per la chiamata le ho copiate anchio.

PHP:
<script type='text/javascript'>
    var xmlHttp = getXmlHttpObject();

    function etaminima(eta) {    
        
        //qui dovrai mettere l'indirizzo assoluto della tua pagina
        xmlHttp.open('GET', 'http://localhost/test.php?eta='+eta, true);
    
        xmlHttp.onreadystatechange = etamassima; 
    
        xmlHttp.send(null);
    }
    
    function getSelected(select) {
        return select.options[select.selectedIndex].value;
    }
    
    function etamassima() {
   
        if(xmlHttp.readyState == 4) {
        
            if (xmlHttp.status == 200) {            
            
                document.getElementById("etamassima").innerHTML=xmlHttp.responseText;             
           
            }
        }
    }
    
    function getXmlHttpObject() {
        
        var xmlHttp=null;
        if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
        }
	
        if (window.ActiveXObject){           
            xmlHttp =  new ActiveXObject("Microsoft.XMLHTTP");
        }
	
        return  xmlHttp;
    }
</script>
<?php
if (isset($_REQUEST['eta'])) {
    $etaminima = $_REQUEST['eta'];
} else {
    $etaminima = 8;
}

echo "<span id='etamassima'>";
echo "Et&agrave; minima <select id='etamin' name='etamin' onchange='etaminima(getSelected(this))'>";
for ($i = 8; $i < 91; $i++) {
    echo "<option value='$i'";
    if ($i == $etaminima) {
        echo " selected='selected'";
    }
    echo ">$i</option>";
}
echo "</select>&nbsp;&nbsp;";


echo "Et&agrave; massima <select id='etamax' name='etamax'>";
for ($x = $etaminima + 1; $x < 91; $x++) {
    echo "<option value='$x'>$x</option>";
}
echo "</select>";
echo "</span>";
?>

Il mio è un esempio non ho fatto chiamate al database come richiedevi e ho messo il tutto in una sola pagina, dovrai adattarlo alle tue esigenze.
Spero possa esserti di aiuto.
 
sonos cettico con la'jax però dato che lo ero anche con tablesorter di jquery e poi me ne sono inamorato domani lo provo e ti so dire

ma una oprecisazione

PHP:
        //qui dovrai mettere l'indirizzo assoluto della tua pagina
        xmlHttp.open('GET', 'http://localhost/test.php?eta='+eta, true);

devo metterci la pagina princiaple o la pagina dovee crea il menù a tendina? inoltre nella pagina ci sono vari invii di variabili GET ad una seconda pagina dopo le variabili di eta le richiamo sempre con $etamin=$_GET['etamin'];?

grazie
 
Dovrai mettere l'indirizzo della pagina che contiene il form .
Il form dovra rimanere tutto dentro lo span che io ho chiamato etamassima
La chiamata ajax richiamerà se stessa aggiornando di volta in volta il form e quindi il contenuto della seconda select senza inviare i dati alla seconda pagina.
Poi quando invii i dati con il submit non deve cambiare niente, la action e il method rimangono uguali

Anzi mi è sfuggito qualcosa...
cosi ti perdi le scelte degli altri campi
ora ci penso un attimo
 
Ultima modifica:
Meglio due pagine

Quella che contiente il form

form.php
PHP:
<script type='text/javascript'>
    var xmlHttp = getXmlHttpObject();

    function etaminima(eta) {    
        
        //qui richiami la pagina che aggiorna la seconda select
        xmlHttp.open('GET', 'http://localhost/aggiornadatamassima.php?eta='+eta, true);
    
        xmlHttp.onreadystatechange = etamassima; 
    
        xmlHttp.send(null);
    }
    
    function getSelected(select) {
        return select.options[select.selectedIndex].value;
    }
    
    function etamassima() {
   
        if(xmlHttp.readyState == 4) {
        
            if (xmlHttp.status == 200) {            
            
                document.getElementById("etamassima").innerHTML=xmlHttp.responseText;             
           
            }
        }
    }
    
    function getXmlHttpObject() {
        
        var xmlHttp=null;
        if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
        }
	
        if (window.ActiveXObject){           
            xmlHttp =  new ActiveXObject("Microsoft.XMLHTTP");
        }
	
        return  xmlHttp;
    }
</script>
<?php
echo "<select name='prova'>";
echo "<option value=''></option>";
echo "<option value=''>ciao</option>";
echo "<option value=''>miao</option>";
echo "<option value=''>bao</option>";
echo "</select>";


echo "Et&agrave; minima <select id='etamin' name='etamin' onchange='etaminima(getSelected(this))'>";
for ($i = 8; $i < 91; $i++) {
    echo "<option value='$i'>$i</option>";
}
echo "</select>&nbsp;&nbsp;";

//questo span si aggiornera ad ogni onchange della prima select
echo "<span id='etamassima'>";
echo "Et&agrave; massima <select id='etamax' name='etamax'>";
for ($x = 8 + 1; $x < 91; $x++) {
    echo "<option value='$x'>$x</option>";
}
echo "</select>";

echo "</span>";
?>

aggiornadatamassima.php
PHP:
<?php

$etaminima = $_REQUEST['eta'];


echo "Et&agrave; massima <select id='etamax' name='etamax'>";
for ($x = $etaminima + 1; $x < 91; $x++) {
    echo "<option value='$x'>$x</option>";
}
echo "</select>";
?>

Cosi non si aggiornano tutti i campi
 
non funge ma non c'è un evento onchange che mi mantenga tutto inalterato am che aggiorni solo la tendina del max?
 

Discussioni simili