Avatar billede pappasmirf Nybegynder
21. januar 2002 - 08:47 Der er 5 kommentarer og
1 løsning

Jeg vil søge på en del af et ord??

Hej jeg vil søge på en del af et ord og har brugt den her bynavn like \'%$bynavn%\'. Det virker ok men hvis man ikke skriver noget i søge felte henter den hele databasen. ikke så smart.

$personer = mysql_query(\"SELECT stat, adressen, firma, telefon, mobil, id , bynavn FROM personer WHERE firma = \'$firma\' OR telefon = \'$telefon\' OR adressen like \'%$adressen%\' OR postnr = \'$postnr\' OR bynavn like \'%$bynavn%\'\");
Jeg har flere ting jeg kan søge på. På den side jeg kommer fra og kun en submit knap. Så nar jeg kun udfylder et søge felt er de andre tomme og så går det galt. Kan det ikke skrives i en sql setning?
Avatar billede disky Nybegynder
21. januar 2002 - 08:50 #1
Du skal opbygge din sql query dynamisk, hvis et felt er tomt skal den ikke tages med i din select query.

Fordi ellers for du hele basen med.
Avatar billede pappasmirf Nybegynder
21. januar 2002 - 09:03 #2
Men kan det ikke laves med sql??
Avatar billede disky Nybegynder
21. januar 2002 - 09:09 #3
jo du laver din sql query som en string dynamisk i PHP

Hvis et felt indeholder data, tilføj where del til din query string.

Men i ren SQL kan du ikke lave det.
Avatar billede pappasmirf Nybegynder
21. januar 2002 - 11:58 #4
Ok. Hmm Nu har jeg lavet noget i php.
$sql = \"SELECT stat, adressen, firma, telefon, mobil, id , bynavn FROM personer WHERE\";
if($firma !=\"\"){
$sql = $sql . \" firma = \'$firma\' \";
}
if($adressen !=\"\"){
$sql = $sql . \" adressen like \'%$adressen%\' \";
}
if($telefon !=\"\"){
$sql = $sql . \" telefon = \'$telefon\' \";
}
if($bynavn !=\"\"){
$sql = $sql . \" bynavn like \'%$bynavn%\' \";
}
if($postnr !=\"\"){
$sql = $sql . \" postnr = \'$postnr\' \";
}
if($firma !=\"\" && $adressen !=\"\"){
$sql = $sql . \" firma = \'$firma\' OR adressen like \'%$adressen%\'\";
}
if($firma !=\"\" && $telefon !=\"\"){
$sql = $sql . \" firma = \'$firma\' OR telefon = \'$telefon\'\";
}
if($firma !=\"\" && $bynavn !=\"\"){
$sql = $sql . \" firma = \'$firma\' OR bynavn = \'$bynavn\'\";
}
if($firma !=\"\" && $postnr !=\"\"){
$sql = $sql . \" firma = \'$firma\' OR postnr = \'$postnr\'\";
}
if($adressen !=\"\" && $telefon !=\"\"){
$sql = $sql . \" adressen like \'%$adressen%\' OR telefon = \'$telefon\'\";
}
if($adressen !=\"\" && $bynavn !=\"\"){
$sql = $sql . \" adressen like \'%$adressen%\' OR bynavn like \'%$bynavn%\'\";
}
if($adressen !=\"\" && $postnr !=\"\"){
$sql = $sql . \" adressen like \'%$adressen%\' OR bynavn like \'%$postnr%\'\";
}
if($telefon !=\"\" && $postnr !=\"\"){
$sql = $sql . \" telefon = \'$telefon\' OR postnr = \'$postnr\'\";
}
if($telefon !=\"\" && $bynavn !=\"\"){
$sql = $sql . \" telefon = \'$telefon\' OR bynavn = \'$bynavn\'\";
}

Det virker men jeg kan ikke få det ril at virke når jeg skriver noget i adressen og i bynavn. Der bruger jeg adressen like \'%$adressen\' OR bynavn like \'%$bynavn\'
Kan man ikke bruge sådan to like\'er i en setning?
Avatar billede disky Nybegynder
21. januar 2002 - 12:21 #5
jo sagtens, du skal måske også have en % til sidst i den where.

Du skal lige smide en \'OR\' ind i starten på alle dine tilføjelser til $sql, ellers fejler den.
Avatar billede pappasmirf Nybegynder
21. januar 2002 - 13:59 #6
Ikke helt, med dit input var med til at løse problemet. Takker her fra.
Hvis der er nogen der er interessert i løsningen
så er den her:
$sql = \"SELECT stat, adressen, firma, telefon, mobil, id , bynavn, postnr FROM personer WHERE\";
if($firma !=\"\" && $adressen !=\"\"){
$sql = $sql . \" firma = \'$firma\' AND adressen like \'%$adressen%\'\";
}
if($firma !=\"\" && $telefon !=\"\"){
$sql = $sql . \" firma = \'$firma\' AND telefon = \'$telefon\'\";
}
if($firma !=\"\" && $bynavn !=\"\"){
$sql = $sql . \" firma = \'$firma\' AND bynavn like \'%$bynavn%\'\";
}
if($firma !=\"\" && $postnr !=\"\"){
$sql = $sql . \" firma = \'$firma\' AND postnr = \'$postnr\'\";
}
if($adressen !=\"\" && $telefon !=\"\"){
$sql = $sql . \" adressen like \'%$adressen%\' AND telefon = \'$telefon\'\";
}
if($adressen !=\"\" && $bynavn !=\"\"){
$sql = $sql . \" adressen like \'%$adressen%\' AND bynavn like \'%$bynavn%\'\";
}
if($adressen !=\"\" && $postnr !=\"\"){
$sql = $sql . \" adressen like \'%$adressen%\' AND postnr = \'$postnr\'\";
}
if($telefon !=\"\" && $postnr !=\"\"){
$sql = $sql . \" telefon = \'$telefon\' AND postnr = \'$postnr\'\";
}
if($telefon !=\"\" && $bynavn !=\"\"){
$sql = $sql . \" telefon = \'$telefon\' AND bynavn like \'%$bynavn%\'\";
}
if($firma !=\"\" && $telefon ==\"\" && $adressen ==\"\" && $postnr ==\"\" && $bynavn ==\"\"){
$sql = $sql . \" firma = \'$firma\'\";
}
if($firma ==\"\" && $telefon ==\"\" && $adressen !=\"\" && $postnr ==\"\" && $bynavn ==\"\"){
$sql = $sql . \" adressen like \'%$adressen%\'\";
}
if($firma ==\"\" && $telefon !=\"\" && $adressen ==\"\" && $postnr ==\"\" && $bynavn ==\"\"){
$sql = $sql . \" telefon = \'$telefon\'\";
}
if($firma ==\"\" && $telefon ==\"\" && $adressen ==\"\" && $postnr ==\"\" && $bynavn !=\"\"){
$sql = $sql . \" bynavn like \'%$bynavn%\'\";
}
if($firma ==\"\" && $telefon ==\"\" && $adressen ==\"\" && $postnr !=\"\" && $bynavn ==\"\"){
$sql = $sql . \" postnr = \'$postnr\'\";
}
if($firma ==\"\" && $telefon ==\"\" && $adressen ==\"\" && $postnr ==\"\" && $bynavn ==\"\"){
echo \'Du indtsatede ikke noget i nogen af søgefelterne!\';
die;
}
//echo $sql;
$personer = mysql_query($sql);

MVH Pappasmirf
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester