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
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)
)


Dit geeft de vorige en/of volgende records aan als die bestaan.
Twee vliegen in één klap gelijk.
Bedankt,

Ik krijg fout
Fatal error: Uncaught Error: Call to a member function fetch_assoc() on boolean in../nieuws-test2.php:40 Stack trace: #0 {main} thrown in ../nieuws-test2.php on line 40



$id = $_GET['id'];

$query_nieuws = ("SELECT
   * FROM `$tabelnaam` WHERE ( id = IFNULL((SELECT MIN(id) FROM `$tabelnaam` WHERE id > $id),0)
        OR id = IFNULL((SELECT MAX(id) FROM `$tabelnaam` WHERE id < $id),0)
   ");
   $result = $mysqli->query($query_nieuws);
   while ($row = $result->fetch_assoc() ) {  // regel 40

Ik ruik SQL-injection...
Wat zegt de foutafhandeling? Of voer het eens los uit in phpMyAdmin?
SQL Fout (1064): You have an error in your SQL syntax;
Pierre Web op 06/01/2017 10:16:07

SQL Fout (1064): You have an error in your SQL syntax;


... near ...... en hier staat de oplossing.

Graag de complete foutmelding.
#1064 -You have an error in your SQL syntax; check the manual that corresponds to your Maria DB server version for the right syntax to use near at line 3

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) //line 3








Opmerking: code zoals in mijn 1e post gaf geen fout
Je moet wel je WHERE goed afsluiten met een ), dus aan het einde van je query.

Ik heb hem hiermee werkende:

SELECT * FROM news
WHERE ( id = IFNULL((SELECT MIN(id) FROM news WHERE id > 1337),0)
        OR id = IFNULL((SELECT MAX(id) FROM news WHERE id < 1337),0)
) 


Ik krijg dan bestaande records 1336 en 1338 te zien.
Kopieer foutje hier , veranderd dus niks aan foutmelding


   $query_nieuws_next = ("SELECT
   * FROM `nieuws` WHERE ( id = IFNULL((SELECT MIN(id) FROM `nieuws` WHERE id > 14),0)
        OR id = IFNULL((SELECT MAX(id) FROM `nieuws` WHERE id < 14),0)


id 14 is aanwezig maar fout blijft
Aan het eind mis je een ), tel je haakjes maar na. Je laatste haakje is van je IFNULL en niet van je WHERE.
  
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)
 


fout blijft

[size=xsmall]Toevoeging op 06/01/2017 11:41:56:[/size]

alle code:

  
<?php
$database_host 			= 'localhost';
$database_username 		= 'xxx';
$database_password 		= 'xxx';
$database_name 			= 'xxx';
//open mysql connection
$mysqli = new mysqli($database_host, $database_username, $database_password, $database_name);
//output error and exit if there's an error
if ($mysqli->connect_error) {
    die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
} 
?>


                 <?php 

$id= mysqli_real_escape_string($mysqli, $_GET['id']);


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

Reageren