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ø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ø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ærre ikke: <b>" . $phrase . "</b><br>"; } // edit } } else { echo "opendir kunne ikke udføres.<br />"; } } else { echo "$dir er ikke en mappe.<br />"; } } ?>
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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 />"; }
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?
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æ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øg" /> </form>
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.
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?
26. februar 2008 - 10:10
#6
Det skulle min kode da meget gerne gøre...
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)) {
26. februar 2008 - 13:18
#8
Så virker det som det skal. Læg et svar til dine velfortjente point!
26. februar 2008 - 13:34
#9
Svar!
26. februar 2008 - 14:10
#10
Takker for point.
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.
28. februar 2008 - 08:38
#13
Smart :) Tak for hjælpen!
Vi tilbyder markedets bedste kurser inden for webudvikling