Newsgroup: it.comp.www.php
Titolo: Query dinamica x form con menu a tendina

Ho scritto una semplicissima query che ricava le variabili da un form html,
più in particolare da dei menu a tendina:
[cut]
$db=mysql_connect($host,$user,$pass) or die ("Errore durante la connessione
al database");
$sql="SELECT * FROM annunci WHERE provincia='$provincia' AND eta='$eta' AND
qualifica='$qualifica'";
$result=mysql_db_query("test",$sql,$db);
[cut sui vari while e print]
Lo script funziona alla perfezione, però vorrei che selezionando una
determinata voce di un menu a tendina, ad esempio, in Provincia, la voce
Tutte, non esegua nessun filtro sulla variabile ricavata (e quindi non ci
sia, praticamente, la variabile $provincia). Mi sono spiegato bene? E'
possibile? Grazie a tutti!
--
M  a  r  c  o    S  a  l  i  s            
marc...@tin.it
www.fidalnet.com
 - 
www.atleticaoristano.f2s.com
www.musix4u.com
 - il forum dedicato alla musica!

 E' possibile? Grazie a tutti!
Prova cosi':
if ($provincia == "tutte"){
$sql="SELECT * FROM annunci WHERE eta='$eta' AND qualifica='$qualifica'";
} else {
$sql="SELECT * FROM annunci WHERE provincia='$provincia' AND eta='$eta' AND
qualifica='$qualifica'";
}
G.

possibile? Grazie a tutti!
if ($provincia != "tutte")
	$provQuery = "provincia='$provincia' AND";
else
	$provQuery = "";
$sql="SELECT * FROM annunci WHERE $provQuery eta='$eta' AND...
Leonardo

 $sql="SELECT * FROM annunci WHERE $provQuery eta='$eta' AND...
Grazie a tutti e due, ma ho la necessità di utilizzare questa funzione per
l'intera query, però se uso il seguente codice il php da' errore:
[cut]
$db=mysql_connect($host,$user,$pass) or die ("Errore durante la connessione
al database");
if ($eta != "Tutte")
$etaQuery = "eta='$eta' AND";
else
$etaQuery = "";
if ($provincia != "Qualsiasi")
$provQuery = "provincia='$provincia' AND";
else
$provQuery = "";
if ($qualifica != "Tutte")
$qualQuery = "qualifica='$qualifica' AND";
else
$qualQuery = "";
$sql="SELECT * FROM annunci WHERE $provQuery $etaQuery $qualQuery";
[cut]
Se invece nell'ultimo WHERE della query inserisco un valore direttamente
assegnato dal form, va tutto bene:
$sql="SELECT * FROM annunci WHERE $provQuery $etaQuery
qualifica='$qualifica'";
Forse è per colpa di un AND di troppo? Come posso fare?
_____
Ho anche la necessità di ricercare una o più parole (selezionate da un campo
text sempre nel form) nel campo cv, ma utilizzando questo codice da' errore:
$db=mysql_connect($host,$user,$pass) or die ("Errore durante la connessione
al database");
$sql="SELECT * FROM annunci";
$where="";
$words=explode(" ",$chiave);
$j=0;
while (isset($words[$j])) {
$where=$where."cv LIKE '%".$words[$j]."%'";
if (isset($words[$j+1])):
$where=$where." OR ";
endif;
$j++;
}
$result=mysql_db_query("test",$sql.$where,$db);
while ($row=mysql_fetch_array($result)) {
print [......]
Non ci capisco più nulla!!
Grazie ancora,


 Forse è per colpa di un AND di troppo? Come posso fare?
questa soluzione porta 2 problemi:
1. se qual è valorizzata hai un AND di troppo (che potresti togliere!)
2. se nessuna è valorizzata (cioè selezioni tutta la tabella), ti trovi un 
where seguito da niente e a mysql non piace...
quindi dovresti effettuare anche un controllo: se tutti i parametri non 
sono valorizzati NON utilizzare la WHERE!

 non sono valorizzati NON utilizzare la WHERE!
Sempre se riesco a risolvere il problema precedente... come effettuo il
controllo? Con un blocco if... else? Scusami ma sono alle prime armi col php
;))


[cut]
prova così:
$sql="select * from annunci";
#(select * non si dovrebbe usare per stabilità della struttura)
if ($eta!="Tutte"||$provincia!="Qualsiasi"||$qualifica!="Tutte") {
 $par='WHERE';
 if($eta!="Tutte") {
  $sql.=" ".$par." eta='$eta'";
  $par='AND';
  }
 if($provincia!="Qualsiasi") {
  $sql.=" ".$par." provincia='$provincia'";
  $par='AND';
  }
 if($qualifica!="Tutte") {
  $sql.=" ".$par." qualifica='$qualifica'";
  }
 }
ciao

 prova cosě: [cut]
Anche se non ho capito bene il funzionamento, č tutto a posto, grazie
mille!!! Un'ultima cosa, questa č un po' piů difficilotta (e poi ti lascio
in pace).
Sempre nello stesso form, devo integrare una ricerca per parola chiave nel
campo cv. Nel codice qui sotto ho cercato di farlo con if...else, in modo
che, se non viene inserita nessuna parola chiave, la query salta il capo e
applica solo le altre condizioni. Se invece  ($chiave!="")  , cioč se č
stato inserito qualcosa, esegue questa parte della query, per poi eseguire
le altre (filtro per provincia etc.).
Quando non ci sono parole chiave, tutto bene, quando ce ne sono, o applica
solo la condizione della key o solo quella su provincia etc. Ci deve essere
un problema di struttura, che non riesco a trovare... qualcuno mi da' una
mano?
if($chiave!="") {
$keys = explode (" ", $chiave);
$sql = "";
reset ($keys);
while (list(,$parola) = each ($keys))
{ $parola = trim($parola);
if ($parola != "")
$sql .= "cv LIKE '%$parola%' OR qualifica LIKE '%$parola%' OR";
}
$sql .= "0";
$sql="SELECT * FROM annunci WHERE " . $sql;
if ($eta!="Tutte"||$provincia!="Qualsiasi"||$qualifica!="Tutte") {
 $par='';
 if($eta!="Tutte") {
  $sql.=" ".$par." eta='$eta'";
  $par='AND';
  }
 if($provincia!="Qualsiasi") {
  $sql.=" ".$par." provincia='$provincia'";
  $par='AND';
  }
 if($qualifica!="Tutte") {
  $sql.=" ".$par." qualifica='$qualifica'";
  }
 }
}
else
{
$sql="SELECT * FROM annunci ";
if ($eta!="Tutte"||$provincia!="Qualsiasi"||$qualifica!="Tutte") {
 $par='WHERE';
 if($eta!="Tutte") {
  $sql.=" ".$par." eta='$eta'";
  $par='AND';
  }
 if($provincia!="Qualsiasi") {
  $sql.=" ".$par." provincia='$provincia'";
  $par='AND';
  }
 if($qualifica!="Tutte") {
  $sql.=" ".$par." qualifica='$qualifica'";
  }
 }
}
$result=mysql_db_query("test",$sql, $db);



Non so se ho capito bene il problema, ma nel menu a tendina
puoi aggiungere una voce tutte ed assegnare il simbolo %
alla variabile provincia.
Nella query mysql devi scrivere WHERE provincia like
$provincia. In tal modo, se si è scelto Tutte dal menu , la
variabile $provincia contiene il simbolo %, e così MySQL
effettua la query con la clausola WHERE provincia like '%' ,
che è un simbolo jolly.
Saluti.
-- 
WEbdOM webmaster di
Metronic.It mobile phone philosophy
www.gadgetpoint.it
 serigrafia on line

 alla variabile provincia.
Già, quello era il metodo più semplice ma... ormai ho risolto in altro modo
:)))
C'è un altro problema, e l'ho illustrato in un altro messaggio sempre su
questo thread... sai aiutarmi?


$where=$where." OR ";
Neanche. Questo deve essere
	$where = ' OR ';
altrimenti dopo tre parole hai $where uguale a " OR OR OR ". Orore!
Leonardo

 rileggi le queries che il tuo programma ti genera? 8-D
Si le rileggo, ma in quel caso non l'avevo fatto, e comunque quel codice è
tutto sbagliato. L'ho rifatto, (vedi thread Query dinamica 2), ma continua a
non funzionare!!
Mi sa che userò 2 form diversi, uno per cercare tramite menu a tendina e
l'altro tramite parola chiave :)))
