select condizionale

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
ciao
non so se è una cosa difficile, per me si perchè immagino che serva ajax o qualche jquery (di cui non capiasco, diciamo, un acca)
questo è quello che vorrei fare (spero si capisca perchè non scrivo un codice sintatticamente corretto)
ho un form

PHP:
<script type="text/javascript">
function SelectPost()
{
    document.modulo.method = "post";
    document.modulo.action = "<?php $_SERVER['PHP_SELF']; ?>";
    document.modulo.submit();
}
</script>
<form name="modulo" action="" method="post">
indica località <input name="localita" type="text" id="localita"><br>
o seleziona direttamente:
<?php
//..........
//vorrei leggere il valore del campo localita
//e in funzione fare la query per la select
if($_POST['localita']==""){//alla prima chiamata o dopo aver dato la select
	$query="SELECT * FROM mappa ORDER BY localita";
}else{//mentre questa se ho scritto qualcosa in localita
	$query="SELECT * FROM mappa WHERE localita LIKE '%".$_POST['localita']."%' ORDER BY localita";
}
?>
<!--la select alla 1° chiamata della pag o dopo il submit() si riempie con tutti i dati del db-->
<select name="cerca"  onchange="SelectPost()">
<?php
	while($riga=mysql_fetch_array(mysql_query($query)))){
		echo "<option value=\"".$riga['id']."\">".$riga['localita']."</option>";
	}
?>
</select>
</form>
<?php
//e qui elaboro i dati provenienti dalla select
if(isset($_POST['cerca'])){
//......................
}
?>

cioè in pratica se nel campo localita non scrivo nulla nella selcet ho tutte le località
se invece scrivo es. pinco mi mostra tutte e solo le località che contengono pinco
qualcuno può indicarmi come fare?
 
ciao
non so se è una cosa difficile, per me si perchè immagino che serva ajax o qualche jquery (di cui non capiasco, diciamo, un acca)
questo è quello che vorrei fare (spero si capisca perchè non scrivo un codice sintatticamente corretto)
ho un form

PHP:
<script type="text/javascript">
function SelectPost()
{
    document.modulo.method = "post";
    document.modulo.action = "<?php $_SERVER['PHP_SELF']; ?>";
    document.modulo.submit();
}
</script>
<form name="modulo" action="" method="post">
indica località <input name="localita" type="text" id="localita"><br>
o seleziona direttamente:
<?php
//..........
//vorrei leggere il valore del campo localita
//e in funzione fare la query per la select
if($_POST['localita']==""){//alla prima chiamata o dopo aver dato la select
	$query="SELECT * FROM mappa ORDER BY localita";
}else{//mentre questa se ho scritto qualcosa in localita
	$query="SELECT * FROM mappa WHERE localita LIKE '%".$_POST['localita']."%' ORDER BY localita";
}
?>
<!--la select alla 1° chiamata della pag o dopo il submit() si riempie con tutti i dati del db-->
<select name="cerca"  onchange="SelectPost()">
<?php
	while($riga=mysql_fetch_array(mysql_query($query)))){
		echo "<option value=\"".$riga['id']."\">".$riga['localita']."</option>";
	}
?>
</select>
</form>
<?php
//e qui elaboro i dati provenienti dalla select
if(isset($_POST['cerca'])){
//......................
}
?>

cioè in pratica se nel campo localita non scrivo nulla nella selcet ho tutte le località
se invece scrivo es. pinco mi mostra tutte e solo le località che contengono pinco
qualcuno può indicarmi come fare?

Mi hai dato sempre tu una mano e spero di potertene dare una io una volta tanto xD

Prova a guardare questo
http://jqueryui.com/demos/autocomplete/

L'implementazione non mi sembra difficile.

Fammi sapere

Edit:
Mi sa che non è quello che cercavi... ho letto meglio, mi spiace
 
Ultima modifica:
Non capisco bene cosa intendi stampare nel caso di una ricerca, comunque suvvia l'ajax con jquery è facile
ad esempio quando un utente vuole fare una ricerca, con jquery invii la variabile post ad una pagina che ti restituisce
l'output, ad esempio

Codice:
<!-- qui includi jquery-->
<script>

//funzione basato sull'onclick del button del form
function cerca(){
 
 var opzioni =  { 'localita' : document.forms.nomeform.localita.value /*, ...altri valori semmai*/ };
   $.ajax({
        type: "POST",
        url: "cerca.php",
        data: opzioni,
        success: function(output){
            //qui fai quello che vuoi, sapendo che output è ciò che ritorna dalla chiamata
        }
    });
}

E' un esempio scritto a mano libera perciò possono esserci dimenticanze
 
ciao
si lo so che dovrebbe essere facile, ma a partire da semplice js non riesco a capirne la logica.
comunque il concetto è questo:
nel db ho es.
bolzano
bergamo
brescia
catania
ferrara
firenze
ecc......
quando chiamo la pagina la select mi si riempie di tutte le province che possso selezionare
se invece nel campo di input text scrivo "f" le select deve ridursi a
ferrara
firenze
se continuo (sempre nel campo text) e scrivo (dopo la f) i quindi "fi"
la select deve ridursi solo a
firenze
ora posso o selezionare nella sel firenze oppure cancellare prima la i e deve tornare
ferrara
firenze
e poi anche la f e quindi tutte
una volta selezionato il valore lo script fa quello che deve fare e la sel si ripresenta completa

è evidente che se nel campo text scrivo "zz" o una lettera inizialenon esistente (non esiste una provincia il cui nome inizia per zz) la select deve essere vuota

in pratica quael $_POST['localita'] che mi gestisce la query dovrebbe funzionare man mano che riempio (se lo riempio) il campo text

p.s.
l'autocomp segnalato da non farebbe il caso mio
lo script che avevo postato in un certo senzo lo fa ma solo dopo che ho selezionato un valore nella select
 
Ultima modifica:
Ho preparato un piccolo esempio. Pagina index.html:
HTML:
<!DOCTYPE html>
<html lang="it">
    <head>
        <title>Ricerca AJAX</title>
        <meta charset="utf-8">
        <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
        <script src="ajax.js"></script>
    </head>

    <body>
        <form action="#" method="post">
            <p>
                <label for="localita">Filtra località:</label>
                <input type="text" id="localitaSearch">
            </p>

            <p>
                <label for="localita">Località:</label>

                <select name="localita" id="localita">
                </select>
            </p>
        </form>
    </body>
</html>
Pagina ajax.js:
Codice:
function updateSelect(localita)
{
    $.post('search.php', {
        'localita': localita,
    }, function(data) {
        $("#localita").html("");

        for (var key in data) {
            localita = data[key];
            $("#localita").append('<option value="' + localita.id + '">' + localita.localita + '</option>');
        }
    }, 'json');
}

$(function() {
    updateSelect('');

    $("#localitaSearch").keyup(function() {
        updateSelect($(this).val());
    });
});
Pagina search.php:
PHP:
<?php
try {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root');
} catch (PDOException $e) {
    header('HTTP/1.0 500 Internal Server Error');
    exit();
}

$localita = isset($_POST['localita']) ? trim($_POST['localita']) : '';

if ($localita == '') {
    $stm = $pdo->query('SELECT * FROM mappa');
} else {
    $stm = $pdo->prepare('SELECT * FROM mappa WHERE localita LIKE ?');
    $stm->execute(array("{$localita}%"));
}

$results = $stm->fetchAll(PDO::FETCH_ASSOC);

echo json_encode($results);
Dimmi cosa non hai capito (perché qualcosa ci sarà di certo :evil:).
 
Ultima modifica:
ciao
Ho modificato il file Javascript per correggere un problema grafico.
quale? poi visto che sei in vena di correggere, potresti scrivere il search in formato "umano" sto impazzendo con le pdo.
so che prima o poi le vecchie istruzioni diverranno obsolete e non più supportate, ma se durano ancora qualche anno... poi non me ne può "fregà de meno" (credo che a roma si dica così)


@IImanuII
no problem, comunque grazie
 
Ultima modifica:

Discussioni simili