Zoeken in database en resultaten tonen

Overzicht

Sponsored by: Vacatures door Monsterboard

Carel

Carel

06/01/2008 22:27:00
Anchor link
Ok mede dankzij jullie hulp heb ik mijn eerste werkende website kunnen maken. Codes zijn natuurlijk niet perfect zoals de ervaren mensen hier kunnen maken, maar het werkt uitstekend en mijn database vult zichtnetjes. Voor iemand die drie weken bezig (nog nooit php e.d. gedaan behalve html) is om een inlogsysteem, en upload systeem dat stap voor stap werkt en uiteindelijk in database toevoegt ben ik best blij met het resultaat. Ik wil iedereen dan ook bedanken voor je hulp.

Desondanks ik de basis heb neergezet wil ik nog 1 ding doen. Een zoekmachine die in mijn database zoekt er de resultaten toont. Mijn gebruikers uploaden foto's waar ze een categorie, omschrijving, trefwoord aan koppelen.

Bij mij worden de volgende gegevens opgeslagen in de database:
-Nummer (automatisch)
-categorie (vooraf bepaald en gekozen door gebruikers in topdown menu)
-omschrijving (text invoer)
-trefwoord (ook simpele text invoer)
-afbeelding (locatie en naam van originele upgeload afbeelding)
-thumbnail (locatie en naam van thumbnail afbeelding

Graag zou ik willen zoeken op categorie, omschrijving en trefwoord. Als resultaat wil ik graag de thumbnails tonen die aan de zoekopdracht voldoen. Eerst simpel zoeken in omschrijving en trefwoord en de optie uitgebreid zoeken waarin gebruikers een categorie kunnen kiezen en een trefwoord en een omschrijvingswoord of meer. Beetje zoals je verwacht denk ik.

Wellicht dat hier een tutorial is of dat het dusdanig eenvoudig is dat het mij uitgelegd kan worden of een simpel voorbeeld is. Ik hoop dat het niet al te moeilijk is.

Nogmaals bedankt voor de hulp en alvast bedankt voor het beantwoorden van deze vraag.
Gewijzigd op 01/01/1970 01:00:00 door Carel
 
PHP hulp

PHP hulp

19/04/2024 22:34:28
 
Jan Koehoorn

Jan Koehoorn

06/01/2008 22:33:00
Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
    $sql
= "
        SELECT veld1, veld2
        FROM tabelnaam
        WHERE trefwoord LIKE '%"
.$zoekstring."%'
        OR omschrijving LIKE '%"
.$zoekstring."%'"
        ;
?>

Uiteraard heb je $zoekstring gecheckt op injection. Wil je op relevantie kunnen sorteren, dan heb je een FULLTEXT index nodig.
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Joren de Wit

Joren de Wit

06/01/2008 22:33:00
Anchor link
De syntax van de query die je wilt gebruiken ziet er als volgt uit voor het zoeken in een omschrijving:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$sql
= "
    SELECT thumbnail
    FROM tabel
    WHERE omschrijving LIKE '%"
.$zoekwoord."%'
"
;
?>

Waarbij $zoekwoord het zoekwoord is dat de gebruiker ingevuld heeft.

Nu is dit natuurlijk alleen voor het zoeken in een omschrijving maar met behulp van een nette if/elseif/else constructie kun je aan de hand van de ingevulde gegevens een soortgelijke query opbouwen.
 
Carel

Carel

06/01/2008 23:00:00
Anchor link
Laat ik simpel beginnen ik heb met die tips van jouw het onderstaande nu gemaakt. Ik heb nu een invoerveld gemaakt zodra gebruiker een woord invoert kennelijk zoekt het in de tabel omschrijving van database afbeelding (vanzelfsprekend maak ik eerst connectie met database) naar het woord(en) dat de gebruiker heeft ingevoerd.

Hoe kan ik het nu het zoekresultaat tonen dmv thumbnail afbeelding...?

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
<form form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input name="zoeken" type="text" id="zoekn" size="30"><p>
<input type="submit" value="zoeken">
</form>

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')

$sql = "
    SELECT omschrijving
    FROM afbeelding
    WHERE omschrijving LIKE '%"
.$_POST['zoeken']."%'";
?>

 
Joren de Wit

Joren de Wit

06/01/2008 23:18:00
Anchor link
Allereerst, zet nooit een $_POST variabele direct in je query. Haal er altijd eerst mysql_real_escape_string() overheen om SQL injectie tegen te gaan.

Verder is dit precies dezelfde methode zoals je ook alle andere SELECT queries afhandeld. Zie hier voor hoe je dat ook alweer deed...
 
The Ultimate

The Ultimate

14/03/2008 20:06:00
Anchor link
@Blanche:
Stel ik heb een table met daarin de colomn titel. De titels beginnen allemaal met een hoofdletter. Door deze zoekmachine worden de titels alleen gevonden wanneer men het woord tijdens het zoeken ook met een hoofdletter invoert. Dat wil je niet, want daar rekent de bezoeker niet op. Hoe kun je zorgen dat de zoekfunctie geen onderscheid maakt tussen hoofd- en kleine letters? M.a.w. dat ie beide resultaten uitspuugt...??

Beste Karel,

Ik zag jouw topic en omdat ik zelf ook naar een zoekfunctie zocht heb ik hier op ingehaakt.

Ik heb er het volgende van gemaakt en moet zeggen dat het prima werkt.

Let op hij is nog niet SQL injectie-proof!!!

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
<h1>Zoeken</h1>
            
            <form action="search.php" method="post">
            <span class="formInput">zoek:</span><input type="text" name="zoekwoord" />

            <input type="submit" name="searchBtn" value="zoek!" />
            </form>
    
<?php

    // Als een zoekwoord wordt ingegeven:
    if(isset($_POST['searchBtn'])) {
    
    $zoekwoord = $_POST['zoekwoord'];

    // Aantal resulaten tellen:
    $sql = mysql_query("
    SELECT count(*)
    FROM topic
    WHERE topic_title LIKE '%"
.$zoekwoord."%'
    OR topic_txt LIKE '%"
.$zoekwoord."%'
    "
);
    
    $totalSearch = mysql_result($sql, 0 ,0);


    // Aantal resultaten weergeven:
    print '<p style="float:right;">Resultaten <b>'.$totalSearch.'</b> voor <b>'.$zoekwoord.'</b></p><br />';
    print '<p style="float:left;"><h1>Resultaat:</h1></p>';
    
    // Zoekfunctie:
    $sql = mysql_query("
    SELECT *
    FROM topic
    WHERE topic_title LIKE '%"
.$zoekwoord."%'
    OR topic_txt LIKE '%"
.$zoekwoord."%'
    "
);

    // Resultaten weergeven:    
    while($res = mysql_fetch_array($sql)) {
    
    print '<p><a href="forum_show_topic.php?cat='.$res['cat_id'].'&id='.$res['topic_id'].'">';
    print $res['topic_title'].'</a><br />';
    print substr($res['topic_txt'],0,250);
    print '...<br />';
    print '<a href="forum_show_topic.php?cat='.$res['cat_id'].'&id='.$res['topic_id'].'">http://www.rechtenstudent.net/forum/forum_show_topic.php?cat='.$res['cat_id'].'&id='.$res['topic_id'].'</a></p>';


    }
    }


?>


Misschien kun je er iets mee....!?
Gewijzigd op 01/01/1970 01:00:00 door The Ultimate
 
Tom Heek

Tom Heek

14/01/2010 21:57:00
Anchor link
Dit is heeft mij wel een klein beetje geholpen, bedankt iedereen.
 
John D

John D

14/01/2010 22:09:00
Anchor link
Advies: bouw je query op naar wat de bezoeker heeft ingevuld.
$query = "SELECT * FROM topic WHERE ";
if ISSET($_POST['topic'] {
$query = $query . "topic_title LIKE '%".$zoekwoord."%"
etc
zo krijg je niet allerlei lege LIKE zoekacties.
zorg wel dat je $_POST beveiligd is tegen SQL injection, hier eerder genoemd.
uiteindelijk vuur je je query af: $sql = mysql_query($query);
Bij problemen kan je nu altijd een echo doen van $query
 
Ben Zn

Ben Zn

04/12/2015 10:27:20
Anchor link
Ik heb het zelfde probleem m.b.t. hoofdletters. Als er een woord in de tabel zit die met een hoofdletter begint en ik zoek met kleine letters, dan vindt hij geen gelijkheid. Een oplossing hiervoor zie ik niet terug in het antwoord van 'The Ultimate'. Ik ben nu bezig met een zoekfunctie voor de webshop alledagdeals.nl en als ik daar vandaag ga zoeken op notebook krijg ik als resultaat: geen gegevens gevonden. In de aanbieding van Ibood komt 2 keet 'Notebook' voor. Als ik nu ga zoeken met Noteboek krijg ik idd resultaat te zien. Hoe los ik dit probleem op?
 
- SanThe -

- SanThe -

04/12/2015 10:33:14
Anchor link
Topic is uit 2008 waar men ooit in 2010 weer verder mee is gegaan.
Misschien beter een nieuw eigen topic openen.
 
- Ariën  -
Beheerder

- Ariën -

04/12/2015 10:37:19
Anchor link
En daar ben ik het mee eens, en daarom zal ik dit topic sluiten om de boel op orde te houden.
 
 

Dit topic is gesloten.



Overzicht

 
 

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.