Hallo,

ik heb op mijn website 3 reclame tabellen. Het is de bedoeling dat de reclame bij het openen van de pagina elke keer verandered.

Ik gebruik hiervoor een simpel random script dat op zich prima werkt:

<?

$query = "SELECT * FROM reclame ORDER BY RAND() LIMIT 0,1";
$res = mysql_query($query) or trigger_error(mysql_error());

while ($row = mysql_fetch_array($res))
{

?>

Wat het script nu doet is de reclames uit de database halen en deze random in de tabellen zet. Op zich is dit ook de bedoeling, maar hij laat nu in alle 3 de reclame tabellen dezelfde reclames zien.

het is de bedoeling dat in elke reclame tabel dus andere reclame komt te staan.

Heeft iemand enig idee hoe ik ervoor kan zorgen dat een bepaalde reclame niet dubbel weergegeven kan worden en er dus in elke tabel iets anders komt te staan ?

bvd

Robin
Je haalt maar 1 record op, zie de LIMIT. Dat je deze dan 3x op het scherm zet, mag je zelf weten... Misschien de LIMIT aanpassen?
dat heb ik geprobeerd, door ipv LIMIT 0,1 , LIMIT 0,20 (momenteel 20 records in de databse) te zetten, maar dat had geen positief effect.

Hij liet dan ineens de tabellen 20 keer zien op de site.

is het niet mogelijk om dit in het echo gedeelte aan te passen of moet dit echt in het query gedeelte ?
en uiteraard heb ik ook geprobeerd om de limit op 3 te zetten maar ook dan maakt hij 3 extra tabellen aan...
Zoek eerst eens uit wat nu het resultaat van je query is. Wanneer jij gewoon 3 resultaten wilt hebben, dan is LIMIT 3 voldoende.

De while-loop wordt dan 3 x doorlopen (je hebt tenslotte 3 resultaten, test dit ook even in PHPmyAdmin). Ga dan eens in de rest van je code kijken waarom het daar mis gaat.

Edit: Waar is de rest van je code dan? Er wordt hier helemaal nergens een tabel aangemaakt.
je hebt gelijkt ik had iets duidelijker moeten zijn, ik ga ff het eea nog proberen en kom zo op je overige vragen terug

bvd
dit is de volledige code:

<?

$query = "SELECT * FROM reclame ORDER BY RAND() LIMIT 0,1";
$res = mysql_query($query) or trigger_error(mysql_error());

while ($row = mysql_fetch_array($res))
{

?>

----- begin div/tabel 1 -----

<?php echo $row['reclamelink']; ?>

----- eind div/tabel 1 -----



----- begin div/tabel 2 -----

<?php echo $row['reclamelink']; ?>

----- eind div/tabel 2 -----



----- begin div/tabel 3 -----

<?php echo $row['reclamelink']; ?>

----- eind div/tabel 3 -----

<?php
}
?>


nog steeds heeft het aanpassen van de limit geen effect.

hij haalt nu nog steeds random de reclames uit de database en deze veranderen ook bij elke refresh van de pagina.

met de echo haal ik in alle 3 de tabellen met dezelfde code de resultaten op.

naar mijn mening zijn er dan 2 mogelijk oplossingen:

- de echo aanpassen zodat er 3 verschillende reclames geprint worden

- de query aanpassen zodat er geen dubbel reclames kunnen worden weergegeven.

ik heb alleen geen idee hoe ik dit kan doen en of er andere oplossingen zijn..

ben zelf uiteraard ook al aan het googlen en het eea aan het proberen maar het wil me gewoon niet lukken
Iedere keer dat jij de while-lus doorloopt, zet je 3x een <?php echo $row['reclamelink']; ?> als output. Wat zou er dan gebeuren? Ik verwacht dat je dan 3x dezelfde output in verschillende div's op het scherm krijgt.

Echter, om dat de while-lus x-keer wordt doorlopen, zullen er ook x-aantal div-jes over elkaar heen staan. Kijk maar eens in je html-broncode.

Je moet in je lus slechts 1 x <?php echo $row['reclamelink']; ?> zetten en een variabele aanmaken voor het beschrijven van de div. Laat een tellertje meelopen o.i.d.
ik denk dat ik je goed begrijp. ga het weer ff proberen en testen en laat asap iets van me horen.

nogmaals bedankt
ik heb het op een andere manier opgelost, namelijk:

$query = "SELECT * FROM tips,reclame ORDER BY RAND() LIMIT 0,4";
$res = mysql_query($query) or trigger_error(mysql_error());

if ($res == 0)
{
echo "fout";
}

else {

?>


en dan het volgende als echo voor reclame 1 :

<?php echo(mysql_result($res,0,'reclameplaatje')); ?>

reclame 2 :

<?php echo(mysql_result($res,1,'reclameplaatje')); ?>


etc etc.

toch bedankt voor de reacties

Reageren