Avatar billede hoejgaard Juniormester
17. juni 2005 - 12:31 Der er 13 kommentarer og
1 løsning

søgning på _

Hej jeg har et program der søger på nogle navne.
Når jeg i søgefeltet skriver _  så kommer alle navnene i databasen op, og ikke kun de navne der indeholder _

Hvordan får jeg den til kun at vise de navne der indeholder _

jeg bruger lige nu følgende :

$query = mysql_query("SELECT * FROM medlem WHERE brugernavn LIKE '%$_POST[userid]%' ");
Avatar billede barklund Nybegynder
17. juni 2005 - 12:40 #1
I en LIKE søgning er % jo en specialkarakter og betyder 0 eller flere vilkårlige tegn. Men _ er også en specialkarakter, der betyder 1 vilkårligt tegn. Altså vil 'k_d' matche både 'kåd', 'kød' og meget andet. Hvis du vil have en _ til at betyde netop dette tegn, skal du sætte en \ foran:

$query = mysql_query("SELECT * FROM medlem WHERE brugernavn LIKE '%".preg_replace("/[_%]/","\\\\1",$_POST['userid'])."%' ");

Så kan man både søge på brugernavne med _ og % i :)

--
Morten Barklund
Avatar billede hoejgaard Juniormester
17. juni 2005 - 12:56 #2
okay jeg kigger lige på det ik :-)
Avatar billede barklund Nybegynder
21. juni 2005 - 13:53 #3
Virker det?
Avatar billede hoejgaard Juniormester
21. juni 2005 - 16:45 #4
det virker vist hvis der er mellemrum mellem tegn som feks. a  a  , men ikke ved _
Der kommer nogle resultater frem hvor _ ikke er med??
Avatar billede hoejgaard Juniormester
21. juni 2005 - 16:47 #5
Uden at være sikker, så er det som om _=1 og __=11 og ___=111 ??
Avatar billede hoejgaard Juniormester
21. juni 2005 - 22:24 #6
_ skal jo netop være _ 
Men ved ikke lige hvad der skal rettes for at det kommer til at passe ?
Avatar billede hoejgaard Juniormester
21. juni 2005 - 22:38 #7
Okay måske jeg har fundet fejlen : Skal 1 ikke udskiftes med _ i LIKE sætningen så det bliver :
$query = mysql_query("SELECT * FROM medlem WHERE brugernavn LIKE '%".preg_replace("/[_%]/","\\\\_",$_POST['userid'])."%' ");
Avatar billede hoejgaard Juniormester
25. juni 2005 - 17:40 #8
Hallo :-) ingen der kan svare på mit sidste spørgsmål ??
Avatar billede barklund Nybegynder
25. juni 2005 - 20:14 #9
Hm, det burde være rigtigt - men jeg skal kigge på det!
Avatar billede hoejgaard Juniormester
26. juni 2005 - 14:09 #10
har du kigget på det barklund ??
Avatar billede barklund Nybegynder
26. juni 2005 - 14:18 #11
Prøv i stedet med str_replace(array("_","%"),array("\\_","\\%"),"hej _ med dig %") som:

$query = mysql_query("SELECT * FROM medlem WHERE brugernavn LIKE '%" . str_replace(array("_","%"), array("\\_","\\%"), $_POST['userid']) . "%' ");

Tror jeg ;)

--
Morten Barklund
Avatar billede barklund Nybegynder
26. juni 2005 - 14:20 #12
Eller den søde:

$query = mysql_query("SELECT * FROM medlem WHERE brugernavn LIKE '%" . preg_replace("/(?=[_%])/","\\", $_POST['userid']) . "%' ");

Det ser fint ud :)

--
Morten Barklund
Avatar billede hoejgaard Juniormester
21. september 2006 - 13:30 #13
læg et svar barklund..
Avatar billede hoejgaard Juniormester
31. marts 2008 - 23:09 #14
lukker
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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