Zoek functie maken bij mijn script.
Ik heb nu een site waar je een database op hebt. Mijn studie genoten kunnen hier dan bestanden op zetten zodat we er allemaal bij kunnen. Nu zou ik boven deze bestanden willen kunnen zoeken op groep en of vak.
Het liefst met twee keuze schermpjes en dan een button met zoek:
Welke groep zoek je?:
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
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
<select type="tekst" name="zgroep">
<option value="1 en 2">1 en 2</option>
<option value="3 en 4">3 en 4</option>
<option value="5 en 6">5 en 6</option>
<option value="7 en 8">7 en 8</option>
</select>
Voor welk vak zoek je?: <select type="tekst" name="vak">
<option value="Rekenen">Rekenen</option>
<option value="Taal">Taal</option>
<option value="Spelling">Spelling</option>
<option value="Begrijpend lezen">Begrijpend lezen</option>
<option value="Schrijven">Schrijven</option>
<option value="Engels">Engels</option>
<option value="Aardrijkskunde">Aardrijkskunde</option>
<option value="Geschiedenis">Geschiedenis</option>
<option value="Handvaardigheid">Handvaardigheid</option>
<option value="Tekenen">Tekenen</option>
<option value="Drama">Drama</option>
<option value="Muziek">Muziek</option>
<option value="Techniek">Techniek</option>
<option value="Verkeer">Verkeer</option>
<option value="Sociaal emotioneel">Sociaal emotioneel</option>
<option value="Beweginsonderwijs">Beweginsonderwijs</option>
<option value="Godsdienst">Godsdienst</option>
<option value="1 en 2">1 en 2</option>
<option value="3 en 4">3 en 4</option>
<option value="5 en 6">5 en 6</option>
<option value="7 en 8">7 en 8</option>
</select>
Voor welk vak zoek je?: <select type="tekst" name="vak">
<option value="Rekenen">Rekenen</option>
<option value="Taal">Taal</option>
<option value="Spelling">Spelling</option>
<option value="Begrijpend lezen">Begrijpend lezen</option>
<option value="Schrijven">Schrijven</option>
<option value="Engels">Engels</option>
<option value="Aardrijkskunde">Aardrijkskunde</option>
<option value="Geschiedenis">Geschiedenis</option>
<option value="Handvaardigheid">Handvaardigheid</option>
<option value="Tekenen">Tekenen</option>
<option value="Drama">Drama</option>
<option value="Muziek">Muziek</option>
<option value="Techniek">Techniek</option>
<option value="Verkeer">Verkeer</option>
<option value="Sociaal emotioneel">Sociaal emotioneel</option>
<option value="Beweginsonderwijs">Beweginsonderwijs</option>
<option value="Godsdienst">Godsdienst</option>
En dan daar onder nog een button met zoek.
Als ik dan bijvoorbeeld invul 1 en 2 en dan taal en ik klik op zoek dan moet hij alleen de bestanden voor 1 en 2 met als vak taal weergeven. De bestanden geef ik nu weer in een lange lijst maar hoe pas ik dit aan?
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
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
// Query for a list of all existing files
$sql = 'SELECT `id`, `name`, `vak`, `groep`, `auteur`, `mime`, `size`, `created` FROM `file`';
$result = $dbLink->query($sql);
// Check if it was successfull
if($result) {
// Make sure there are some files in there
if($result->num_rows == 0) {
echo '<p>Er staan nog geen bestanden online.</p>';
}
else {
// Print the top of a table
echo '<table width="100%">
<tr>
<td><b>Naam:</b></td>
<td><b>Vak:</b></td>
<td><b>Groep:</b></td>
<td><b>Auteur:</b></td>
<td><b>Download link:</b></td>
</tr>';
// Print each file
while($row = $result->fetch_assoc()) {
echo "
<tr>
<td>{$row['name']}</td>
<td>{$row['vak']}</td>
<td>{$row['groep']}</td>
<td>{$row['auteur']}</td>
<td><a href='get_file.php?id={$row['id']}'>Download</a></td>
</tr>";
}
// Close table
echo '</table>';
}
// Free the result
$result->free();
}
else
{
echo 'Error! SQL query failed:';
echo "<pre>{$dbLink->error}</pre>";
}
$sql = 'SELECT `id`, `name`, `vak`, `groep`, `auteur`, `mime`, `size`, `created` FROM `file`';
$result = $dbLink->query($sql);
// Check if it was successfull
if($result) {
// Make sure there are some files in there
if($result->num_rows == 0) {
echo '<p>Er staan nog geen bestanden online.</p>';
}
else {
// Print the top of a table
echo '<table width="100%">
<tr>
<td><b>Naam:</b></td>
<td><b>Vak:</b></td>
<td><b>Groep:</b></td>
<td><b>Auteur:</b></td>
<td><b>Download link:</b></td>
</tr>';
// Print each file
while($row = $result->fetch_assoc()) {
echo "
<tr>
<td>{$row['name']}</td>
<td>{$row['vak']}</td>
<td>{$row['groep']}</td>
<td>{$row['auteur']}</td>
<td><a href='get_file.php?id={$row['id']}'>Download</a></td>
</tr>";
}
// Close table
echo '</table>';
}
// Free the result
$result->free();
}
else
{
echo 'Error! SQL query failed:';
echo "<pre>{$dbLink->error}</pre>";
}
Kan iemand mij hiermee helpen met heel wat uitleg zodat ik er goed van kan leren? Ik kan niks op internet vinden en kom er niet uit met wat ik vind...
Groeten,
Dennis
Gewijzigd op 26/09/2013 08:38:47 door Dennis van DUin
IK heb nu dus een formulier weten te maken boven aan de pagina erbij die ook in de link weergeeft wat ik zoek:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<form name="input" action="testenzoek.php" method="get">
Welke groep zoek je?:
<select type="tekst" name="zoekgroep">
<option value="1 en 2">1 en 2</option>
<option value="3 en 4">3 en 4</option>
<option value="5 en 6">5 en 6</option>
<option value="7 en 8">7 en 8</option>
</select>
<input type="submit" value="Submit">
</form>
Welke groep zoek je?:
<select type="tekst" name="zoekgroep">
<option value="1 en 2">1 en 2</option>
<option value="3 en 4">3 en 4</option>
<option value="5 en 6">5 en 6</option>
<option value="7 en 8">7 en 8</option>
</select>
<input type="submit" value="Submit">
</form>
Nu kom ik er alleen echt niet uit waar ik nou moet vergelijken of de groep ook gelijk is aan de zoek groep in de link en hoe ik dat doe? Kan iemand me daar wat uitleg over geven of zeggen hoe het moet?
Groeten,
Dennis
Wil je ook op delen van een waarde in de kolom kunnen selecteren, dan heb je verschillende mogelijkheden. Ofwel je gaat werken met LIKE, ofwel je zet er een FULL TEXT INDEX op, ofwel je gaat met regexen aan de slag. Deze drie heb ik bewust in deze volgorde gezet, omdat je over het algemeen als eerste naar de LIKE optie gaat kijken, dan naar de index en pas als laatste naar de regexen. Gezien je vraag denk ik dat een LIKE query volstaat:
De % tekens zijn wildcards en geven eigenlijk gewoon aan dat op die plek vanalles kan staan. Elk record waar 'waarde' ergens in de betreffende kolom staat zal geselecteerd worden.
Om alle ins and outs te weten te komen zou ik even gaan zoeken op internet, er is genoeg zin en onzin over te vinden.
Dan hoe je het aanroept, eigenlijk gewoon het form posten dat je hebt en op je server die query draaien. Vervolgens laat je gewoon de resultaten zien en je bent klaar.
Let alleen wel op bij je values in je select nu.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<select type="tekst" name="zoekgroep">
<option value="1 en 2">1 en 2</option>
<option value="3 en 4">3 en 4</option>
<option value="5 en 6">5 en 6</option>
<option value="7 en 8">7 en 8</option>
</select>
<option value="1 en 2">1 en 2</option>
<option value="3 en 4">3 en 4</option>
<option value="5 en 6">5 en 6</option>
<option value="7 en 8">7 en 8</option>
</select>
Je hebt nu spaties in die values staan, terwijl dat server side keys van een array gaan worden. Dat is nooit een goed idee. Probeer alleen (kleine) letters, getallen en underscores te gebruiken. Dan weet je zeker dat je er nooit een probleem mee krijgt.