zoek script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Erwin b

Erwin b

08/12/2012 11:57:57
Quote Anchor link
Hallo

Kan iemand mij helpen aan een simpel zoek script? op Google kom ik niks bruikbaars tegen of kan iemand mij een beetje uitleggen hoe ik zo iets zou kunnen maken, al is mijn PHP kennis niet heel super.

Groeten, Erwin
 
PHP hulp

PHP hulp

20/04/2024 14:48:36
 

08/12/2012 12:03:13
Quote Anchor link
Waar wil je precies in zoeken? In je eigen database of via google?
 
Erwin b

Erwin b

08/12/2012 12:30:43
Quote Anchor link
In mijn eigen site ik heb een foto site met een blogje en wil graag dat als er een match is met het zoek woord de betreffende pagina'(s) getoond worden. Zeg maar zelfde als hier op phphulp.
 
Obelix Idefix

Obelix Idefix

08/12/2012 12:49:08
Quote Anchor link
En waar is je blog/site op gebaseerd? Platte html? Kant-en-klaar cms (bv Drupal/Joomla)? Zelf geschreven? Database? Kortom: geef (veel) meer informatie, waar loop je vast?

Op zich is het, zelfs al is je kennis van PHP niet super, niet super moeilijk er van uitgaande dat je teksten/gegevens opgeslagen zijn in een database.
Maak een formulier waarin men het zoekwoord kan opgeven.
Maak een SELECT-query met daarin WHERE en LIKE.
Indien iets gevonden wordt -> tonen. Anders melding dat er niets gevonden is.
Let ook op goede controle / foutafhandeling.

Prima als je op meerdere sites je vraag plaatst, maar het is wel zo netjes om dat even te melden, zodat we weten wat er al aan reactie(s) is geweest. (http://www.pfz.nl/forum/topic/8842-zoek-script/)
Gewijzigd op 08/12/2012 12:59:09 door Obelix Idefix
 
- Ariën  -
Beheerder

- Ariën -

08/12/2012 12:49:45
Quote Anchor link
Hoe is die data opgeslagen?
 
Erwin b

Erwin b

08/12/2012 13:04:13
Quote Anchor link
Mijn hele site is platte html. Ik liep vast met een perl zoek script en merkte dat ik dan de werking ervan niet weet. Ik wil graag iets simpels. Ik merk dat ik dus waarschijnlijk een database moet aanmaken met de belangrijkste zoek woorden en dan iets dat de pagina's van de betreffende woorden toont?
 
Tim S

Tim S

08/12/2012 16:13:05
Quote Anchor link
Volgens mij wordt het lastig. Er zijn volgens mij wel manieren om te zoeken, maar ja kan dan moeilijk de pagina's laden zoals hier op php hulp.
 
John D

John D

08/12/2012 16:46:07
Quote Anchor link
Iets in de zin van: $result = preg_grep($pattern, file($path));
of
$file = file_get_contents ('path/to/file.ext');
preg_match_all ('regex_pattern_here', $file, $matches);
print_r ($matches);
Gewijzigd op 08/12/2012 16:46:54 door John D
 
Tim S

Tim S

08/12/2012 17:14:30
Quote Anchor link
Is het dan niet makkelijker om gewoon de content in een database te zetten
 
Erwin b

Erwin b

10/12/2012 22:50:52
Quote Anchor link
hm nog niet zo simpel merk ik al. Ik moet misschien nog maar even overdenken of het de moeite is voor een site met maar 30 pagina's om helemaal een zoek functie te gaan gebruiken. Allemaal bedankt voor de reacties en het mee denken.
 
Henk Verhoeven

Henk Verhoeven

12/12/2012 10:36:18
Quote Anchor link
Lijkt me toch niet zo heel moeilijk:
- zoekstring splitsen op spaties in woorden met explode
- directory van je website root met al zijn sudirectories doorlezen en de file-paden verzamelen (functie)
- files waarvan de namen eindigen op .html content ophalen met file_get_contents()
- content er uit halen met striptags()
- voor elk woord de content doozoeken met stripos() of preg_match()
- lijstje met urls van de matchende files printen

Je kunt het nog wat mooier maken door:
- Per gevonden pagina de titel op te sporen en in het lijstje te tonen
- Zoals google doet een stuk van de tekst rondom elk gevonden woord afbeelden per gevonden pagina

Wellicht moet je ook nog wat filtering toevoegen bijvoorbeeld als sommige bestanden onzichtbaar moeten blijven en dus niet moeten worden doorzocht.
Gewijzigd op 12/12/2012 10:36:46 door Henk Verhoeven
 
Erwin b

Erwin b

13/12/2012 20:45:33
Quote Anchor link
Dat klinkt voor mij erg moeilijk ;) Weetje misschien of hier ergens een tutorial of uitgebreidere informatie van is?
 
