- Home
- Categorie
- Coding e Sistemistica
- PHP
- motore di ricerca con più campi
-
Ciao LauPhp
credo tu possa togliere il LIKE per il campo sesso ed età ed utilizzare lo stesso metodo che usi per il nominativo anche per il tutore....
Dicci se risolvi
-
è come gia stavo provando a fare, ma non va
-
è una coincidenza o cosi può funzionare?
che ne pensate?:?[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 ";
}
$query .= "(nominativo LIKE '%" . $nominativo* . "%') AND (tutore LIKE '%" . $tutore* . "%') AND (sesso LIKE'%".$sesso . "%') AND (eta LIKE'%".$eta . "%')";
}
$query .= " ORDER BY id DESC";
$result = mysql_query($query);
while( $row=mysql_fetch_assoc($result)){...
}
mysql_close($connection);
?>
[/php]
-
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]