sorteren op lettter
mijn query is als volgt, niet helemaal uitgewerkt.
SELECT titel
FROM artikel
WHERE 1e letter titel = selectie letter
zodus, uit de kolom titel van tabel artikel haal ik een of meerdere items waarvan de 1e letter overeenkomt met de geselecteerde letter. vooral de where clausule baart me zorgen
mijn vraag is of iemand bereid is mij op weg te helpen hiermee?
is abbreviation een soort keyword binnen sql?
Gewijzigd op 08/10/2012 14:58:26 door - Ariën -
maar ik moet toch ergens een verwijzing hebben naar de geselecteerde letter?
ik zit nog in de beginfase van mijn project, dus nog niet aan het schrijven, vooral aan het voorbereiden.
Gewijzigd op 08/10/2012 15:20:45 door - Ariën -
Toevoeging op 08/10/2012 15:30:49:
ik vind het schandalig welke cursussen ik gevolgd heb. daar wordt nu eens niets verteld!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
if (!empty($_GET['letter'])) {
$sql = "
SELECT titel
FROM artikel
WHERE titel LIKE '" . substr($_GET['letter'], 0, 1) . "%'
";
echo $sql; // maar in plaats van te echo'en moet je de query uitvoeren ...
}
?>
...
<form action="">
<select name="letter">
<option value="a">a</option>
<option value="b">b</option>
<option value="c">c</option>
<option value="d">d</option>
...
</select>
<input type="submit" value="zoek">
</form>
if (!empty($_GET['letter'])) {
$sql = "
SELECT titel
FROM artikel
WHERE titel LIKE '" . substr($_GET['letter'], 0, 1) . "%'
";
echo $sql; // maar in plaats van te echo'en moet je de query uitvoeren ...
}
?>
...
<form action="">
<select name="letter">
<option value="a">a</option>
<option value="b">b</option>
<option value="c">c</option>
<option value="d">d</option>
...
</select>
<input type="submit" value="zoek">
</form>
Die substr garandeert dat slechts 1 letter wordt gebruikt en houdt dus ook SQL-injection tegen.
Gewijzigd op 08/10/2012 15:40:35 door Kris Peeters
Moet die $_GET niet een $_POST zijn?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$range_alphabethical = range('a','z');
if(in_array(strtolower($_GET['letter']),$range_alphabethical)) {
// voer je query uit en toon de resultaten.
}
?>
$range_alphabethical = range('a','z');
if(in_array(strtolower($_GET['letter']),$range_alphabethical)) {
// voer je query uit en toon de resultaten.
}
?>
Hierbij ga ik er wel vanuit dat je geen cijfers of andere vreemde tekens gebruikt.
Gewijzigd op 08/10/2012 15:44:18 door - Ariën -
@ Aar, Daar bestaat ctype_lower() voor.
Je hebt gelijk, dan zal ik mijn code uit mijn CMS maar eens herschijven :-)
ctype_alpha lijkt me logischer
Ozzie PHP op 08/10/2012 15:41:44:
Moet die $_GET niet een $_POST zijn?
Ik zou met GET werken.
Je kan die zoekopdracht dan bookmarken, doorsturen, ...
Het past in het plaatje: GET => aan de hand van variabelen in de url informatie "halen"
Gewijzigd op 08/10/2012 15:58:52 door Kris Peeters
daar zit wat in...
zie zo, weeral een tevreden bezoeker!!!!
mocht ik niet in belgie wonen trakteerde ik jullie allemaal een frisse pint!!!!
Toevoeging op 09/10/2012 06:55:38:
dit is wat ik ervan heb gemaakt
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$letter = range('a', 'z');
foreach ($letter as $value) {
echo '<a href="index.php?letter=$rij["letter"]">' .$value. '</a><br />';
}
$sql = "SELECT 'titel'";
$sql = "FROM 'artikel'";
$sql = "WHERE '$letter' LIKE '$letter'";
$resultaat = mysql_query($sql) or die("query mislukt:" .mysql_error());
while($rij = mysql_fetch_assoc($resultaat)) {
echo $rij["titel"];
}
?>
$letter = range('a', 'z');
foreach ($letter as $value) {
echo '<a href="index.php?letter=$rij["letter"]">' .$value. '</a><br />';
}
$sql = "SELECT 'titel'";
$sql = "FROM 'artikel'";
$sql = "WHERE '$letter' LIKE '$letter'";
$resultaat = mysql_query($sql) or die("query mislukt:" .mysql_error());
while($rij = mysql_fetch_assoc($resultaat)) {
echo $rij["titel"];
}
?>
Toevoeging op 09/10/2012 06:56:50:
mochten hier fouten instaan, wat ik wel vermoed, mag je die altijd doorgeven.
Toevoeging op 09/10/2012 07:18:41:
wegens omstandigheden heb ik dit nog niet kunnen testen