Zufalls Bild

Hi leute,

ich möchte gern ein Zufalsbild aus einem Bestimmten ordner auf meiner Seite zeigen.
Wenn man dann drauf klickt wird man aber nicht zum Bild in groß geleitet sondern wo anders hin.
Hat hierfür wer nen php ??

mfg BluE ChIllI™

[quote=“BluE ChIllI™”]
ich möchte gern ein Zufalsbild aus einem Bestimmten ordner auf meiner Seite zeigen.
Wenn man dann drauf klickt wird man aber nicht zum Bild in groß geleitet sondern wo anders hin.[/quote]

[code]$root = ‘/’; //Dokumentenverzeichnis
$dir = ‘bilder’; //Ordner mit den Bildern
$files = scandir($root .$dir);

$ausgabe = '';
$bilder = array();
foreach($files as $value){
	$teile = explode(".",$value);
	$endung = $teile[count($teile) - 1]; //Dateiendung bestimmen
	if(strtoupper($endung) == 'JPG'){ //Nur JPG-Bilder auswählen
		$bilder += $value; //Bild hinzufügen
	}
}
$zufall = mt_rand(0,count(bilder)-1); //Zufälliger Eintrag wählen
$ausgabe .= '<a href="#"><img src="' .$dir. '/' .$bilder[$zufall]. '" title="' .$bilder[$zufall]. '" alt="' .$bilder[$zufall]. '" /></a>'; //Ausgabe

echo $ausgabe;

[/code]

Das sollte ungefähr funktionieren. (Habs aber nicht getestet) Es werden einfach alle Bilder im JPG Format gewählt aus einem Ordner der im Verzeichniss $root liegt und den Namen $dir trägt. Dann wird am Schluss ein zufälliger Eintrag ausgewählt, was dann das Bild wählt und schliesslich noch ausgegeben. Der Link kann natürlich angepasst werden usw…

hoffe hilft dir weiter.

mfG
dola

und bitte noch verschieben nach PHP, MySQL, Python…

macht mir noch schwierigkeiten mit dem einfügen kommt dann immer der Fehler

siehe
http://www.fotoworld.bplaced.net/
links bei zufallsbild

Hast du am Anfang <?php

und am Ende ?> ergänzt?

Bei mir schauts so aus im quelltext

[code]

<?php
$root = ‘http://www.fotoworld.bplaced.net/’; //Dokumentenverzeichnis
$dir = ‘usa’; //Ordner mit den Bildern
$files = scandir($root .$dir);

$ausgabe = ‘’;
$bilder = array();
foreach($files as $value){
$teile = explode(".",$value);
$endung = $teile[count($teile) - 1]; //Dateiendung bestimmen
if(strtoupper($endung) == ‘JPG’){ //Nur JPG-Bilder auswählen
$bilder += $value; //Bild hinzufügen
}
}
$zufall = mt_rand(0,count(bilder)-1); //Zufälliger Eintrag wählen
$ausgabe .= ‘' .$bilder[$zufall]. '’; //Ausgabe

echo $ausgabe;
?>


[/code]

Hat die Datei denn überhaupt die Endung .php?
Denn dass das ganze nicht geparst wurde, sieht man ja auf einen Blick in den Quelltext …

ich hab des mit dem KompoZer is so ein programm direkt eingefügt^^ is des schlimm ??

wie machs ich sonst??!!

Nein, schlimm ist, dass du meine Rückfrage nicht beantwortest.

wie folgt:
du solltest erstens deiner Datei index.html den Namen index.php geben. Nur so wird php auch geparst und das Skript kann funktionieren. Weiter weiss ich nicht ob es funktioniert wenn du als $root die URL angibst. ich hab jetzt hier an den Serverpfad gedacht indem die Dateien liegen. Das heisst auf bplaced müsste dieser ‘/users/USERNAME/www/’ lauten. Sonst kannst du noch einfacher einfach die Servervariable benutzen: $_SERVER[‘DOCUMENT_ROOT’];

dann sieht dein Skript etwa so aus:

[code]<?php
$root = ‘/users/fotoworld/www/’; //Dokumentenverzeichnis
$dir = ‘usa’; //Ordner mit den Bildern
$files = scandir($root .$dir);

$ausgabe = ‘’;
$bilder = array();
foreach($files as $value){
$teile = explode(".",$value);
$endung = $teile[count($teile) - 1]; //Dateiendung bestimmen
if(strtoupper($endung) == ‘JPG’){ //Nur JPG-Bilder auswählen
$bilder += $value; //Bild hinzufügen
}
}
$zufall = mt_rand(0,count(bilder)-1); //Zufälliger Eintrag wählen
$ausgabe .= ‘' .$bilder[$zufall]. '’; //Ausgabe

echo $ausgabe;

?>[/code]

So wird im Quelltext nur folgendes auftauchen:

<a href="#"><img src="usa/IMG_0470.JPG" title="IMG_0470.JPG" alt="IMG_0470.JPG" /></a>
<a href="#"><img src="usa/IMG_0477.JPG" title="IMG_0477.JPG" alt="IMG_0477.JPG" /></a>
<a href="#"><img src="usa/IMG_0478.JPG" title="IMG_0478.JPG" alt="IMG_0478.JPG" /></a>
<a href="#"><img src="usa/IMG_0479.JPG" title="IMG_0479.JPG" alt="IMG_0479.JPG" /></a>
<a href="#"><img src="usa/IMG_0496.JPG" title="IMG_0496.JPG" alt="IMG_0496.JPG" /></a>

Schliesslich ist genau der Punkt an PHP, dass der Code selbst nur auf dem Server ersichtlich ist, dort geparst wird bevor die Seite an den Client gesendet wird und schlussnedlich nur noch das HTML-Dokument übrig ist auf dem Client (und damit im Quelltext).