Max -

Max -

14/12/2012 10:02:27
Quote Anchor link
Erwin b op 13/12/2012 20:45:33:
Dat klinkt voor mij erg moeilijk ;) Weetje misschien of hier ergens een tutorial of uitgebreidere informatie van is?


Je zou deze kunnen gebruiken

http://youhack.me/2010/04/28/creating-a-fancy-search-feature-with-php-mysql-and-jquery/

Is tutorial + downloadbare sourcecode.

Je zal wel een beetje basiskennis van html, php, css en jquery moeten hebben. maar al met al is het niet heel erg ingewikkelde code.
 
Henk Verhoeven

Henk Verhoeven

14/12/2012 11:09:51
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
$dir = '.'; //zet hier het pad van de te doorzoeken directory
$baseUrl = ''; //zet hier de url van de te doorzoeken directory

if (isSet($_POST['zoek'])) {
    $zoekNaar = trim($_POST['zoekterm']);
    $woorden = explode(' ', $zoekNaar);
    $gevonden = zoekFiles($dir, $woorden);
} else {
    $zoekNaar = '';
}
printFormulier($zoekNaar);
if ($zoekNaar) {
    if ($gevonden)
        printGevonden($gevonden, $baseUrl);
    else
        print "niets gevonden";
}

function printFormulier($zoekNaar) {
    print '
    <form name="zoekformulier" method="POST" action="zoek.php" ENCTYPE="multipart/form-data" accept-charset="ISO-8859-15">
        <input type="text" name="zoekterm" value="';
    print htmlspecialchars($zoekNaar, ENT_QUOTES, 'ISO-8859-15');
    print '">
        <input type="submit" name="zoek" value="zoek">
    </form>';
}

function printGevonden($gevonden, $baseUrl) {
    forEach($gevonden as $filePath) {
        $delen = explode('/', $filePath);
        print '<a href="';
        print $baseUrl; //moet eigenlijk ook geexplode en in delen urlEncoded, maar als je normale directorynamen hebt gaat dit wel goed
        forEach($delen as $i => $deel) {
            if ($i) print "/";
            print rawUrlEncode($deel);
        }
        print '">';
        print htmlspecialchars($filePath, ENT_QUOTES, 'ISO-8859-15');
        print '</a><br>';
    }
}

function zoekFiles($dir, $woorden) {
    $files = getFilesFromDir($dir);
    $gevonden = array();
    $vanaf = strLen($dir) + 1;
    forEach($files as $filePath) {
        if (strToLower(subStr($filePath, -4)) == '.htm' || strToLower(subStr($filePath, -5)) == '.html') {
            $html = file_get_contents($filePath);
            //hier foutafhandeling toevoegen voor als de file niet in te lezen is
            $content = strip_tags($html);
            forEach($woorden as $woord) {
                $pos = stripos($content, $woord);
                if ($pos !== false) {
                    $gevonden[] = subStr($filePath, $vanaf);
                    break;
                }
            }
        }
    }
    return $gevonden;
}


de functies getFilesFromDir() en array_flat() moet je er zelf nog even achter plakken, zie deze link. Als je script zoek.php heet zou het moeten werken. Heet het anders, vervang dan "zoek.php" in de functie printFormulier() door de filenaam van je script.
Gewijzigd op 14/12/2012 11:35:19 door Henk Verhoeven
 
Erwin b

Erwin b

14/12/2012 11:15:29
Quote Anchor link
Bedankt, ik denk dat dit wel is wat ik bedoel :) Ik ga het proberen.

Groeten, Erwin

Toevoeging op 14/12/2012 22:58:50:

Bedankt voor het mee denken Max en Henk. Ik ben begonnen met het script van Henk omdat ik dan niet steeds een database hoef bij te werken naar een nieuw artikel.

