Zufallsbild mit Text
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
ausgabe
beispiel
bild
code
dank
ergebnis
image
index
motiv
netz
paar
pfad
problem
rand
text
url
verzeichnis
zitat
zufall
-
Guten Abend
Ich bin den ganzen Tag schon am Suchen, wie der PHP Code für folgendes Anliegen lautet: Ich möchte beim Seitenaufruf ein zufälliges Bild mit einem dazugehörigen Text anzeigen. Also im Prinzip soll nur das BIld zufällig sein, der Text nicht, da er ja zum Bild gehört. Ich hoffe ihr versteht, was ich meine und könnt mir helfen.
Danke schonmal im Vorraus für's Helfen.
LG,
Webdesignerin -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ungetestet, aber sollte so in etwa funktionieren ;)<? $foo = array("path/bild.png", "path/bild2.png", "path/bild3.png"); srand ((double)microtime()*1000000); $randval = rand(0,2); echo '<img src="' . $foo[$randval] . '">'; ?>
-
Hallo
Danke, aber... ich wollte noch Text zum Bild. Tschuldige, wenn ich mich unverständlich ausgedrückt haben sollte.
Zu Bild 1 soll Text a, zu Bild 2 Text b - also es soll ein Paar zufällig ausgegeben werden.
Folgendes habe ich im Netz gefunden, es hat aber nicht funktioniert: :(
$Images=array('bild_1.jpg',bild_2.jpg','bild_3.jpg'); // $Images enthält die Bilder im Verzeichnis $Quotes=array ( 'bild_1.jpg'=>'text a, 'bild_2.jpg'=>'text b, 'bild_3.jpg'=>'text c', ); // in $Quotes werden den Bildern die Zitate zugeordnet $QuoteX=rand(0,(count($Quotes)-1)); // Auswahl des Bildes, bzw. des entsprecheden Index in $Images echo $Quotes[$Images[$QuoteX]]; // Ausgabe des Zitats, durch Angabe des Bildnamens
LG,
Webdesignerin -
In wiefern hat es denn nicht funktioniert?
Ich würde vorschlagen:
<? $foo = array("path/bild.png", "path/bild2.png", "path/bild3.png"); $text = array("text1", "text2", "text3"); srand ((double)microtime()*1000000); $randval = rand(0,2); // Ausgabe: echo '<img src="' . $foo[$randval] . '">'; echo $text[$randval]; ?>
Ergänzung:
$foo ist halt ein array, in dem die Bilder sind, und in $text der dazugehörige Text. Also wenn ich dein Problem richtig verstanden habe ;)
Beitrag zuletzt geändert: 19.10.2009 22:00:34 von nerdinator -
Das geht viel einfacher:
// das ändern $images = array('bild1', 'bild2', 'bild3'); // das nicht ändern $elementzahl = 0; foreach($images as $x) { $elementzahl++; } echo $images[(mt_rand(0, $elementzahl))];
mfg drafed-map -
Hi
Mir wurde folgende Medung bei meinem Fund im Netz ausgegeben:
Parse error: syntax error, unexpected T_STRING, expecting ')
Übrigens Danke für Deinen Code. Der funktioniert einwandfrei.
Was ist denn, wenn das ein längerer Text wird und ich Zeilenumbrüche brauche? Ich habe 32 Bilder und zu denen soll eine Beschreibung angezeigt werden Und wie kann ich den Text Etwas weiter unter dem Bild platzieren und nicht daneben? ...
LG,
Webdesignerin
P.S.: @ drafed-map: Ich möchte ja Bild und Text. in Deinem Beispiel wird nur ein Zufallsbild (ohne Text ausgegeben).
Beitrag zuletzt geändert: 19.10.2009 22:09:14 von webdesignerin -
Und noch einfacher: Statt der Elementzahlschleife ein count() oder sizeof() nutzen:
// das ändern $images = array('bild1', 'bild2', 'bild3'); $texte = array('hallo', 'welt', 'lorem ipsum'); $rand = mt_rand(0, sizeof($images)); echo $images[$rand] . $texte[$rand];
Und das ganze nach belieben formatieren :) -
Verallgemeinerter Code:
<? function GetRandomImage() { $image = array( "path/bild.png", "path/bild2.png", "path/bild3.png" //hier können weitere bilder hinzugefügt werden ); $text = array( "text1", "text2", "text3" // hier müssen die dazugehörigen texte // in der reihenfolge der bilder hin ); $randval = mt_rand(0, sizeof($images)); $response = array($image, $text); return $response; } ?>
webdesignerin schrieb:
Zeilenumbrüche werden in php mit \n dargestellt, aber ich denke du brauchst da viel mehr das HTML-Tag <br>. also beispielsweise als text
Was ist denn, wenn das ein längerer Text wird und ich Zeilenumbrüche brauche? Ich habe 32 Bilder und zu denen soll eine Beschreibung angezeigt werden Und wie kann ich den Text Etwas weiter unter dem Bild platzieren und nicht daneben?'hier kommt ein zeilenumbruch!<br>und noch einer<br>und so weiter.'
Du kannst die $image-variable natürlich überall auf deiner webseite verwenden, genauso wie du überall den text platzieren kannst.
Beitrag zuletzt geändert: 19.10.2009 22:35:39 von nerdinator -
@webdesignerin: Ich dachte, du packst das zusammen in ein Array-Element.
Zu deinem Problem mit den Zeilenumbrüchen. Wenn du einfach die Eingabetaste drückst, dann ändert das an der Funktionalität und an dem, was der User sieht nichts. Es wird nur eine neue Zeile im Quelltext erzeugt. Nutze den HTML-Tag <br /> oder <br>, je nachdem wie es dir lieber ist. Oder habe ich da etwas falsch verstanden?
nerdinator schrieb: @drafed-map: Wenn ich das richtig sehe, verwendest du aber keinen echten zufall ;)
Ok, also ich verwende deiner Meinung nach einen unechten, aber funktionierenden Zufall. Interessant Das geb ich gleich mal an die Philosophen weiter.
Ne, also Spaß bei Seite: Ich verwende, unschwer zu erkennen, die Funktion mt_rand(). Im PHP-Handbuch steht folgendes:Viele Zufallszahlengeneratoren, die auf älteren libc-Versionen basieren, haben seltsame oder doch zumindest unerwartete Verhaltensweisen und sind zudem recht langsam. Standardmäßig verwendet PHP den libc-Zufallszahlengenerator mit der Funktion rand(). Die Funktion mt_rand() kann jedoch als vollwertiger Ersatz verwendet werden. Sie verwendet einen Zufallszahlengenerator mit den bekannten Charakteristika der » Mersenne Twister, die Zufallszahlen viermal schneller generiert als der durchschnittliche libc-rand()-Aufruf.
Ein vollweriger Ersatz für die klassische Version, nur das mt_rand 4 mal schneller ist. Nachzulesen ist das hier. -
Ho. Der Mersenne Twister Algorithmus garantiert Unabhängigkeit der zufälligen Variablen bis zur 623. Dimension. Danach sind die abhängig, also berechenbar. Logischerweise ist der Mersenne Twister, wie auch jeder andere deterministische Zufallsalgorithmus, nur ein Pseudo-Zufallgenerator. Aber das trifft auf rand() auch zu. Der seed des Rands wird übrigens sowohl bei rand() als auch bei mt_rand() schon seit Ewigkeiten automatisch durchgeführt.
-
Hatte mich verguckt, und es auch schon lange korrigiert. ;)
-
$bilder = array( array('bild' => 'pfad/bild1.jpg', 'text' => 'text 1'), array('bild' => 'pfad/bild2.jpg', 'text' => 'text 2') ); $zufall = array_rand($bilder); $bild = $bilder[$zufall]['bild']; $text = $bilder[$zufall]['text'];
-
Hi
ich wuerde fuer ihn das ganze einfach ueber ne include function loesen, so nach dem Motto "include_text1" oder "include_text2" usw. sollte ein bisschen uebersichtlicher werden
$randval = rand(0,2);
// Ausgabe:
echo '<img src="img/bild' . $randval . '.jpg">';
include("textstorage/" , $randval , ".part");
(Code ist zum Teil von nerdinator)
Dann musst du nur noch nen ordner "textstorage" ins verzeichnis legen und dort textdateinen (html formatierungen moeglich) mit der Endung part positionieren.
Die Bilder tust du dann in nen order "img" und nennst sie 0, 1, 2, usw .jpg
Beitrag zuletzt geändert: 20.10.2009 15:07:04 von minialanguageschool -
Hi
Ich hab es mit nerdinator's Beispiel probiert, aber so ganz richtig funkioniert es nicht, denn es werden immer nur die ersten drei Bild-Textpaare im Zufall angezeigt...
LG,
Webdesignerin -
Mein Script funktioniert... nutze es selbst so ähnlich im Header meiner Site...
-
staymyfriend schrieb:
Mein Script funktioniert... nutze es selbst so ähnlich im Header meiner Site...
Bei mir aber nicht.
Parse error: syntax error, unexpected T_ARRAY, expecting ')'
MfG
Webdesignerin
Edit: Ich habe bei meinem im Netz gefunden Skript ein paar Flüchrigkeitsfehler ausgebessert und es funktioniert bis auf die Tatsache, dass die dazugehörigen Bilder nicht angezeigt werden
<? $Images=array(bilder/bild_1.png','bilder/bild_2.png','bilder/bild_3.png'); // $Images enthält die Bilder im Verzeichnis $Quotes=array ( 'bilder/bild_1.png'=>'Max Mustermann und seine Frau und so weiter und so fort', 'bilder/bild_2.png'=>'La Li Lu und so weiter und so fort', 'bilder/bild_3.png'=>'Lorem ipsum und so weiter und so fort', ); // in $Quotes werden den Bildern die Zitate zugeordnet $QuoteX=rand(0,(count($Quotes)-1)); // Auswahl des Bildes, bzw. des entsprecheden Index in $Images echo $Quotes[$Images[$QuoteX]]; // Ausgabe des Zitats, durch Angabe des Bildnamens ?>
Beitrag zuletzt geändert: 21.10.2009 12:58:26 von webdesignerin -
http://staymyfriend.lima-city.de/demo/demo.php
<?php $bilder = array( array('bild' => 'pfad/bild1.jpg', 'text' => 'text 1'), array('bild' => 'pfad/bild2.jpg', 'text' => 'text 2'), array('bild' => 'pfad/bild3.jpg', 'text' => 'text 3'), array('bild' => 'pfad/bild4.jpg', 'text' => 'text 4'), array('bild' => 'pfad/bild5.jpg', 'text' => 'text 5') /* Das letzte Element ohne Komma! */ ); $zufall = array_rand($bilder); $bild = $bilder[$zufall]['bild']; $text = $bilder[$zufall]['text']; echo $bild.'<br />'.$text; ?> <!-- Beispiel: Irgendwo im Quelltext --> <img src="<?=$bild; ?>" alt="<?=$text; ?>" title="<?=$text; ?>" />
Der Fehler in Deinem Script ist wohl das Komma nach dem letzten array()...
Beitrag zuletzt geändert: 21.10.2009 17:55:05 von staymyfriend -
Ich benutze auch Zufallsbilder, verwende aber eine MySQL Datenbank zum Verwalten der Bilder. Ist komfortabler, wenn man mehre Fotos ansteuern will. Diese müssen dann auch nicht explizit im Skript benannt werden.
Folgendes Skript liefert ein Zufallsbild mit nur 2 winzigen SQL-Abfragen
$ergebnis = mysql_query("SELECT COUNT(*) FROM bildersammlung"); $numrows = mysql_result($ergebnis,0); // Anzahl aller vorhandenen Zeilen $selectrow = rand(0,$numrows-1); // Zufallszahl um 1 zufälliges Panorama auszuwählen $ergebnis = mysql_query("SELECT * FROM bildersammlung LIMIT $selectrow,1"); $row=mysql_fetch_object($ergebnis); $bild['URL'] = $row->url; $bild['motiv'] = $row->motiv;
Wobei in der Tabelle in der Spalte url die URL zum Bild und in motiv der Text steht.
-
webdesignerin schrieb:
Das liegt daran, dass du nur die texte ausgibst. Ergänze es um
Edit: Ich habe bei meinem im Netz gefunden Skript ein paar Flüchrigkeitsfehler ausgebessert und es funktioniert bis auf die Tatsache, dass die dazugehörigen Bilder nicht angezeigt werden
<? $Images=array(bilder/bild_1.png','bilder/bild_2.png','bilder/bild_3.png'); // $Images enthält die Bilder im Verzeichnis $Quotes=array ( 'bilder/bild_1.png'=>'Max Mustermann und seine Frau und so weiter und so fort', 'bilder/bild_2.png'=>'La Li Lu und so weiter und so fort', 'bilder/bild_3.png'=>'Lorem ipsum und so weiter und so fort', ); // in $Quotes werden den Bildern die Zitate zugeordnet $QuoteX=rand(0,(count($Quotes)-1)); // Auswahl des Bildes, bzw. des entsprecheden Index in $Images echo $Quotes[$Images[$QuoteX]]; // Ausgabe des Zitats, durch Angabe des Bildnamens ?>
, was dann die Bilder ausgibt.echo $images[$quoteX];
webdesignerin schrieb:
Korrigiere die Zeile
Ich hab es mit nerdinator's Beispiel probiert, aber so ganz richtig funkioniert es nicht, denn es werden immer nur die ersten drei Bild-Textpaare im Zufall angezeigt...
, dann sollte auch dies gehen.$randval = rand(0,count($image)-1);
Oder verwende eines der vielen anderen Beispiele, welche alle eigentlich ganz gut aussehen. -
@rnitsche:
Warum umständlich, wenn es auch einfach geht... Mehr muss nicht!
$ergebnis = mysql_query("SELECT * FROM bildersammlung ORDER BY RAND() LIMIT 1"); $row=mysql_fetch_object($ergebnis); $bild['URL'] = $row->url; $bild['motiv'] = $row->motiv;
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage