- Home
- Categorie
- Coding e Sistemistica
- PHP
- motore di ricerca con più campi
-
resta sempre il problema dell'età
scrivo 2 e mi escono quelli con 2 anni, 12 anni, ecc
-
@LauPhp said:
resta sempre il problema dell'età
scrivo 2 e mi escono quelli con 2 anni, 12 anni, ecc
sostituisci:
[PHP]....AND (eta LIKE'%".$eta . "%')"; [/PHP]con:
[PHP]....AND eta='$eta'"; [/PHP]vedi , dovrebbe andare
-
no non va
se scrivo l età funziona, ma se invece faccio una ricerca solo per nominativo o tutore a esempio (in caso non conosc l età della persona) non mi restituisce niente
-
Allora ti basta impostare un if per dire allo script di considerare la ricerca sul campo eta solo se gli passi un valore
-
stessa cosa se scrivo questo
[php]$query = "SELECT * FROM ..............WHERE ";
for ($i=0; $i<$totale; $i++) {
if ($i > 0) {
$query .= " AND ";
}
if(isset($eta)){
$query .= "(nominativo LIKE '%" . $nominativo* . "%') AND (tutore LIKE '%" . $tutore* . "%') AND (sesso LIKE'%".$sesso . "%') AND eta= '$eta'";
} else {
$query .= "(nominativo LIKE '%" . $nominativo* . "%') AND (tutore LIKE '%" . $tutore* . "%') AND (sesso LIKE'%".$sesso . "%')";
}
$query .= " ORDER BY id DESC";
$result = mysql_query($query);
[/php]
-
Perchè non provi ad annidare tutti i campi, così la verifica la fa solo su quello che ricerchi?
[php]if (isset($nominativo)){
$query .="nominativo LIKE '%$nominativo%'";}
if (isset($tutore)){
$query .=" tutore LIKE '%$tutore%'";}// etc etc[/php]
Prova un po così.";
-
cosi non mi funziona più niente
-
isset($nominativo) è sempre vera a meno che non si inizializzi a NULL e di default la variabile in oggetto.
Provai, tempo fa, così per curiosità con ciclo while e quella condizione... Povero web server!!!Hai provato questo metodo?
La variabile nominativo trasformala in un Array dove ogni indice conterrà tutte le possibili combinazioni fra nome (eventualmente 2^ 3 ^ 4 ^ 5^ 6^ (....povero bimbo se ha 5 nomi... :P) e cognome).
Utilizza un po' di risorse (specialmente se i nomi sono diversi...) però è assicurato un risultato certo.Altrimenti potresti usare questo:
INSTR(nominativo, explode(" ", $nominativo))
quest'ultima restituisce tutte le righe che nella colonna nominativo (primo argomento di INSTR) hanno $nominativo
Non sono sicuro al 100% che funzioni...mi è venuta ora così...
-
rieccomi, scusate se rispondo cosi tardi ma sto incasinatissima.
scusa l'ignoranza portaile84, ma non ho capito bene che intendi dire
-
così sembra funzionare, mi date un parere sulla sua efficienza?
[php]<?
$postnominativo= $_POST['nominativo'];
$posttutore=$_POST['tutore'];
$nominativo = explode(" ",$postnominativo);
$tutore = explode(" ",$posttutore);
$nnominativo = count($nominativo);
$ntutore = count($tutore);
$totale = $nnominativo+$ntutore;
$sesso = $_POST['sesso'];
$eta= $_POST['eta'];$connection = mysql_connect(".............",".............",".................");
$db = mysql_select_db(".........", $connection);
$query = "SELECT * FROM ..............WHERE ";
for ($i=0; $i<$totale; $i++) {
if ($i > 0) {
$query .= " AND ";
}
if ($eta != NULL){
$query .= "(nominativo LIKE '%" . $nominativo* . "%') AND (tutore LIKE '%" . $tutore* . "%') AND (sesso LIKE'%".$sesso . "%') AND eta ='$eta'";
}
else {
$query .= "(nominativo LIKE '%" . $nominativo* . "%') AND (tutore LIKE '%" . $tutore* . "%') AND (sesso LIKE'%".$sesso . "%')";
}
}
$query .= " ORDER BY id DESC";
$result = mysql_query($query);
while( $row=mysql_fetch_assoc($result)){echo $row['nominativo']."<br>";
echo $row['tutore']."<br>";
echo $row['eta']."<br>";
echo $row['sesso']."<br>";
}
mysql_close($connection);
?>[/php]