Eine Erweiterung für eine bestimmte Anzeigegrösse ist indem du die Höhe und Breite entweder direkt als Attribut im HTML angibst (height und width) oder indem du die Bilder automatisch mit PHP verkleinerst (was aber nicht nur einfach und rechenaufwändig ist)
Folgende Erweiterung könnte da nützlich sein, die du in die For-Schleife einfügen kannst: (Damit das Pic nicht verzerrt wird)

$maxwidth = 220; //Maximale Breite in Pixeln

list($breite,$hoehe,$typ,$attr) = getimagesize(' .$dir. '/' .$bilder[$zufall]. ');
if($breite > $maxwidth){
$w_neu = $breite;
$h_neu = $hoehe/($breite/$maxwidth);
} else{
$w_neu = $breite;
$h_neu = $hoehe;
}

$ausgabe .= '<a href="#"><img src="' .$dir. '/' .$bilder[$zufall]. '" title="' .$bilder[$zufall]. '" alt="' .$bilder[$zufall]. '" width="' .$w_neu. '" height="' .$h_neu. '" /></a>'; //Ausgabe

Dadurch werden alle Bilder egal wie hoch sie sind auf eine bestimmt Breite reduziert falls sie diese überschreiten. Bei deiner Webseite wären das dann wohl 220px die es Platz hat. Ist das Bild kleiner aufgelöst passiert natürlich nichts (damit es nicht verpixelt).

Das Problem an dieser Methode ist natürlich, dass trotzdem das ganze Bild geladen werden muss, was aber nicht extrem viel ausmacht, wenn die Bilder nicht gleich in Übergrössen auf dem Server sind. Also am besten zuerst verkleinern vorm hochladen…

mfG
dola

Danke werds demnächst ändern

besser spät als nie… :sweat:

ahh kein plan warum aber ich bekomm in line 12 nen error

is dann die
$bilder += $value; //Bild hinzufügen

Mit “nen error” lässt sich kaum was anfangen, also schreibe bitte künftig bei solchen Fragen immer den genauen Wortlaut der Meldung mit hin!

[quote]is dann die
$bilder += $value; //Bild hinzufügen[/quote]
$bilder ist ein Array, also ist es unsinnig, da mit dem += Operator arbeiten zu wollen.

Neue Werte lassen sich an ein nummerisch indiziertes Array einfach mit folgender Schreibweise anhängen:

Danke
es kommt schon mal kein error mehr ausgeben !
allerdings kommt dass Bild viel zu groß^^
und random ist es bei mir auch net
man ich verzweifle gleich^^
http://www.fotoworld.bplaced.net/
Das ist mein Code

[code]^<?php
$root = ‘/users/fotoworld/www/’; //Dokumentenverzeichnis
$dir = ‘usa’; //Ordner mit den Bildern
$files = scandir($root .$dir);
$maxwidth = 220; //Maximale Breite in Pixeln

$ausgabe = ‘’;
$bilder = array();
foreach($files as $value){
$teile = explode(".",$value);
$endung = $teile[count($teile) - 1]; //Dateiendung bestimmen
if(strtoupper($endung) == ‘JPG’){ //Nur JPG-Bilder auswählen
$bilder[] = $value; //Bild hinzufügen
}
}
$zufall = mt_rand(0,count(bilder)-1); //Zufälliger Eintrag wählen

list($breite,$hoehe,$typ,$attr) = getimagesize(’ .$dir. ‘/’ .$bilder[$zufall]. ');
if($breite > $maxwidth){
$w_neu = $breite;
$h_neu = $hoehe/($breite/$maxwidth);
} else{
$w_neu = $breite;
$h_neu = $hoehe;
}

$ausgabe .= ‘' .$bilder[$zufall]. '’; //Ausgabe

echo $ausgabe;

?>[/code]

Würde aber, wenn du das error_reporting vernünftig auf E_ALL eingestellt hättest.

Dann überprüfe die Werte, mit denen berechnet wird. Und ggf. auch die Berechnung selber, ob die überhaupt das bewirkt, was sie soll.

Natürlich nicht, weil die “Zufallszahl” immer 0 ist.
Und sobald du das error_reporting vernünftig eingestellt hast, ist PHP auch so auskunftsfreudig dir mitzuteilen, warum.

wo stell ich des error reporting den ein mit was prüfst du des den
is neuland sry
thx im vorraus

Das googlest du jetzt mal schön.

was soll ich da googln des einzige was ich grad google sind die ganzen funktions

:stuck_out_tongue:
nur nicht zu fies chrisb.

das wegen dem += kommt von mir. tut mir leid. war nicht so bei der sache^^

der Fehler den du noch hast ist folgende Zeile:

$zufall = mt_rand(0,count(bilder)-1); //Zufälliger Eintrag wählen

dort steht bilder statt $bilder

also sollte es so aussehen:

$zufall = mt_rand(0,count($bilder)-1); //Zufälliger Eintrag wählen

und der andere fehler ist in folgender Zeile:

da sollte stehen:

und schliesslich noch ein kleiner fehler:

if($breite > $maxwidth){ $w_neu = $maxwidth; $h_neu = $hoehe/($breite/$maxwidth); } else{ $w_neu = $breite; $h_neu = $hoehe; }
if-bediungung sollte so wie oben aussehen. (nicht mit $w_neu = $width;)

tut mir auch leid. glaube das kommt alles mehr oder weniger von mir… :ps: war wohl spät abends :astonished: oder sonst irgendwie unkonzenteiert :smoke:

hoffe jetzt funktionierts.

mfG
dola