Mit jedem Refresh ein neues Bild anzeigen

armin bittner

Grünschnabel
Hallo,
ich habe folgendes Problem.
Auf einer Seite soll beim Besuch jedesmal ein neues Bild + Link angezeigt werden.
Ich habe auch schon ein Script dafür gefunden (die Sache mit dem Zufallsbild).
Das ist der momantane Code:
<?php
$bilder1 = array("banner1.gif","banner2.gif","banner3.gif","banner4.gif");
$bilder = array("<a href=\"test1.html\">Jo</a>","<a href=\"test2.html\">Micha</a>","<a href=\"test3.html\">Dein Buch</a>","<a href=\"test4.html\">Neues vom Markt</a>");
mt_srand ((double)microtime()*1000000);
$zahl = mt_rand(0,(count($bilder1) - 1));

echo "<img src=\"".$bilder1[$zahl]."\"><br>" ;
echo $bilder[$zahl];
?>

Nun bin ich nicht damit zufrieden, weil er mir nicht bei jedem Refresh ein neues Bild anzeigt, sondern manchmal (aber selten) 2 oder 3 mal dasselbe Bild, obwohl ja im Script drin steht, daß er es eigentlich nicht machen soll. Er macht es aber trotzdem.
Eigentlich ist es mir egal ob er mir die Bilder per Zufall auswählt, es muß halt jedesmal ein neues sein. Wie kann ich das Script verändern, das er mir die Bilder in ihrer Reihenfolge ausgibt? Also 1.Klick = Bild1, 2.Klick = Bild2, 3.Klick = Bild3 und am Ende wieder von vorne anfängt. Er also eine Schleife bildet.
Hat da jemand einen Plan?

Gruß
Armin
 
Du benötigst einen Zähler den du bei jedem Aufruf um 1 erhöhst.
Den gibst du dann per Cookie weiter.

(per Cookie, weil ich nicht ganz verstanden habe ob du das Bild bei
jedem Refresh neu laden möchtest oder bei jedem Klick)

PHP:
$bilder 	= array("banner1.gif",
		"banner2.gif",
                 "banner3.gif",
                 "banner4.gif");

$links	=	array("<a href=\"test1.html\">Jo</a>",
		      "<a href=\"test2.html\">Micha</a>",
                       "<a href=\"test3.html\">Dein Buch</a>",
                       "<a href=\"test4.html\">Neues vom Markt</a>");

if($_COOKIE['zahl'])
	$zahl	=	$_COOKIE['zahl'];
else
	$zahl	=	0;

echo "<img src=\"".$bilder[$zahl]."\"><br>" ;
echo $links[$zahl];

if(!$_COOKIE['zahl'])
	setcookie("zahl",1);

$_COOKIE['zahl']++;
 
Hallo Nils,
erstmal super Danke für die schnelle Hilfe.
Also dieses Bild ist auf der Eingangsseite und soll sich ändern, sobald ein Besucher dort landet. Es kann auch ruhig wechseln, wenn der selbe Besucher nochmals beim "stöbern" auf der Site auf der Eingangsseite landet.
Hab es mal ausprobiert und bekam folgende Fehlermeldung:
Warning: Cannot modify header information - headers already sent by (output started at /var/www/web102/html/rid/images/index2.php:17) in /var/www/web102/html/rid/images/index2.php on line 21

Zur Info: Es sind vor dem <?php und nach dem ?> keinen Leerzeichen oder sonstwas

Was hat dies zu bedeuten?

Gruß
Armin
 
Zuletzt bearbeitet:
Die Paar Zeilen Code müssen ganz oben am File stehen. Es darf davor kein echo oder print oder sonst was Sein. Wie gesagt, schreibe die paar Zeilen einfach ganz an den Anfang. Also ganz zuoberst..

MFG
redX
 
Hallo redX
ich habe nichts davor zu stehen, nur diesen blanken Code. Es kommt auch nichts dahinter.
Hast Du es mal ausprobiert und es geht?

Habe mal als Probe eine 123 vor dem Code gesetzt:
123
<?php
$bilder = array("banner1.gif",
"banner2.gif",
"banner3.gif",
"banner4.gif");

$links = array("<a href=\"test1.html\">Jo</a>",
"<a href=\"test2.html\">Micha</a>",
"<a href=\"test3.html\">Dein Buch</a>",
"<a href=\"test4.html\">Neues vom Markt</a>");
if($_COOKIE['zahl'])
$zahl = $_COOKIE['zahl'];
else
$zahl = 0;

echo "<img src=\"".$bilder[$zahl]."\"><br>" ;
echo $links[$zahl];

if(!$_COOKIE['zahl'])
setcookie("zahl",1);

$_COOKIE['zahl']++;
?>

Und im Browser sieht es echt komisch aus. Zuerst das Bild, dann die 123 und dann der Link! ääähhhhh kann das sein?


Gruß
Armin
 
Zuletzt bearbeitet:
Hallo,
nochmals in dieser Runde die Frage: Kann mir da keiner helfen?
Es sah doch am Anfang so gut aus, wenn nicht diese blöde Fehlermeldung kommen würde. Ich habe ja schon selbst gegoogelt und nichts Brauchbares gefunden. Nur das man keine Leerzeichen oder sonstwas davor haben sollte. Habe ich ja auch nicht und trotzdem...
Wie bekomme ich diese, für einen PHP-Vollprofi sicherlich leichte Sache, zum laufen.
Gibt mir doch mal ein Tip.

gruß
Armin
 
Hallo,

mich würde nur mal interessieren wie ich das vorhande Script umschreiben muss damit die angezeigten Bilder in der richtigen Größe formatiert werden. Ich habe es mal mit einer CSS class im img Tag probiert aber das gab eine Fehlermeldung.

Dann habe ich auch noch die Linkfunktion ausgebaut und hoffe richtig gemacht.

HTML:
<?php
$bilder = array("banner1.gif",
"banner2.gif",
"banner3.gif",
"banner4.gif");
 
echo "<img src=\"".$bilder[$zahl]."\"><br>" ;
echo $links[$zahl];
 
if(!$_COOKIE['zahl'])
setcookie("zahl",1);
 
$_COOKIE['zahl']++; 
?>
 
Eine Frage an Nils oder jemand anderen:
Muß ich mit Cookies arbeiten, oder gibt es noch eine andere Möglichkeit ohne Cookies?
Bin ich der Einzige mit dieser Fehlermeldung, oder wird hier einfach nur Code gepostet ohne das auszuprobieren?
Jedenfalls Nils, Dein Script funktioniert definitiv NICHT bei mir!
Schei*e, ich habe gedacht hier kann mir jemand helfen. Schade:-(

Armin
 
Also die Cookies müssen schon sein. Irgendwie musst Du ja überprüfen, ob bei dem User, der das Bild anzeigt, ebendieses schon angezeigt wurde. Da PHP-Dateien zur Laufzeit (dh. bei Abruf) geparst wird, hast Du keine Möglichkeit, eine Variable zu setzen, die bei erneutem Aufrufen der Seite Ihren Wert behält.
Vielleicht könntest Du es mit einer Session realisieren, was der Cookie-Geschichte vom Prinzip her aber gleich käme.
Kannst Du mal den _gesamten_ Code der Seite posten?
 
Hallo!

Also, wenn du nicht möchtest, dass die Bilder häufiger zu sehen sind, fallen mir spontan zwei Lösungen ein:

  1. die Wahrscheinlichkeit senken, dass ein Bild doppelt vorkommt
  2. die Bilder, die ein User bereits gesehen hat, für jeden User spezifisch speichern

Wie du die Wahrscheinlichkeit senken könntest (was aber nicht 100%ig funktioniert), weisst du sicherlich.

Für die zweite Lösung musst du entweder auf deinem Server (mittels Sessions) oder (wie in diesem Beispiel) auf dem Computer der User (mittels Cookies) speichern, welche Bilder diese bereits gesehen haben.

Wenn du keine Cookies verwenden möchtest, müsstes du Sessions benutzen.
Da ist allerdings der Nachteil, dass, wenn der User den Browser schliesst und die Seite später nochmal aufruft, wird wieder "von vorne angefangen" (das heisst, der User sieht wahrscheinlich wieder Bilder, die er schon gesehen hat).
Bei Cookies ist der Nachteil, dass die User diese Löschen können oder diese garnicht erst akzeptieren.

Das Script, das hier von Nils gepostet wurde, kann auch garnicht funktionieren - unmöglich!
Das liegt daran, dass es vor dem Funktionsaufruf setcookie bereits Ausgaben gab.
Diese Ausgaben sind aber nicht darin begründet, dass das evtl. am Scriptanfang Leerzeichen oder ähnliches stehen, sondern einfach an den echo-Aufrufen.
Das scheint mir aber so offensichtlich, dass ich die starke Vermutung habe, dass du dich nicht allzu sehr damit auskennst.

Hier mal ein Beispiel, wie das Script funktionieren sollte:
PHP:
<?php
$bilder     = array("banner1.gif", 
        "banner2.gif", 
         "banner3.gif", 
         "banner4.gif"); 

$links    =    array("<a href=\"test1.html\">Jo</a>", 
              "<a href=\"test2.html\">Micha</a>", 
                       "<a href=\"test3.html\">Dein Buch</a>", 
                       "<a href=\"test4.html\">Neues vom Markt</a>"); 

$letztesbild = isset ($_COOKIE['zahl']) ? $_COOKIE['zahl'] : false;

if ($letztesbild)
{
    //von vorne anfange, falls beim letzten Bild in der Liste angekommen
   if ($letztesbild == sizeof($bilder) - 1)
        $neuesbild = 1;
   else
        $neuesbild = $letztesbild + 1;
}
else
{
    //wenn kein Cookie gesetzt, Bild zufällig auswählen
    mt_srand ((double)microtime()*1000000);
    $neuesbild = mt_rand(0,(count($bilder1) - 1));
}

setcookie ("zahl", $neuesbild);
echo "<img src=\"".$bilder[$neuesbild]."\"><br>" ; 
echo $links[$neuesbild]; 
?>

Das Script ist übrigens auch nicht getestet, da ich nicht die Zeit habe, die Bilder anzulegen (was man evtl. auch überspringen könnte), alles auf dem Server hochzuladen, usw.
 
Zuletzt bearbeitet:
Zurück