Hallo Php-ert,

Voor onze nieuwssite ben ik - zonder succes - een lange tijd bezig geweest om een vorige - volgende link te maken. Dat is niet simpel, want hij mag NIET op ID geordend worden, aangezien die weleens door elkaar heen staan. Ze moeten op datum...

$nu zorgt er overigens voor dat voorgeprogrammeerde nieuwsitems niet zichtbaar zijn voor de ingestelde tijd.

Hier de query om het 'huidige' nieuwsbericht uit de database te halen. Hij moet in dit geval dus -1 item weergeven en ik heb gewoon geen idee hoe ik dat aanpak. Ik heb geprobeerd de DeSC Limit anders af te stellen (1,1), maar dat werkt niet.

<? function Showvolgende()
{
global $db;
$nu = time();
$sql = "SELECT * FROM `Nieuws` WHERE id='".$_GET['Archive']."' AND UNIX_TIMESTAMP( _time ) < $nu ORDER BY _time DESC LIMIT 0,1";

$db->DbQuery( $sql );

if( $db->DbNumRows() > 0 )
while( $next = $db->DbNextRow() )
{
echo "<a class='item' href='index.php?Archive={$next['id']}'> | volgende</a>";

}
else
echo "";
}?>

Mocht je zin hebben om me hier bij te helpen, heel graag!

Bedankt,

Christian
Hierbij overigens nog de velden van de DB:

`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL default '',
`message` text NOT NULL,
`_time` varchar(14) default NULL,
`author` text,
`category` text,
`bronlink` text NOT NULL,
`more` text NOT NULL,
`morelink` varchar(62) default NULL,
UNIQUE KEY `id` (`id`)
Ik snap niet waarom je erin hebt staan:
WHERE id='".$_GET['Archive']."

Want anders zou ik het zo doen:

<?
$sql = "SELECT * FROM Nieuws WHERE UNIX_TIMESTAMP( _time ) < $nu ORDER BY _time DESC LIMIT 0,1;
?>
Dan geeft hij de eerste nieuwe nieuwsbericht aan. En dan moet je het ID uit de database halen en daarheen linken.
De reden waarom we WHERE id=".$_GET['Archive']." gebruiken is omdat het nieuwsitem geopend is. Stel je zit op bericht 30 van 2000, wil je dat hij onder "vorige" naar bericht 29 linkt en niet naar 1999. Of bij volgende naar 2001 ipv 31...

Het gaat dus niet om een overzicht van artikelen, maar om een volgende / vorige link als een nieuwsbericht al geopend is!
Dus wel met id's gelinkt?

Dan krijg je dit:

<?
$volgende = $_GET['Archive']+1;
$vorige = $_GET['Archive'];-1;

echo '<a href="index.php?Archive='.$volgende.'">Volgende</a>';

echo '<a href="index.php?Archive='.$vorige.'">Vorige</a>';
?>
Probleempje dus, want als je dmv de WHERE een specifiek ID opvraagt, kan je dus geen LIMIT opgeven.
@Zim, dat gaat niet. De id's staan door elkaar heen. Hij moet op datum gerangschikt worden, niet op ID.
Wat als je nu de datum van het nieuwsitem wat je op je scherm hebt staan haalt. En dan gewoon zet:
<?
$sql = "SELECT * FROM Nieuws WHERE UNIX_TIMESTAMP( _time ) < ".$laatstenieuwsbericht." ORDER BY _time DESC LIMIT 0,1;
?>
Waarbij $laatstenieuwsbericht de datum van je huigige nieuwsbericht is?

En dat is dan volgende, bij vorige is de 'pijl (<)' omgedraaid.
Dan kan ik toch ook het volgende doen? Het werkt in iedergeval niet...

<?
$sql = "SELECT * FROM Nieuws WHERE UNIX_TIMESTAMP( _time ) < UNIX_TIMESTAMP( _time ) ORDER BY _time DESC LIMIT 0,1;
?>
Nee nu zeg je in gewoon nederlands: Geef alle waardes van nieuws waar de tijd (00) is groter dan de tijd (00)...

Je moet zeggen al de tijd van de vorige tijd groter is als de tijd uit de database.

Dus je moet 2x dat ding laten lopen, een keer met een WHERE van het id: waar je dan de de vorige tijd uithaalt. En die vergelijkt met de nieuwe...
Okay... Het punt waar ik vastloop is dit; ik weet niet hoe ik ".$laatstenieuwsbericht." bepaal. Met de volgende query wordt het bericht weergeven:

<?

$Sql="SELECT * FROM Nieuws WHERE id='".$_GET['Archive']."' AND UNIX_TIMESTAMP( _time ) < $nu";
if($Result = mysql_query($Sql)){
$Row = mysql_fetch_assoc($Result);

?>

Ik neem aan dat ".$laatstenieuwsbericht." hierin al gedefinieerd moet worden?

Reageren