Ricerca su più campi

Salve, ho una tabella mysql tbl_utenti composta dai seguenti campi:

ID

cognome

nome

data_nascita

citta

professione

la pagina di ricerca si chiama "trova.php"

ho fatto una form in php usando il metodo post per cercare tutti gli utenti di una città e funziona ed ho come url trova.php?citta=roma, ora vorrei fare anche una ricerca, magari usando la stessa form per cercare tutti quelli che fanno una professione in una città. Es. tutti gli studenti di roma ed avere un url tipo "trova.php?citta=roma&professione=studente". Mi piacerebbe usare la stessa form per fare ricerche sia con un una che con due variabili

Qualcuno sa darmi qualche dritta?

inviato 9 anni fa
francesco.murri
X 0 X

io solitamente faccio una cosa del genere:

      $availableFields = array("nome",
               "cognome",
               "telefono"
               ); // campi validi

      $where = array();
      //$where[] = "nome != 'ciccio'"; // esempio di clausola di default

      foreach ($_GET as $param => $value)
         if(!empty($value) && isset( $availableFields[$param] ) ){
            $where[] = "$param = $value";
      }

      $basequery = "SELECT *"
               . "\nFROM tabella"
               . (count( $where ) ? "\nWHERE (" . implode( ' AND ', $where ) . ")" : "")
               . "\nORDER BY id";

questa è l'idea ovviamente fai tu escaping parametri, campi e bla bla bla...  ::)

PS. l'ho scritto direttamente quì quindi non sono sicuro della correttezza della sintassi

risposto 9 anni fa
Xscratch
X 0 X

provando e riprovando ho fatto questo sembra che funzioni:

//Connessione al db

require 'config.php';

require 'connect.php';

//Form di ricerca

echo'<form name="ricerca" action="find.php">

      <table width="612" border="1"><tr bgcolor="#22865d"><td  align="center"><font color="#ffffff"><strong>Ricerca</strong></font></td></tr></table>

      <table bgcolor="#e9f1fc" border="1">

<tr bgcolor="#e5e7f1">

<td><font color="#050f6d"><strong>città</strong></font></td>

<td><font color="#050f6d"><strong>professione</strong></font></td>

</tr>

<tr>

<td><input type="text" name="citta"></td>

<td><input type="text" name="professione"></td>

</tr>

</table>

<input type="submit" value="cerca">

</form>';

//passaggio dei dati inseriti alle variabili

$citta = $_GET[citta];

$professione = $_GET[professione]; 

//inizio la query presa da un altro post (http://www.phpnews.it/forum/index.php?topic=887.msg5645#msg5645) per correttezza

$query = "SELECT * FROM tbl_utenti WHERE 1";

//Per evitare che quando apro la pagina mi dia tutti i record faccio un controllo che nessuno sia vuoto

if (empty($citta) and empty($professione)){

echo("<font size='5' color='#052158'><strong>inserire uno o più temini di ricerca</strong></font>");

exit;

}

Validazione dei parametri di ricerca

if(!empty($citta))

$query .= " AND citta LIKE '%$citta%'";

if(!empty($professione))

$query .= " AND professione LIKE '%$professione%'";

$ricerca = mysql_query($query);

$row_query = mysql_fetch_assoc($ricerca);

$totalRows_query = mysql_num_rows($ricerca);

//visualizzazione dei dati estratti

do {

?>

<table border="1" bordercolor="black">

<tr bgcolor="#e9e7c8">

<td><font color="#050f6d"><strong>ID</strong></font></td>

<td><font color="#050f6d"><strong>Cognome</strong></font></td>

<td><font color="#050f6d"><strong>Nome</strong></font></td>

<td><font color="#050f6d"><strong>Data nascita</strong></font></td>

</tr>

<tr valign="top">

<td><input type='text' value="<? echo ($row_query['id']);?>" size="4"></td>

<td><input type='text' value="<? echo (preg_replace('/^(.{4})-(.{2})-(.{2})$/','$3/$2/$1', htmlentities($row_query['data_nascita'])));?>" size="15"></td>

<td><input type='text' value="<? echo ($row_query['cognome']);?>" size="35"></td>

<td><input type='text' value="<? echo ($row_query['nome']);?>" size="30"</td>

</tr>

<tr bgcolor="#e9e7c8">

<td><font color="#050f6d"><strong>Città</strong></font></td>

<td><font color="#050f6d"><strong>Professione</strong></font></td>

</tr>

<tr><td><input type='text' value="<? echo ($row_query['citta']);?>" size="45"></td>

<td><input type='text' value="<? echo ($row_query['professione']);?>" size="45"></td>

</tr>

</table>

<?

} while ($row_query = mysql_fetch_assoc($ricerca));

Url=find.php?citta=roma&professione=studente

Che ne dici?

sicuramente è molto più macchinosa della tua che mi sembra più snella.

Proverò a studiarla.

Cmq grazie;

risposto 9 anni fa
francesco.murri
X 0 X

più che altro credo il mio metodo sia più malleabile, nel senso che ad esempio se volessi aggiungere un altro campo di ricerca, a livello di PHP basterebbe aggiungere il nome del campo nell'array di quelli permessi e il gioco è fatto.

Se permetti però ho un osservazione sulla tua soluzione: utilizzare il ciclo do-while significa che il codice all'interno di esso verrà eseguito sempre almeno una volta, quindi nel caso che la query restituisca 0 righe verrebbe visualizzata una riga vuota (con relativi Notice).

risposto 9 anni fa
Xscratch
X 0 X

Ma infatti è a questo che mi riferisco quando dico che è più snello ed ho pensato di studiarlo. Sono alle prime armi.

Grazie ciao

risposto 9 anni fa
francesco.murri
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda