vorige volgende rij selecteren in tabel
Pagina: « vorige 1 2 3 4 volgende »
@Eddy E
SELECT * FROM nieuws WHERE id > 7 LIMIT 0, 1 ORDER id ASC
die geeft overigens weer een fout zoals in post van 10:59:51 bij Order id
Mijn fout.
Let wel dat je nog 'foutafhandeling' moet invoeren. Want bij de hoogste is er geen hogere en geeft dus een fout.
De query van Arien is daar beter, maar iets 'moeilijker'... (het is nu CTRL + C / CTRL + V)
En de volgorde is WHERE, ORDER, LIMIT.
- Ariën - op 06/01/2017 13:32:03:
Wat volg je er nou niet aan mijn script? En waar loop je nou op vast?
En de volgorde is WHERE, ORDER, LIMIT.
En de volgorde is WHERE, ORDER, LIMIT.
Ik weet niet hoe de vorige/volgende a tag te plaatsen
Gewijzigd op 06/01/2017 13:43:01 door - Ariën -
Quote:
Maar nu komt het ook voor dat een id er niet meer is bijv. id 1 , 2 , 4 (id 3 bestaat niet meer),
De oplossing voor dit probleem lijkt mij niet een (of meer) ingewikkelde query maar de introductie van een extra kolom waarin je een volgorde van je items vastlegt. Daar koppel je dan je navigatie aan, en niet aan je item-id's.
Gewijzigd op 06/01/2017 14:29:04 door - Ariën -
(toegegeven, om deze nummering sluitend te houden moet je wel op een andere plek wat meer werk verzetten, het is een tradeoff)
Gewijzigd op 06/01/2017 14:39:59 door Thomas van den Heuvel
Ik ben wel benieuwd of dat de intenties van de topic starter zijn. Voor een overzicht van het volgende of vorige artikel heb je geen extra sortering nodig.
Hangt er vanaf of de volgorde van toevoegen gelijk is aan de volgorde van weergave. Op het moment dat je items anders wilt rangschikken is de introductie van een extra kolom voor dit doel praktischer.
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
$result = $mysqli->query($query_nieuws);
while ($row = $result->fetch_assoc() ) {
$id = $row['id'];
$title = $row['title'];
$id_get= mysqli_real_escape_string($mysqli, $_GET['id']);
if ($id_get < "$id") {
echo '<a href="nieuws-test2.php?id='.$id.'">Volgende</a>';
}
else if ($id_get > "$id") {
echo '<a href="nieuws-test2.php?id='.$id.'">Vorige</a>';
}
}
ik heb een id van 1 t/m 23 , id 11 heb ik niet
Ik kom met Vorige tot id 1 (GET) en inhoud id 2 van tabel wordt weergegeven.(1 dus niet)
met Volgende kom ik tot id 23 (GET) en inhoud id 22 van tabel word weergegeven. (23 dus niet)
- Ariën - op 06/01/2017 15:41:02:
Je kan in je loop gewoon $_GET['id'] gebruiken zonder escaping.
Dat lijkt mij niet verstandig. Escape altijd output. Maar dan wel op de goede manier. real_escape_string() doet niet zoveel in HTML hé. Gebruik in HTML htmlspecialchars(). En in URLs mogelijk ook urlencode(). Of wellicht eenvoudiger (en meer van toepassing in deze situatie): filter je input. Controleer allereerst of $_GET['id'] een numerieke waarde heeft.
Los hiervan, dit alles lijkt nogal veel op pagineringsfunctionaliteit (ook al toon je maar één item per keer). Misschien kan de oplossing meer in die hoek gezocht worden. Of je maakt gebruik van een volgorde kolom :p.
Gewijzigd op 06/01/2017 15:50:22 door Thomas van den Heuvel
dan verschijnt de inhoud van tabel id 2 (ik kom dus niet tot de inhoud van id 1 .
url ... /nieuws-test2.php?id=23
dan verschijnt de inhoud van tabel id 22 (ik kom niet tot de inhoud van id 23.
Vorige en Volgende werkt wel goed , als er geen volgende is verschijnt die ook niet en andersom,
of ze verschijnen beiden indien van toepassing.
Gewijzigd op 06/01/2017 15:57:59 door Pierre Web
Gewijzigd op 06/01/2017 16:18:21 door - Ariën -
nieuws-test2.php?id=22
Van de $id zal EEN moeten worden afgetrokken ...? maar in test word dan telkens EEN id overgeslagen.
Gewijzigd op 06/01/2017 16:25:31 door Pierre Web
Wat heb je nu allemaal aan code?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$query_nieuws = ("SELECT
* FROM `nieuws` WHERE ( id = IFNULL((SELECT MIN(id) FROM `nieuws` WHERE id > $id),0)
OR id = IFNULL((SELECT MAX(id) FROM `nieuws` WHERE id < $id),0))
");
$result = $mysqli->query($query_nieuws);
while ($row = $result->fetch_assoc() ) {
$id = $row['id'];
$title = $row['title'];
$id_get= mysqli_real_escape_string($mysqli, $_GET['id']);
if ($id_get < "$id") {
echo '<a href="nieuws-test2.php?id='.$id.'">Volgende</a>';
}
else if ($id_get > "$id") {
echo '<a href="nieuws-test2.php?id='.$id.'">Vorige</a>';
}
}
twee ifjes zorgde dus voor ander probleempje.
Gewijzigd op 06/01/2017 17:13:08 door Pierre Web
Dan zou dit moeten werken:
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
<?php
$id = $mysqli->real_escape_string($_GET['id']); // Escapen is BELANGRIJK
$query_nieuws = "SELECT * FROM `nieuws`
WHERE ( id = IFNULL((SELECT MIN(id) FROM `nieuws` WHERE id > $id),0)
OR id = IFNULL((SELECT MAX(id) FROM `nieuws` WHERE id < $id),0))
";
$result = $mysqli->query($query_nieuws);
while ($row = $result->fetch_assoc() ) {
if ($row['id'] < $id) {
echo '<a href="nieuws-test2.php?id='.$row['id'].'">Vorige</a>';
}
if ($row['id'] > $id) {
echo '<a href="nieuws-test2.php?id='.$row['id'].'">Volgende</a>';
}
}
?>
$id = $mysqli->real_escape_string($_GET['id']); // Escapen is BELANGRIJK
$query_nieuws = "SELECT * FROM `nieuws`
WHERE ( id = IFNULL((SELECT MIN(id) FROM `nieuws` WHERE id > $id),0)
OR id = IFNULL((SELECT MAX(id) FROM `nieuws` WHERE id < $id),0))
";
$result = $mysqli->query($query_nieuws);
while ($row = $result->fetch_assoc() ) {
if ($row['id'] < $id) {
echo '<a href="nieuws-test2.php?id='.$row['id'].'">Vorige</a>';
}
if ($row['id'] > $id) {
echo '<a href="nieuws-test2.php?id='.$row['id'].'">Volgende</a>';
}
}
?>
Edit: Volgorde was fout, aangepast.
Gewijzigd op 07/01/2017 10:37:09 door - Ariën -
kijken of dit onderstaande oploste maar maakt niks uit.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Deze moet andersom ff terzijde (Vorige/Volgende).
// Vorige eerst
if ($id < $row['id']) {
echo '<a href="nieuws-test2.php?id='.$row['id'].'">Vorige</a>';
}
if ($id > $row['id']) {
echo '<a href="nieuws-test2.php?id='.$row['id'].'">Volgende</a>';
}
// Vorige eerst
if ($id < $row['id']) {
echo '<a href="nieuws-test2.php?id='.$row['id'].'">Vorige</a>';
}
if ($id > $row['id']) {
echo '<a href="nieuws-test2.php?id='.$row['id'].'">Volgende</a>';
}
Url is: nieuws-test2.php?id=1 , dan komt het content VAN id 2. (kom niet verder terug, er is geen VORIGE meer )
het content van id 1 blijf dus buiten bereik
Om het content van id 1 weer te geven heb ik nieuws-test2.php?id=0 nodig (NUL), maar er is geen ID NUL
Url is nieuws-test2.php?id=23 , dan komt het content VAN id 22. (kom niet verder vooruit er is geen VOLGENDE meer)
het content van id 23 blijf dus buiten bereik.
Om het content VAN id 23 weer te geven heb ik nieuws-test2.php?id=24 nodig (24) maar er is geen ID 24
Gewijzigd op 07/01/2017 10:58:51 door Pierre Web