PHP How-To: Bilder als Array in MySQL

S

Speedy.

Gast
Hallo zusammen,

ich arbeite hobbymäßig an einer Webseite, auf welcher sehr viele Berichte über Clubausflüge mit Bildern und Text gespeichert werden. Bisher wurde für jeden Bericht eine HTML-Seite erstellt und dort alles abgelegt. Nun, das finde ich nicht so toll und stelle nun auf PHP und MySQL um. Dabei gibt es eine Datenbank, in der die Bilder, der Titel, der Text usw. gespeichert werden. Eine PHP-Datei greift dann auf den Inhalt zu (über eine eindeutige ID).

Jetzt habe ich aber ein Problem: je nach Bericht schwankt die Anzahl der Bilder. Das kann entweder ein Bild sein oder gleich 50 Stück. Ich stehe gerade auf dem Schlauch und weiß nicht, wie ich das am besten löse. Wie würdet ihr das machen? Ich denke, ein Array ist der richtige Lösungsansatz, doch das Textfeld wird ja immer als ganzes ausgelesen. Wie kann man da die Bilder trennen, ohne so viele Felder in MySQL zu erstellen?

Danke und Grüße
Speedy
 

Anhänge

  • screen.jpg
    screen.jpg
    42,7 KB · Aufrufe: 216
Du kannst entweder mit serialize() arbeiten oder (was eher dem Sinn des relationalen Modells entspricht) für jedes Bild einen DB-Eintrag machen.

Oder du machst es gleich einfach und setzt auf ein voll wertiges CMS.
 
Ich würde die Bilderpfade mit einem Trennzeichen (z.B. "|") trennen und dann in PHP mit "explode" auseinader nehmen.
 
Deine Fragestellung läßt mich darauf tippen, daß du noch keinerlei Ahnung von Datenbanken hast. Les dich am besten erstmal in das Thema selbst ein. Schau dir ebenso an, was man unter Normalisierung versteht. Damit solltest du deine Fragen dann beantworten können.

Ah, du solltest dir auch überlegen, ob du die Bilder als Datei auf dem Server (mit Dateiname in der DB) oder aber als Eintrag in einer Datenbank selbst ablegen willst.
 
Ja, nur wenn ich für jedes Bild einen DB-Eintrag mache, dann muss ich eine riesige Menge an Spalten einfügen und mich an den Bericht halten, welcher die meisten Bilder hat. Denn dieser ist dann die Referenz für die maximal mögliche Anzahl an Bildern, während bei einem Bericht mit nur einem Bild die restlichen Felder einfach leer wären.

Das mit Explode schaue ich mir mal an, sieht schon einmal gut aus.

Ich habe ein wenig Ahnung von Datenbanken, wobei sich dies nur auf die Syntax beschränkt. Und nein, ich hatte nich vor, die Bilder direkt in die Datenbank zu legen, sondern auf dem Filesystem des Webservers.
 
Speedy. schrieb:
Ja, nur wenn ich für jedes Bild einen DB-Eintrag mache, dann muss ich eine riesige Menge an Spalten einfügen und mich an den Bericht halten, welcher die meisten Bilder hat. Denn dieser ist dann die Referenz für die maximal mögliche Anzahl an Bildern, während bei einem Bericht mit nur einem Bild die restlichen Felder einfach leer wären.

Wieso denn das? Du hast ein relationales Modell, also nutze es. Wozu gibts denn Foreign Keys?
 
Also gut, ich habe zu wenig Ahnung vom logischen Aufbau von Datenbanken als das ich da jetzt mitreden kann. Ich werde mich mal in das Thema einlesen, also schonmal danke für den Hinweis.
 
Hey,
du legst einfach eine Tabelle an, in der alle Bilder angelegt werden. Jedes Bild ist ein neuer Eintrag in der Tabelle. Genauso legst du eine Tabelle für jeden Bericht an.
Weiterhin kannst du dann über einen Fremdschlüssel in der Bilder Tabelle den entsprechenden Bericht in der anderen Tabelle referenzieren.

Beispiel

Table: Berichte
ID | Date | Text
1 | 21-10-12 | Dein erster Bericht
2 | 20-10-12 | Dein zweiter Bericht

Table: Bilder
ID | BerichtID | URL
1 | 1 | test.jpg
2 | 1 | auto.jpg
3 | 1 | ball.jpg
4 | 2 | baum.jpg

Die Tabellen kannst du ja noch erweiteten mit den Einträgen die du benötigst.
 
Genauso wie Wutprobe es geschrieben hat, sollte es sein.
So kann man auch falsch zugeordnete Bilder neu zuordnen, Bilder hinzufügen usw.

Alles andere wäre nur, na ja...
 
Ja, jetzt habe ich es auch verstanden. Ich finde die Idee super und wundere mich, dass ich da nicht selbst drauf kam (wir haben das in der Berufsschule ausführlich behandelt...)

Also, danke für die Hilfe :-)
 
Am besten verinnerlichst du dir direkt mal die ersten 3 Normalformen, dann vermeidest du automatisch viele Fehler.
Auf die Idee der Trennung der Werte aus #1 und die vielen Spalten #5 wärst du dann nicht gekommen, da beides ein Verstoß an der 1. Normalform wäre.
 
Zurück
Oben