Probleem met sorteren
Ik heb een tabel met gegevens waar ik zowel op- als aflopend wil sorteren.
Alleen kan hij maar op 1 manier sorteren. Waar zit de fout?
Code:
..........
..........
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
$manier = (isset($_GET['updown']) && $_GET['updown'] == 'DESC') ? 'DESC' : 'ASC';
// hier wordt dus gekeken of &updown= erin zit en of DESC erachter staat, zoniet dan sorteert hij automatisch op ASC
if(isset($_GET['sortby']))
{
switch($_GET['sortby'])
{
case 'id': $sorteer = 'id'; break;
case 'functie': $sorteer = 'functie'; break;
case 'bedrijf': $sorteer = 'bedrijf'; break;
case 'locatie': $sorteer = 'locatie'; break;
default: $sorteer = 'id'; break;
}
}
else
{
$sorteer = 'id';
}
$query=mysql_query("SELECT * FROM vacatures WHERE actief='ja' ORDER BY $sorteer $manier LIMIT $start, $max") or die(mysql_error());
// Nu komt $sorteer nog uit manier 1 of 2, die je er zelf boven moet plakken.
echo ("<TR><td class=tekst height=25 width=233>
<B>Functie:</b><a href=vacature.php?sortby=functie&updown=asc><img src=images/aflopend.gif></A>
<a href=vacature.php?sortby=functie&updown=desc><img src=images/oplopend.gif></A></TD><td class=tekst height=25 width=193>
<B>Bedrijf:</b> <a href=vacature.php?sortby=bedrijf&updown=asc><img src=images/aflopend.gif></A>
<a href=vacature.php?sortby=bedrijf&updown=desc><img src=images/oplopend.gif></A></B></TD><td class=tekst height=25 width=153>
<B>Locatie:</b> <a href=vacature.php?sortby=locatie&updown=asc><img src=images/aflopend.gif></A>
<a href=vacature.php?sortby=locatie&updown=desc><img src=images/oplopend.gif></A></B></TD></TR>");
// Aantal rijen opgehaald.
$num = mysql_num_rows($query);
if (empty($num))
{
echo "<p><tr><td id=vak4 class=body colspan=4 width=100%>Er zijn geen vacatures.</TD></p>";
}
else
{
while ($rij = mysql_fetch_array($query))
{
// Print het nieuws
//////////////////Einde Navigatie///////////////////
$color = ++$i % 2 ? "#DA7317": "#EB9A52";
echo ("<TR><td bgcolor=$color class=vacatures height=25 width=233><a href=viewvacature.php?id=".$rij["id"]."><font color=25333E><STYLE=color: 25333E; text-decoration: none;>".$rij ['functie']."</style></A></TD>");
echo ("<td bgcolor=$color class=vacatures height=25 width=193>".$rij ['bedrijf']."</TD>");
echo ("<td bgcolor=$color class=vacatures height=25 width=153>".$rij ['locatie']."</TD></TR>");
}
// Kijken of $vorige groter of gelijk is aan 0, dan de hyperlink 'Vorige'
echo ("<TR>");
if ($vorige >= '0')
{
echo "<TD class=vacatures><a href=\"vacature.php?start=$vorige\"><font color=25333E><B>Vorige pagina</B></a></TD>";
// De variabele start geeft voor de volgende pagina aan waarde query moet starten
}
// Tellen hoeveel records er zijn
$aantal = mysql_fetch_row(mysql_query("SELECT count(*) FROM vacatures"));
// Als het aantal groter is dan $volgende de link laten zien
if ($aantal[0] > $volgende)
{
echo "<TD colspan=3 align=right class=vacatures><a href=\"vacature.php?start=$volgende\"><font color=25333E><B>Volgende pagina</B></a>";
// De variabele start geeft voor de volgende pagina aan waarde query moet starten
}
//aantal pagina's berekenen
//afronden naar boven via ceil
$pag = ceil($aantal[0]/$max);
if ($pag == 1)
{
echo "<TR><TD class=vacatures>Er is 1 pagina</TD></TR>";
}
else
{
$pagnum = $start/$max + 1;
echo "<TR><TD class=vacatures>Dit is pagina $pagnum van $pag</TD></TR>";
}
}
echo ("<TABLE align=center><TR><TD valign=top class=tekst colspan=3 height=10></TD></TR>");
echo ("</table>");
include ('include/footer.php');
?>
$manier = (isset($_GET['updown']) && $_GET['updown'] == 'DESC') ? 'DESC' : 'ASC';
// hier wordt dus gekeken of &updown= erin zit en of DESC erachter staat, zoniet dan sorteert hij automatisch op ASC
if(isset($_GET['sortby']))
{
switch($_GET['sortby'])
{
case 'id': $sorteer = 'id'; break;
case 'functie': $sorteer = 'functie'; break;
case 'bedrijf': $sorteer = 'bedrijf'; break;
case 'locatie': $sorteer = 'locatie'; break;
default: $sorteer = 'id'; break;
}
}
else
{
$sorteer = 'id';
}
$query=mysql_query("SELECT * FROM vacatures WHERE actief='ja' ORDER BY $sorteer $manier LIMIT $start, $max") or die(mysql_error());
// Nu komt $sorteer nog uit manier 1 of 2, die je er zelf boven moet plakken.
echo ("<TR><td class=tekst height=25 width=233>
<B>Functie:</b><a href=vacature.php?sortby=functie&updown=asc><img src=images/aflopend.gif></A>
<a href=vacature.php?sortby=functie&updown=desc><img src=images/oplopend.gif></A></TD><td class=tekst height=25 width=193>
<B>Bedrijf:</b> <a href=vacature.php?sortby=bedrijf&updown=asc><img src=images/aflopend.gif></A>
<a href=vacature.php?sortby=bedrijf&updown=desc><img src=images/oplopend.gif></A></B></TD><td class=tekst height=25 width=153>
<B>Locatie:</b> <a href=vacature.php?sortby=locatie&updown=asc><img src=images/aflopend.gif></A>
<a href=vacature.php?sortby=locatie&updown=desc><img src=images/oplopend.gif></A></B></TD></TR>");
// Aantal rijen opgehaald.
$num = mysql_num_rows($query);
if (empty($num))
{
echo "<p><tr><td id=vak4 class=body colspan=4 width=100%>Er zijn geen vacatures.</TD></p>";
}
else
{
while ($rij = mysql_fetch_array($query))
{
// Print het nieuws
//////////////////Einde Navigatie///////////////////
$color = ++$i % 2 ? "#DA7317": "#EB9A52";
echo ("<TR><td bgcolor=$color class=vacatures height=25 width=233><a href=viewvacature.php?id=".$rij["id"]."><font color=25333E><STYLE=color: 25333E; text-decoration: none;>".$rij ['functie']."</style></A></TD>");
echo ("<td bgcolor=$color class=vacatures height=25 width=193>".$rij ['bedrijf']."</TD>");
echo ("<td bgcolor=$color class=vacatures height=25 width=153>".$rij ['locatie']."</TD></TR>");
}
// Kijken of $vorige groter of gelijk is aan 0, dan de hyperlink 'Vorige'
echo ("<TR>");
if ($vorige >= '0')
{
echo "<TD class=vacatures><a href=\"vacature.php?start=$vorige\"><font color=25333E><B>Vorige pagina</B></a></TD>";
// De variabele start geeft voor de volgende pagina aan waarde query moet starten
}
// Tellen hoeveel records er zijn
$aantal = mysql_fetch_row(mysql_query("SELECT count(*) FROM vacatures"));
// Als het aantal groter is dan $volgende de link laten zien
if ($aantal[0] > $volgende)
{
echo "<TD colspan=3 align=right class=vacatures><a href=\"vacature.php?start=$volgende\"><font color=25333E><B>Volgende pagina</B></a>";
// De variabele start geeft voor de volgende pagina aan waarde query moet starten
}
//aantal pagina's berekenen
//afronden naar boven via ceil
$pag = ceil($aantal[0]/$max);
if ($pag == 1)
{
echo "<TR><TD class=vacatures>Er is 1 pagina</TD></TR>";
}
else
{
$pagnum = $start/$max + 1;
echo "<TR><TD class=vacatures>Dit is pagina $pagnum van $pag</TD></TR>";
}
}
echo ("<TABLE align=center><TR><TD valign=top class=tekst colspan=3 height=10></TD></TR>");
echo ("</table>");
include ('include/footer.php');
?>
</SPAN></B></TD></TR></FONT></TBODY></table>
worden de variabelen $start en $max wel gedefinieerd wel toegekend?
overigens beveel ik het ook aan om je variabelen buiten de quotest te halen.
Code (php)
1
2
3
2
3
<?php
$query=mysql_query("SELECT * FROM vacatures WHERE actief='ja' ORDER BY ".$sorteer." ".$manier." LIMIT ".$start.", ".$max."") or die(mysql_error());
?>
$query=mysql_query("SELECT * FROM vacatures WHERE actief='ja' ORDER BY ".$sorteer." ".$manier." LIMIT ".$start.", ".$max."") or die(mysql_error());
?>
Oplossing: Ga eerst eens de gewenste queries noteren, hoe je die dan later op een dynamische manier gaat aanmaken, is een ander probleem.
Hier een voorbeeldje met een tweevoudige sortering:
Wil ik bijvoorbeeld op functie aflopend sorteren dan werkt dat. Wil ik vervolgens oplopend sorteren dan komt de link wel in de adresbalk van de browser te staan, alleen doet hij er niets mee. Ik krijg ook geen foutmelding.
echo ("<TR><td class=tekst height=25 width=233>
<B>Functie:</b><a href=vacature.php?sortby=functie&updown=asc><img src=images/aflopend.gif></A>
<a href=vacature.php?sortby=functie&updown=desc><img src=images/oplopend.gif></A></TD><td class=tekst height=25 width=193>
<B>Bedrijf:</b> <a href=vacature.php?sortby=bedrijf&updown=asc><img src=images/aflopend.gif></A>
<a href=vacature.php?sortby=bedrijf&updown=desc><img src=images/oplopend.gif></A></B></TD><td class=tekst height=25 width=153>
<B>Locatie:</b> <a href=vacature.php?sortby=locatie&updown=asc><img src=images/aflopend.gif></A>
<a href=vacature.php?sortby=locatie&updown=desc><img src=images/oplopend.gif></A></B></TD></TR>");
Gewijzigd op 01/01/1970 01:00:00 door renee
Verder is
Code (php)
1
2
3
2
3
<?
$query=mysql_query("SELECT * FROM vacatures WHERE actief='ja' ORDER BY $sorteer $manier LIMIT $start, $max") or die(mysql_error());
?>
$query=mysql_query("SELECT * FROM vacatures WHERE actief='ja' ORDER BY $sorteer $manier LIMIT $start, $max") or die(mysql_error());
?>
vragen om problemen. Nu kun je nooit meer de query echoen, $query is helemaal geen query (is een result-set) en de foutafhandeling is uitermate bot. 'Oeps, query gaat fout, STERF!!!'...
Voorbeeldje hoe het beter kan:
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
<?
$query = "
SELECT
*
FROM
vacatures
WHERE
actief='ja'
ORDER BY
$sorteer $manier
LIMIT $start, $max
";
$result = mysql_query($query);
if($result){ // query is gelukt
// doe iets met het resultaat
}
else { // query is mislukt
echo 'Query "'.$query.'" is mislukt vanwege de volgende fout: '.mysql_error();
}
?>
$query = "
SELECT
*
FROM
vacatures
WHERE
actief='ja'
ORDER BY
$sorteer $manier
LIMIT $start, $max
";
$result = mysql_query($query);
if($result){ // query is gelukt
// doe iets met het resultaat
}
else { // query is mislukt
echo 'Query "'.$query.'" is mislukt vanwege de volgende fout: '.mysql_error();
}
?>