Zoeken in database en resultaten tonen
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
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sql = "
SELECT veld1, veld2
FROM tabelnaam
WHERE trefwoord LIKE '%".$zoekstring."%'
OR omschrijving LIKE '%".$zoekstring."%'"
;
?>
$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
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$sql = "
SELECT thumbnail
FROM tabel
WHERE omschrijving LIKE '%".$zoekwoord."%'
";
?>
$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.
Hoe kan ik het nu het zoekresultaat tonen dmv thumbnail afbeelding...?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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']."%'";
?>
<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']."%'";
?>
Verder is dit precies dezelfde methode zoals je ook alle andere SELECT queries afhandeld. Zie hier voor hoe je dat ook alweer deed...
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)
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
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>';
}
}
?>
<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
Dit is heeft mij wel een klein beetje geholpen, bedankt iedereen.
$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
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?
Misschien beter een nieuw eigen topic openen.
En daar ben ik het mee eens, en daarom zal ik dit topic sluiten om de boel op orde te houden.