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

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
 

emanuelevt

Utente Attivo
24 Giu 2009
298
0
0
Io ti consiglio di usare jquery, se vuoi fare questo con il php dovresti usare le sessioni.
 

emanuelevt

Utente Attivo
24 Giu 2009
298
0
0
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>
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
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
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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.
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
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
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
non funge ma non c'è un evento onchange che mi mantenga tutto inalterato am che aggiorni solo la tendina del max?
 
Discussioni simili
Autore Titolo Forum Risposte Data
otto9due Ordinare option di una select Javascript 5
M Select Option dentro una Table jQuery 2
M Estrarre dati da una select HTML PHP 3
T [PHP] Autocompilazione input multiple da una select PHP 1
S [PHP] restituire intera frase da una select PHP 7
maxnegri [PHP] Eliminare risultati duplicati da ciclo foreach ottenuti da una select php mysqli PHP 18
S [WordPress] Creare una select box con partita iva e codice fiscale in base a una logica. WordPress 0
N [Javascript] [HTML] Scelta di una select e compilazione automatica delle restanti Javascript 0
P [PHP] Recuperare dati da una <select> PHP 4
T PHP+MYSQL: una select che cerchi un campo vuoto PHP 7
asevenx [Javascript] [AngularJS] contare opzioni selezionate di una select in un elenco ng-repeat Javascript 0
P Javascript o Jquery - recupero testo (oltre al valore) di una select Javascript 5
webmachine [PHP] Problema: Stampare tutte le occorrenza di una SELECT PHP 2
P popolare una select da input PHP 0
F Aggiornare marker su mappa google con una funzione ajax richiamata al cambio di una select Ajax 2
F mysqli creare una select con valori dal db PHP 4
M Aggiungere input text dopo aver selezionato un campo da una select option Presentati al Forum 0
P Aggiungere campo input da una select jQuery 1
elpirata Eliminare dati selezionati da una form di select PHP 6
elpirata Recuperare i dati in una select PHP 5
A Controllo somma di valori in una select Ajax 1
A Allineare il testo dentro una select composta da più campi pesi da un db PHP 5
G Unire risultato di una select PHP 2
E Mettere come Selected l'opzione di un select option, tramite il dato di una query. Javascript 2
S Salvare dei dati in una determinata tabella in base al select che l'utente seleziona PHP 8
K query per popolare una select tramite ajaxc php e xml ! Ajax 14
V Creazione array associativo da una <select> PHP 1
M lista tabelle in una select PHP 3
F 2 select ed una submit PHP 5
L Selezione elementi nel menù in base ad una select jQuery 1
B UPDATE dopo una SELECT PHP 3
H Problema con MySQL e PHP, dopo aver fatto una SELECT non ottengo alcun risultato PHP 7
A Recuperare valore di una select e stamparla Javascript 3
blips Controllo somma di valori in una select Javascript 5
P Escludere stringhe contenute nei record da una select MySQL 3
L menu select che visualizza le cartelle di una cartella PHP 16
A processare l'array in una select PHP 2
F stampare una select con php PHP 7
A Visualizzare risultati ottenuti da una select multipla PHP 7
M Escludere 2 select da una select MySQL 9
C Inserire elementi array in una select Javascript 2
M Escludere dei parametri da una SELECT MySQL 7
E problema di sintassi su una select (plugin) PHP 5.3 PHP 3
V passare la scelta di una select ad un variabile php PHP 5
pierantonio trasferire dati selezionati da una select box PHP 3
L form: variabile php in una select PHP 6
M Livevalidation: applicare validazione solo se si sceglie una option di una select. Javascript 0
Monital inviare una sola variabile su select box della stessa pagina PHP 1
neo996sps [XHTML/PHP] Cambiare opzioni in base a scelta di una select PHP 3
R select dinamiche che riportano valori in una textarea. Javascript 8

Discussioni simili