Newsgroup: it.comp.www.php
Titolo: come effettuare ricerche avanzate?

 Supponiamo che io voglia creare una pagina generica di ricerca avanzata. Ad 
esempio immaginiamo di avere una tabella con i dati relativi all'età 
iniziale, età finale, indirizzo, lavoro, nazionalità, sesso, telefono, peso, 
statura, ecc.. di centinaia di persone.
Una volta realizzata la form e passati i parametri è chiaro che diverse sono 
le possibilità di ricerca.
Mi spiego meglio: l'utente potrebbe non aver selezionato nessun sesso ed in 
tal caso non vorrei una segnalazione di errore, ma semplicemente la ricerca 
dovrà essere fatta tenendo conto sia dei risultati riguardanti il sesso 
femminile, sia il sesso maschile. Lo stesso discorso è valido per 
l'indirizzo (se non seleziono nessun indirizzo visualizzerò qualsiasi 
indirizzo valido), il lavoro, telefono, e via dicendo...
Ora devo realizzare qualcosa di simile. Mi serve solo un piccolo aiuto per 
capire come muovermi.
Inizialmente pensavo quindi di realizzare un classico controllo if.. e 
verificare per ogni valore passato dal modulo se era vuoto o se l'utente 
aveva fatto una precisa selezione.
Quindi se ad esempio il valore indirizzo è NULL o comunque con un valore 
diciamo di deafult generico,  eseguire una query dove non verificare questo 
campo, altrimenti eseguirne un'altra dove mettere un controllo anche per 
questo campo..
Però mi è venuto un dubbio, è chiaro infatti che in questo modo viste le 
numerose scelte e combinazioni possibili dovrei scrivere parecchio codice 
ripetitivo e tantissime strutture di controllo, con la possibilità di decine 
e decine di query. Non credo quindi se sia la strada giusta.
Che sistema quindi è consigliabile usare?
Grazie per eventuali risposte.

 aiuto per capire come muovermi.
$join = '';
$sql  = 'WHERE ';
if (isset($_POST['sex'])) {
	$sql .= $join . 'sex="'.mysql_escape_strinh($_POST['sex']).'"';
	$join = ' AND ';
}
if (isset($_POST['address'])) {
	$sql.=$join.'address="'.mysql_escape_strinh($_POST['address']).'"';
	$join=' AND ';
}
if (isset($_POST['work'])) {
	$sql.=$join.'work="'.mysql_escape_strinh($_POST['work']).'"';
	$join=' AND ';
}
Da verificare.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

"Setec Astronomy" <setec@_NO_NOSPAM_freemail.it> ha scritto nel messaggio
news:6641g.87195$A83.2...@twister1.libero.it...

se passi il campo anche se vuoto la variabile e' settata qundi ti crea la
query errata
work="" AND
$bb = "";
var_dump(isset($bb));
$part="";
$spassera = "";
$aak = array();
if(!empty($GET["titolo"])){
   $aak[] = $table['sedi']."rasse_schede.tz_titolo LIKE
'%".$GET["titolo"]."%'";
   $spassera .= "&amp;titolo=".$GET["titolo"];
}
if(!empty($GET["kws"])){
   $aak[] = $table['sedi']."rasse_schede.tz_kws LIKE '%".$GET["kws"]."%'";
   $spassera .= "&amp;kws=".$GET["kws"];
}
if(!empty($GET["sa"])){
   $aak[] = $table['sedi']."rasse_schede.tz_sa='".$GET["sa"]."'";
   $spassera .= "&amp;sa=".$GET["sa"];
}
if(!empty($aak)){
  for($i=0; $i<count($aak); $i++){
  $part .=" AND ".$aak[$i];
  }
}
ho gia dei valori in WHERE se non hai valori in where metti for($i=1;
e metti WHERE ".$aak[0]."
$passera che arriva da passera e passera, passa che ricorda la pasera da
f__a serve per passare
le variabili per uno __spasseramento__ di pagine


 crea la query errata
E dire che ho scritto "Da verificare". 
P.S.
Quota decentemente.
-- 
I am what I am, I do what I can


 
Io direi :
$sWhere = "";
if(strlen($campo_da_ricercare))
   {
     if($sWhere != "")
       $sWhere .= " and ";
     $HasParam = true;
     $sWhere .=  "campo_da_ricercare =" . $campo_da_ricercare;
   }
if($HasParam)
     $sWhere = " WHERE (" . $sWhere . ")";
Adesso puoi inserire il Where nella sql.