@Henk, ik krijg het script niet werkend. Ik heb het stukje script van de link er achter geplakt maar de zoek.php toont dan gelijk de array als ik het bestand open.

Hij toont gelijk deze regel:
Quote:
Array ( [0] => ../test/blog/gele-kwikstaart.php [1] => ../test/blog/grote-zilverreiger.php [2] => ../test/blog/oranjetipje.php [3] => ../test/blog/tapuit.php [4] => ../test/blog/torenvalk.php [5] => ../test/blog/vreugderijkerwaard.php )
Gewijzigd op 14/12/2012 23:00:42 door Erwin b
 
Erwin b

Erwin b

15/12/2012 22:44:22
Quote Anchor link
@Henk Weet jij misschien wat ik verkeerd doe of waarom de arrey getoond word?
 

16/12/2012 04:56:20
Quote Anchor link
(ff een andere henk :) )

Dat is simpel te verklaren, je maakt met zoekFiles() immers een array aan die je returned ($gevonden).
Die dien je nog te "filteren" en dan kun je volgens mij gewoon linken naar welk php bestand je wilt..

Dit wil ik best voor je uitwerken, maar niet meer op dit uur van de dag :)
 
Erwin b

Erwin b

16/12/2012 11:30:32
Quote Anchor link
hm 5 uur is wel heel erg vroeg ja of heel laat.. Het zou super zijn als je het nog iets verder zou willen uitwerken. Zou je het hier kunnen posten en misschien ook nog uitleg erbij? In mijn naaste omgeving zijn ook andere geïnteresseerd in dit script, het is erg lastig om met weinig kennis van php/java een beetje goed werkend zoek script te vinden. Ik denk dat veel meer mensen hier wat aan hebben.
 
Henk Verhoeven

Henk Verhoeven

16/12/2012 15:03:05
Quote Anchor link
Ik bedoelde alleen de functies er achter plakken, niet het deel onder // Usage

Ik heb die script wel getest. Hij stond gewoon in een bestand genaamd zoek.php, met < ? php (zonder de spaties) ervoor en de twee functies getFilesFromDir() en array_flat() er achter en dan ? >. Had eigenlijk nog een header boven gemoeten en <.body></html> er achter, maar toen ik hem opvroeg via FireFox kreeg ik een leeg invulveld met een zoek knop wel gewoon te zien (verder niets). Na invullen en op de zoek knop drukken kreeg ik de resultaten. (nu ja, ik heb hem natuurlijk wel eerst moeten debuggen ;-) )

Er is nog veel aan te verbeteren. Zo telt hij bijvoorbeeld niet hoe vaak de woorden voorkomen. Daar zou hij namelijk mooi op kunnen sorteren. En hij is natuurlijk ook niet geschikt voor hele grote en hele drukke sites. Ik zag het dan ook meer als een manier om je op weg te helpen waarna je hem zelf aan je wensen aan zou passen. En dan zijn er hier altijd wel mensen die je daarbij willen helpen, zoals je ziet zelfs om 04:56 's nachts :-)

Voor een kant en klare script zou ik meer denken aan iets met een zoekwoordenindex in een database, en een spider om willekeurige sites mee in kaart te brengen. En misschien iets leuks als hier (zet een paar vinkjes en druk erboven op zoeken). Maar een spider heb ik nog niet en de rest moet ik dan wel losmaken uit die site en de nodige uitleg bij schrijven... Daarom heb ik het hier "simpel&doe het zelf" gehouden. Past ook beter bij dit deel van het forum.
Gewijzigd op 17/12/2012 09:59:57 door Henk Verhoeven
 
Tim S

Tim S

16/12/2012 19:24:19
Quote Anchor link
Volgens mij kan je de gegevens uit de array halen met foreach.
 
Erwin b

Erwin b

18/12/2012 21:00:18
Quote Anchor link
@Henk ik ga het nog eens proberen. Misschien zit ik helemaal verkeerd, maar na mijn idee moet ik met een database bij elk nieuw blogje alles bij de database aanvullen anders word dat niet gevonden en dat is bij "dit" script dat je hebt gemaakt niet. Ik ga proberen of ik nog iets verder kan komen :)

Groeten, Erwin
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.