Avatar billede hrole Mester
14. september 2008 - 12:32 Der er 5 kommentarer og
1 løsning

Hjælp til simpel søgning

Hej!
Jeg har brug for hjælp til et script. Når man indtaser søgeord i formularen skal dette søges i en tekstfil. Tekstfilen er opbygget således:
mads;en masse tekst om mads
peter;en lang historie om peter
ulla;mange historier om ulla
herefter skal teksten efter semikolen komme som søgeresultat og hvis ordet ikke optræder i filen kommer en fejlmeddelelse.
Dvs. søges på ulla er reslutatet: mange historier om ulla.

Her mit bud:
<form action="navnesogning.php" method="post">
    <input type="text" name="navn">
    <input type="submit" value=" ok ">
</form>

<?
$fil=fopen("allenavne.txt");
$streng=fgets($fil, $_POST['navn']); <-- jeg troede denne kunne bruges, men det kan den ikke
echo $streng;
fclose($fil);
?>
Avatar billede jensgram Nybegynder
14. september 2008 - 12:48 #1
Du kan hente alle linier til et array med file() : http://dk.php.net/manual/en/function.file.php


Derefter:

$len = strlen($_POST['navn']) + 1;
$n = $_POST['navn'] . ';';
foreach ($lines as $line) {
    if (substr($line, 0, $len) === $n) {
        print substr($line, $len);
        break;
    }
}


Utestet.
Avatar billede hrole Mester
14. september 2008 - 13:13 #2
Jeg tænkte nok det ikke var så svært, bortset medmindre man er nybegynder :)
Tak for hjælpen!
Avatar billede hrole Mester
14. september 2008 - 13:14 #3
Du får point
Avatar billede jensgram Nybegynder
14. september 2008 - 14:17 #4
Svar :)
Avatar billede j4k0b Nybegynder
15. september 2008 - 09:07 #5
Hvor stor er den fil du vil søge igennem, og hvor ofte søges der i den?

Løsningen jensgram kommer med holder ikke i længden pga. performance. Du bør i stedet bruge regulære udtryk til at søge med, det går langt, langt hurtigere, især når du skal søge større mængder data igennem.
Avatar billede j4k0b Nybegynder
15. september 2008 - 09:19 #6
Eksempel:


<?php

$path = 'data.txt';
$keywd = 'ulla';

$file = fopen($path, 'r');
$data = fread($file, filesize($path));
fclose($file);

preg_match_all('/'.$keywd.';(.*)/', $data, $matches);
$result = $matches[1];

if(count($result)) {
    print 'Resultater for <b>'.$keywd.'</b>:<br>';
    foreach($result as $description) {
        print '- '.$description.'<br>';
    }
} else {
    print 'Ingen resultater for <b>'.$keywd.'</b>';
}

?>
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