Avatar billede flim Nybegynder
28. oktober 2003 - 10:45 Der er 5 kommentarer og
2 løsninger

En søgefunktion

Jeg har en database med nogle titler på sange...

Jeg har nu tænkt på at lave en søgefunktion hvor man simpelthen søger på sangtitlen i et felt, og så kommer den frem med hvad der passer til søgningen. Jeg havde selv tænkt på noget i sti med:

$q = mysql_query("SELECT * FROM tabel WHERE kommentar = '**' ORDER BY kommentar ASC") or die(mysql_error());

Der hvor der står '**' skal det man skriver i søgefeltet vel stå? Det skal laves med Wildcards (*), så hvis man bare skriver fugl, skal alle dem emd fugl komme - også selvom det er først eller sidst i titlen.

Tror ikke det er så svært - skal bare lige sættes rigtigt op...

Mvh Flim
Avatar billede sone Nybegynder
28. oktober 2003 - 10:48 #1
Når man skal bruge wildcards i SQL, så skal man bruge LIKE.
...WHERE kommentar LIKE '%fugl%'

% bruges som *, dvs 'fugl%' - så skal fugl stå først...
Avatar billede flim Nybegynder
28. oktober 2003 - 11:06 #2
Hvis jeg laver et tekstfelt med navnet input, så skal den jo tage hvad der står i tekstfeltet, og så sætte de der %% omkring...

$q = mysql_query("SELECT * FROM tabel WHERE kommentar LIKE %'input'% ORDER BY kommentar ASC") or die(mysql_error());

Eller hvordan skrives det?

Eller skal der laves en variabel hvor man trækker inholdet ud af tekstfeltet?
Avatar billede sone Nybegynder
28. oktober 2003 - 11:30 #3
...WHERE kommentar LIKE %'.$input.'%...

hvis der eksisterer en PHP-variabel med navnet $input
Avatar billede flim Nybegynder
28. oktober 2003 - 11:43 #4
Jeg kigger lige på det når jeg kommer hjem. Hvis det virker får du self. dine points...
Avatar billede martinbk Nybegynder
28. oktober 2003 - 13:04 #5
$q = mysql_query("SELECT * FROM tabel WHERE kommentar LIKE '%$_POST[input]%' ORDER BY kommentar ASC") or die(mysql_error());
Avatar billede xyborx Nybegynder
28. oktober 2003 - 13:16 #6
Husk nu sikkerheden, med mysql_escape_string()
Og for at lade folk bruge de almindeligt kendte wildcards "*" og "?", kan man bruge str_replace med et par arrays:

$soeg_raw=$_POST['input']; // Vi smider lige brugerens indput i en seperat variabel
$wildcards_human=array('*','?'); // Et array med "mennesklige" wildcards
$wildcards_mysql=array('%','_'); // Et tilsvarende array med MySQL's wildcards
$soeg_wildcards=str_replace($wildcards_human,$wildcards_mysql,$soeg_raw); // Erstat wildcards
$soeg_mysql=mysql_escape_string($soeg_wildcards); // Escape'r søgesætningen, for sikkerhed
$resultat=mysql_query('SELECT * FROM tabel WHERE kommentat LIKE \''.$soeg_mysql.'\' ORDER BY kommentar ASC') or die('Noget gik galt: '.mysql_error());

Det kan så -om man vil- koges ned til følgende lille klods:

$resultat=mysql_query('SELECT * FROM tabel WHERE kommentar LIKE \'%'.mysql_escape_string(str_replace(array('*','?'),array('%','_'),$_POST['input'])).'%\' ORDER BY kommentar ASC') or die('Noget gik galt: '.mysql_error());
Avatar billede flim Nybegynder
28. oktober 2003 - 16:15 #7
I får 20 hver, da jeg kunne burge begge de ting I sagde.

Tak for hjælpen... Men det har så startet noget nyt jeg ikke kan få til at virke, men den tager jeg i et nyt spørgsmål :)
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