Hallo

Hallo,

Ik probeer de volgende rij uit tabel te halen met:


<?php
$id = $_GET['id'];
        $id = ($id+1);

<a href="nieuws.php?id='.$id.'">volgende</a>


$query_nieuws = ("SELECT *
 FROM `nieuws` WHERE id = '$id' ORDER BY id DESC LIMIT 1
   ");
?>

Maar nu komt het ook voor dat een id er niet meer is bijv. id 1 , 2 , 4 (id 3 bestaat niet meer),
en wat als het de laatste of eerste id betreft.
Er moet ook nog een vorige komen
Ik heb nu
  
   $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)
Je kan in je loop gewoon $_GET['id'] gebruiken zonder real_escape_string.

En wil je dus 1 vorige en 1 volgende zien?
- 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.
url ... /nieuws-test2.php?id=1

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.
Ik zou dan geen elseif gebruiken, maar twee if-jes.
Dan krijg ik bij de laatste Volgende en als ik die kies ga ik weer een terug naar 22

nieuws-test2.php?id=22

Van de $id zal EEN moeten worden afgetrokken ...? maar in test word dan telkens EEN id overgeslagen.
Wat heb je nu allemaal aan code?
  
$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.
Wat voor probleem dan? Je wilt toch volgende en/of volgende tonen?

Dan zou dit moeten werken:

<?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>';
	}
     } 
?>


Edit: Volgorde was fout, aangepast.



Ik heb rij 1 t/m 23 met id 1 t/m 23 ( er was geen id 11 maar die heb ik ff toegevoegd voor test
kijken of dit onderstaande oploste maar maakt niks uit.


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>';
    }



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






Reageren