Avatar billede d.kryger Praktikant
25. februar 2008 - 10:12 Der er 12 kommentarer og
1 løsning

Søg filen igenenm for søgeordet

Hej eksperter.

Jeg bruge nedenstående kode til at min søgefunktion på min side, og den fungerer fint.

Jeg kunne dog godt tænke mig at den skrev siden titel, i stedet for filens navn.

F.eks. hvis jeg søger på "Profil", så finder den ordet på siden profil.php, og lavet et link til siden.

Det er også fint, men jeg kunne godt tænke mig at den skrev det som står som titel på profil.php og linkede til profil.php. Kan det lade sig gøre?

Koden:
<form action="search.php" method="post">
    <input type="hidden" name="search" value="1" />
    <input type="text" name="phrase" />
    <input type="submit" name="search" value="S&oslash;g" />
</form>

<?php
if(isset($_REQUEST['search'])){
    $phrase = $_REQUEST['phrase'];                                                            // edit
    $dir = "content/"; //Dit HTML bibliotek

    // Open a known directory, and proceed to read its contents
    if(is_dir($dir)){
        if($dh = opendir($dir)){
            $found = false;
            if($phrase == ""){                                                                // edit
                echo "Du har ikke indtastet et s&oslash;geord.";                            // edit
            } else {                                                                        // edit
                while(($file = readdir($dh)) !== false){
                    if(is_file($dir . $file)){
                        $indhold = file_get_contents($dir . $file);
                        $searchString = "/.{0,50}" . $phrase . ".{0,50}/si";
                        if(preg_match($searchString, strip_tags($indhold), $match)){
                            $found = true;
                            $fileName = substr($file, 0, strrpos($file, "."));
                                echo "<a href=\"content/".$file."\">".$file."</a> :". $match[0]."<br />";
                        }
                    }
                }
            }                                                                                // edit
            closedir($dh);
            if($found == false){
                if(!$phrase == ""){                                                            // edit
                    echo "Vi fandt desv&aelig;rre ikke: <b>" . $phrase . "</b><br>";
                }                                                                            // edit
            }
        } else {
            echo "opendir kunne ikke udf&oslash;res.<br />";
        }
    } else {
        echo "$dir er ikke en mappe.<br />";
    }


} ?>
Avatar billede jakobdo Ekspert
25. februar 2008 - 11:40 #1
Så er det et spørgsmål om du i disse 2 linjer:

$fileName = substr($file, 0, strrpos($file, "."));
                                echo "<a href=\"content/".$file."\">".$file."</a> :". $match[0]."<br />";

Retter så den henter det som står mellem:

<title> og </title>
Det kan f.eks. laves med:
$fileName = substr($file, 0, strrpos($file, "."));
if(preg_match('%<title>.*?</title>%s', $match[0], $title)) {
    echo "<a href=\"content/".$file."\">".$file."</a> :". $title[0]."<br />";
}
Avatar billede d.kryger Praktikant
25. februar 2008 - 16:07 #2
Hej Jakob.

Jeg har nu prøvet at sætte din kode ind, men når jeg søger på noget hvor jeg ved at der skal komme et restultat, ja så kommer der ikke noget resultat.

Har jeg gjort noget forkert?
Avatar billede jakobdo Ekspert
25. februar 2008 - 19:01 #3
Prøv at test følgende kode:

<?php
//http://www.eksperten.dk/spm/821040

if(isset($_REQUEST['search'])){
    $phrase = $_REQUEST['phrase'];
    $dir = ""; //Dit HTML bibliotek og husk at slut med /
    $found = false;
   
    foreach(glob($dir . "*.php") as $filename) {
    $content = file_get_contents($filename);
    if(preg_match('/.{0,50}'.preg_quote($phrase).'.{0,50}/si', $content, $match)){
        $found = true;
        $file = basename($filename);
        if(preg_match('%<title>(.*?)</title>%si', $match[0], $title)) {
                $result = $title[1];
            } else {
                $result = $file;
            }
        echo '<a href="'.$dir.$file.'">'.$result.'</a>';
        echo '<p>' . $match[0] . '</p>';
        flush();
    }
    }
   
    if($found === false && !empty($phrase)){
        echo "Vi fandt desv&aelig;rre ikke: <b>" . $phrase . "</b><br>";
    }
}
?>
<form action="821040exp.php" method="post">
    <input type="hidden" name="search" value="1" />
    <input type="text" name="phrase" />
    <input type="submit" name="search" value="S&oslash;g" />
</form>
Avatar billede jakobdo Ekspert
25. februar 2008 - 19:01 #4
Og du skal selvfølgelig lige rette .php i linjen:
foreach(glob($dir . "*.php") as $filename) {
til htm eller html.
Alt efter hvilke filer du har liggende i dit DIR.
Avatar billede d.kryger Praktikant
26. februar 2008 - 08:56 #5
Hej... Jeg har nu prøvet at ligge koden ind, men jeg tror at du har misforstået mit spørgsmål.

Når jeg søger vil jeg søge efter den tekst som står på siderne, men i restultatet skal den altid skrive sidens navn (det mellem <title> og </title>). Uanset om det søgte står i titlen eller ej. For det stå jo på siden.

Kan du klare det?
Avatar billede jakobdo Ekspert
26. februar 2008 - 10:10 #6
Det skulle min kode da meget gerne gøre...
Avatar billede jakobdo Ekspert
26. februar 2008 - 10:14 #7
Jeg havde en lille fejl.
Ret fra:
if(preg_match('%<title>(.*?)</title>%si', $match[0], $title)) {
til:
if(preg_match('%<title>(.*?)</title>%si', $content, $title)) {
Avatar billede d.kryger Praktikant
26. februar 2008 - 13:18 #8
Så virker det som det skal. Læg et svar til dine velfortjente point!
Avatar billede jakobdo Ekspert
26. februar 2008 - 13:34 #9
Svar!
Avatar billede jakobdo Ekspert
26. februar 2008 - 14:10 #10
Takker for point.
Avatar billede d.kryger Praktikant
27. februar 2008 - 16:37 #11
hmm... det var lige hurtigt nok at jeg delte point ud :)

Prøv at tjekke denne side: http://www.kryger.name/eksperten/indhold/side1.php
Og så søg på "class" eller "span" på denne side: http://www.kryger.name/eksperten/821040exp.php

Det er jo ikke meningen at man skal kunne søge på tekst som ikke står på siden. Det mener jeg nemlig at den kode jeg skrev først kunne skelne fra. Kan det gøres enkelt?
Avatar billede jakobdo Ekspert
27. februar 2008 - 21:14 #12
Ja, den kode du havde før, bruger: strip_tags(), så det kan du bruge ligesom den gjorde i din første kode.
Avatar billede d.kryger Praktikant
28. februar 2008 - 08:38 #13
Smart :) Tak for hjælpen!
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