Avatar billede katja_kh Nybegynder
09. september 2008 - 14:09 Der er 9 kommentarer

Highlight søgeord

Jeg har lavet en lille søge funktion, som søger efter ord/bogstaver i databasen. Når søge resultatet bliver vist skal det søgte ord være highlightet. Er dette muligt at gøre ud fra min kode?

KODE:
    <div class="content">
                <div class="sog">
            <form action="" method="POST">
            <input type="text" name="soeg">
            <input type="submit" name="search" value="Søg" class="knap">
            </form>

       
            <?
include("db_con.php");
$search=$_POST['soeg'];
if(isset($_POST['search']) && $_POST['search'] != ''){
    $sog=mysql_query("SELECT * FROM biblo_boeger WHERE titel LIKE '%$search%' or forfatter LIKE '%$search%' or ISBN_nr LIKE '%$search%' or forlag LIKE '%$search%' ");
    while ($row=mysql_fetch_array($sog)) {
    $tekst = $row['titel'];
    $for = $row['forfatter'];
    $isbn = $row['ISBN_nr'];
    $forlag = $row['forlag'];
if (strlen($tekst) > 50) {
  $tekst = substr($tekst, 0, 50) . "...";
}
        echo "Titel:"." "."$tekst";
        echo "<br />";
        echo "Forfatter:"." "."$for";
        echo "<br />";
        echo "ISBN-nr:"." "."$isbn";
        echo "<br />";
        echo "Forlag:"." "."$forlag";
        echo "<br />";
        echo "<a href='sog.php?id=".$row['id']."'><img src='billeder/$row[billede]' border='0' width='50' height='70'></a>";
        echo "<br />";
        echo "<br />";
    }
}

?>
        </div>   
       
    </div>
Avatar billede jakobdo Ekspert
09. september 2008 - 14:16 #1
Du har jo teksten som vises i $tekst, $for, $isbn og $forlag.
Du kunne lave en str_replace() på de 4 strenge med noget ala:

$ny_tekst = str_replace($search,'<span color="red">' . $search . '</span>', $tekst);
og ligeledes på de andre 3.
Avatar billede jokkejensen Novice
09. september 2008 - 14:21 #2
Der er også små javascript libs der kan klare det hvis du sætter formen til "get".

Så sker det på klienten, og ikke serveren på hver søgning.

http://www.google.dk/search?source=ig&hl=da&rlz=&q=javascript+highlight&meta=

/J
Avatar billede j4k0b Nybegynder
09. september 2008 - 14:40 #3
Offtopic: Jeg kender ikke størrelsen på din database (møngden af data der søges igennem), men den SQL du har gang i der bliver meget langsom med tiden. Din tabel biblo_boeger skal ikke indeholde meget mere end 8.000-10.000 rækker før det bliver en rigtig dræber at søge.

Du bør kigge på MySQL's Fulltext søgning:
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
Avatar billede katja_kh Nybegynder
09. september 2008 - 14:41 #4
jakobdo : Jeg er lidt i hvivl om hvor jeg skulle sætte disse str_replace?
Avatar billede jakobdo Ekspert
09. september 2008 - 14:49 #5
Katja: du skal indsætte det efter:

$tekst = $row['titel'];
$for = $row['forfatter'];
$isbn = $row['ISBN_nr'];
$forlag = $row['forlag'];

Dog bør du lytte til de andre forslag der også kommer, da j4k0b bestemt har fat i noget. :o)
Avatar billede katja_kh Nybegynder
12. september 2008 - 10:30 #6
Hej. Jeg valgte at bruge din løsning jakobdo, det var lige den jeg havde nemmest ved at overskue lige nu.

Men nu er der opstået et lille problem. Man skulle også kunne søge på ord i omtalen, men problemet er at det kun er den sidste bog i databasen som reagerer på farve i omtalen.

Det hele ser sådan her ud nu:

            <?
include("db_con.php");
$search=$_POST['soeg'];
if(isset($_POST['search']) && $_POST['search'] != ''){
   
    $sog=mysql_query("SELECT * FROM biblo_boeger WHERE titel LIKE '%$search%' or forfatter LIKE '%$search%' or ISBN_nr LIKE '%$search%' or forlag LIKE '%$search%' or tekst LIKE '%$search%'");
    while ($row=mysql_fetch_array($sog)) {
    $titel = $row['titel'];
    $for = $row['forfatter'];
    $isbn = $row['ISBN_nr'];
    $forlag = $row['forlag'];
    $tekst = $row['tekst'];
   
    $ny_titel = str_ireplace($search,'<span class="color">' . $search . '</span>', $titel);
    $ny_for = str_ireplace($search,'<span class="color">' . $search . '</span>', $for);
    $ny_isbn = str_ireplace($search,'<span class="color">' . $search . '</span>', $isbn);
    $ny_forlag = str_ireplace($search,'<span class="color">' . $search . '</span>', $forlag);
    $ny_tekst = str_ireplace($search,'<span class="color">' . $search . '</span>', $tekst);
   
if (strlen($tekst) > 300) {
  $ny_tekst = substr($tekst, 0, 200) . "...";
}



        echo "<b>Titel:</b>"." "."$ny_titel";
        echo "<br />";
        echo "<b>Forfatter:</b>"." "."$ny_for";
        echo "<br />";
        echo "<b>ISBN-nr:</b>"." "."$ny_isbn";
        echo "<br />";
        echo "<b>Forlag:</b>"." "."$ny_forlag";
        echo "<br />";
        echo "<b>Omtale:</b>"." "."$ny_tekst";
        echo "<br />";
        echo "<a href='index.php?side=bog_til&&id=".$row['id']."'><img src='billeder/$row[billede]' border='0' width='50' height='70'></a>";
        echo "<br />";
        echo "<br />";
    }
}

?>
Avatar billede jakobdo Ekspert
12. september 2008 - 10:33 #7
Jeg tror ikke jeg forstår problemet ?
Avatar billede katja_kh Nybegynder
12. september 2008 - 10:51 #8
Hvis du går ind på min opgave og søger på pippi så kan du se at den kun highlighter i omtale teksten for den nederste bog.

http://www.katja.wi13.ots.dk/bibliotek/index.php?side=sog

Den skal jo highlighte det søgte ord i alle omtaler hvis det findes.
Avatar billede jakobdo Ekspert
12. september 2008 - 11:27 #9
Titel er i begge bøger ja.
Du må lave noget fejl søgning.
Og du bør også få rettet din side til, den ligner lort i Firefox. :o)
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