Random Bild MYSQL

nordi

Erfahrenes Mitglied
Hi Leute, ich habe eine Frage zu einer Randomanzeige von Bildern. Also das Bild so bei einem Refresh der Seite immer wechseln. Die Pfade von den Bildern sind in einer MySQL Tabelle abgespeichert. Jetzt wird es aber ein wenig kniffliger.. manchen Einträge haben auch kein Bild! Wie kann ich das Skript so schreiben, dass es nur Einträge wiedergibt, wo Bildpfade eingespeichert sind?

Momentan habe ich es so gemacht - fehlt aber komplett die Randomfunktion? Wie würdet ihr das machen?

PHP:
<?php
			include("../../config/config.php");
			mysql_connect("$dbhost","$dbuser","$dbpass");
			mysql_select_db("$dbtable");
			$result = mysql_query("SELECT * FROM files LIMIT 1");
			$kuenstler = mysql_fetch_assoc($result);
			echo "<img src=\"".$row['bild_pfad']."\" alt=\"".$row['bild']."\" width=\"124\" height=\"70\"/>";
?>


Danke für Tipps!
 
Ich geb dir jetzt mal ein Konzept, ohne Quelltext. Wenn du den auch brauchst, frag einfach noch mal.

1. Zur Datenbank verbinden
2. Die Gesamtzahl der Einträge auslesen (kannst COUNT benutzen)
3. Eine Zufallszahl zwischen 0 und Anzahl der Einträge generieren (PHP-Funktion rand())
4. Mit einem Query diesen Eintrag aus der Datenbank holen
5. Wenn kein Bild drin ist, das ganze noch mal, solange bis du einen Eintrag mit Bild erwischst.

Ich weiß jetzt leider nicht, wie das bei dir aufgebaut ist. Hat das Bild eine eigene MySQL-Tabellenspalte? Oder ist das in HTML-Quelltext irgendwie drin?
Wenn es eine eigene Spalte hat, kannst du beim Zählen der Einträge auch festlegen, dass er nur welche zählt, die nicht leer sind bei dem Bild.
Wenn das im Quelltext drin steht, kannst du MySQL suchen lassen, z.B. nach HTML <img> Tags.

Ok habe mir jetzt noch mal dein Code-Beispiel angeschaut.

Zu 2.: Anzahl der Einträge so auslesen:
Code:
SELECT COUNT(*) as Anzahl FROM files WHERE bild_pfad != ''
Kommst dann mit $row['Anzahl'] an die Nummer.
 
Den Schritt kannst du dir sparen ;)

PHP:
$result = mysql_query("SELECT * FROM files");

$bildnr = rand(0, mysql_num_rows($result));
while ($kuenstler = mysql_fetch_assoc($result) && $bildnr--);

echo '<img src="'.$kuenstler['bild_pfad'].'" alt="'.$kuenstler['bild'].'" width="124" height="70" />';
Nicht getestet aber die Richtung wird es sein ;)

EDIT:
Alternativ könnte man es sich natürlich noch viel einfacher machen:
PHP:
$result = mysql_query("SELECT * FROM files ORDER BY rand() LIMIT 1");
$kuenstler = mysql_fetch_assoc($result);

echo '<img src="'.$kuenstler['bild_pfad'].'" alt="'.$kuenstler['bild'].'" width="124" height="70" />';

lg
 
Zuletzt bearbeitet:
Hi, klappt wunderbar! Aber wie schon erwähnt haben manche Einträge keinen Bildpfad hinterlegt! Wie kann man diese herausfiltern, sodass nur Einträge randommäßig ausgegeben werden, die auch einen Pfad hinterlegt haben?
 
Würde das einfach im SELECT direkt ausschließen.

Code:
SELECT * FROM files WHERE bild_pfad != '' ORDER BY rand() LIMIT 1

oder (ich weiß nicht ob das so geht)

Code:
SELECT * FROM files WHERE LENGTH(bild_pfad) > 0 ORDER BY rand() LIMIT 1
 
Zuletzt bearbeitet:
du prüfst, ob in bild_pfad was drin steht, wenn nicht, dann führst du es nochmal aus;)
machst du mit
PHP:
if (trim($row['bild_pfad']) == "")
oder
PHP:
if (empty(trim($row['bild_pfad'])))
 
Die Lösung von Chumper würde ich zwar nicht umsetzen... aber falls du das doch vorhaben solltest würde ich das mit ner do...while-Schleife machen. Mit einem einfachen if ist der nächste Datensatz ja nicht abgefangen...

Ich würde es wie ich oben geschrieben habe direkt im SELECT-Statement machen ;)

lg und gn8
 
Hi, beide Varianten funktionieren wunderbar, danke!! Hab noch ne kleine Frage. In der Tabelle ist auch ein Pfad zu einen Flashfile (SWF) abgespeichert? Kann man das Skript auch so ausführen lassen, dass es zufällig aus der Tabelle " $bild_pfad" und " $swf_pfad" Bild/SWFs anzeigt? Wenn das gehen sollte, kann man das Flashfile auch als Link hinterlegen? Habe ich, glaube ich, noch nie gesehen..
 
Einfach den String auswerten ob .swf oder .jpg / .gif / .png dran hängt und dann halt per <a href><img/></a> (für Bilder) oder <object> einbinden. Den Link für das Flash würde ich im Flash umsetzen und als Parameter übergeben, falls er sich ändert mit dem Objekt.
 
Hi, beide Varianten funktionieren wunderbar, danke!! Hab noch ne kleine Frage. In der Tabelle ist auch ein Pfad zu einen Flashfile (SWF) abgespeichert? Kann man das Skript auch so ausführen lassen, dass es zufällig aus der Tabelle " $bild_pfad" und " $swf_pfad" Bild/SWFs anzeigt? Wenn das gehen sollte, kann man das Flashfile auch als Link hinterlegen? Habe ich, glaube ich, noch nie gesehen..

Ja aber nicht über das SELECT-Statement würd ich sagen. Das musst du dann schon in PHP auswerten - Kannst im Statement ja alle Spalten die in Frage kommen explizit angeben und dann über mysql_fetch_array() die Daten holen. Dann kannst du dir eine Zufallszahl erzeugen und die Arrayposition auslesen die die neue Zufallszahl ergeben hat. Also echo $ergebnis[$zufall];

Evt müsste man - wie schon gesagt - zwischen den einzelnen Datentypen unterscheiden.
Aber das wär ja ein ähnliches Vorgehen
 
Zurück