Bilder-Galerie über PHP und MySQL
Natasja
- php
Hallo,
ich wollte mal versuchen, mein grundsätzliches Verständnis von einer Bilder-Galerie über PHP und MySQL hier zu überprüfen, damit ich demnächst anfangen kann ;-)
Also: ich möchte eine Galerie-Seite schreiben (ganz simpel), bei der über vor und zurück Buttons das nächste Bild (vorige Bild) und eventuelle noch ein dazugehöriger TExt geladen wird.
Meine Vorstellung nun davon:
In MySQL erstelle ich eine Tabelle, mit fortlaufender Nummer, Dateinamen der Bilder, Pfad der Bilder und zugehörigem Text, richtig? Die fortlaufende Nummer ist der Primär-Schlüssel.
Dann fange ich auf der Galerie-Seite mit einem beliebigen Bild an, das ich aus der Datenbank auslese. Mit ausgelesen werden der Text und die Nummer des Bildes. Zum vor-Blättern müsste ich dann die Nummer des aktuell angezeigten Bildes vom HTML auslesen, eins zu addieren und das wiederum aus der Datenbank abrufen, richtig?
Noch nicht ganz sicher bin ich bei der Nummern-Auslesung des aktuellen Bildes. Wie könnte ich das anstellen? Und gibt es vielleicht eine Lösung, bei der ich nicht jedes Bild einzeln über SQL als Datensatz einsetzen muss, sondern wo evtl. automatisch alle Bilder eines bestimmten Verzeichnisses (wo ich halt die Bilder immer reinsetze, wenn was neues kommt) jeweils zu einem Datensatz umgesetzt werden?
vielen Dank schon mal
Natasja
Hiho,
Noch nicht ganz sicher bin ich bei der Nummern-Auslesung des aktuellen Bildes.
Die Nummer hast du doch in der Datenbank stehen und kannst sie genauso wie den Bildpfad oder den Text im SELECT mit rauslesen.
Und gibt es vielleicht eine Lösung, bei der ich nicht jedes Bild einzeln über SQL als Datensatz einsetzen muss, sondern wo evtl. automatisch alle Bilder eines bestimmten Verzeichnisses (wo ich halt die Bilder immer reinsetze, wenn was neues kommt) jeweils zu einem Datensatz umgesetzt werden?
Klar, wenn du dir eine schreibst... Es sollte ja kein Problem sein das komplette Verzeichniss auszulesen 1. Musst dir dann nur überlegen wie du ohne all zu große Datenbanklast feststellst welche Bilder neu sind. Eine Möglichkeit wäre eine Art "incoming"-Ordner anzulegen in den du alle neuen Bilder packst. Dann schreibst du dir ein Importierscript, dass alle Bild-Dateien in dem Verzeichniss durcharbeitet, in die Datenbank einträgt und in ein anderes Verzeichniss verschiebt.
Grüsse
Marc
Hallo,
Noch nicht ganz sicher bin ich bei der Nummern-Auslesung des aktuellen Bildes.
Die Nummer hast du doch in der Datenbank stehen und kannst sie genauso wie den Bildpfad oder den Text im SELECT mit rauslesen.
Ja schon, aber die frage ist doch, welches Bild wird gerade eben angezeigt? Damit ich mit +1 zum nächsthöheren zählen kann. Wenn ich nicht weiß, welche Nummer das angezeigte Bild hat, kann ich ja auch nicht hochzählen. Und wenn ich mit der Anzeige des Bildes auch die fortlaufende Nummer mitauslese, dann hab ich die im HTML stehen und da muss ich sie ja auch irgendwie wieder auslesen ??! Wie mache ich das?
Und gibt es vielleicht eine Lösung, bei der ich nicht jedes Bild einzeln über SQL als Datensatz einsetzen muss, sondern wo evtl. automatisch alle Bilder eines bestimmten Verzeichnisses (wo ich halt die Bilder immer reinsetze, wenn was neues kommt) jeweils zu einem Datensatz umgesetzt werden?
Klar, wenn du dir eine schreibst... Es sollte ja kein Problem sein das komplette Verzeichniss auszulesen 1. Musst dir dann nur überlegen wie du ohne all zu große Datenbanklast feststellst welche Bilder neu sind. Eine Möglichkeit wäre eine Art "incoming"-Ordner anzulegen in den du alle neuen Bilder packst. Dann schreibst du dir ein Importierscript, dass alle Bild-Dateien in dem Verzeichniss durcharbeitet, in die Datenbank einträgt und in ein anderes Verzeichniss verschiebt.
Also ich fürchte, das wird mir zu kompliziert..:-(
Grüsse
Marc
natasja
Hello,
Ja schon, aber die frage ist doch, welches Bild wird gerade eben angezeigt? Damit ich mit +1 zum nächsthöheren zählen kann.
Die Nummer gibst Du doch zum Bild passend mit aus, entweder im Query-String, oder aber als Hidden-input oder aber auch als Value oder Name eines Buttons.
Also nochmal von vorne:
Beim ersten Mal steht in Deinem Formular
------------------------------------------------------------
http://domain.tld/bilder.php
+---------+
| Bild 0 |
| Dummy |
| |
+---------+
(voriges) [nächstes: http://domain.tld/bilder.php?nr=1]
------------------------------------------------------------
http://domain.tld/bilder.php?nr=1 <- Adressleiste
+---------+
| Bild 1 |
| | <- Bild
| |
+---------+
[voriges:http://domain.tld/bilder.php?nr=0] <- Rücklink
[nächstes: http://domain.tld/bilder.php?nr=1] <- Vorlink
------------------------------------------------------------
oder auch:
http://domain.tld/bilder.php?nr=5
+---------+
| Bild 5 |
| |
| |
+---------+
[erstes:http://domain.tld/bilder.php?nr=0]
[voriges:http://domain.tld/bilder.php?nr=4]
[nächstes: http://domain.tld/bilder.php?nr=6]
[letztes: http://domain.tld/bilder.php?nr=133] <- MaxBildNr.
Bevor Du die Links generierst, solltest Du schauen, ob es die Zielbilder wirklich gibt.
Sollte ein Link mal auf ein nicht vorhandenes Bild zeigen, könntest Du solange das nächste
in der reiehe nehmen, bis wieder ein Treffer vorliegt.
Um die Schaltrichtung zu kennzeichnen, könntest Du die Links auch anders gestalten
[nächstes: http://domain.tld/bilder.php?cmd=next&nr=5]
^ ^
| |
| +----- aktuelles Bild
+---- Kommando
Das sind natürlich nur Vorschläge. Es gibt andere Lösungen
Eine ungeschriebene Regel lautet aber:
Und dann schau Dir doch noch die Blätterfunktion in
http://selfhtml.bitworks.de/ --> Besucherzähler
an. Die geht mit Buttons.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo,
oder auch:
http://domain.tld/bilder.php?nr=5
+---------+
| Bild 5 |
| |
| |
+---------+[erstes:http://domain.tld/bilder.php?nr=0]
[voriges:http://domain.tld/bilder.php?nr=4]
[nächstes: http://domain.tld/bilder.php?nr=6]
[letztes: http://domain.tld/bilder.php?nr=133] <- MaxBildNr.Tom
Danke schon mal, aber eines leuchtet mir noch immer nicht ein. So wie Du es dargestellt hast, müsste ich ja für jedes Bild eine eigene Seite erzeugen ?! Wenn also auf der aktuellen Seite das Bild Nr 5 zu sehen ist, dann muss in den Links natürlich 4 und 6 stehen. Klar. Aber genau das soll doch automatisch geschehen (dass da 4 und 6 oder was eben hingehört), weil sonst könnte ich ja gleich einfach für jedes Bild eine HTML erstellen und bräuchte weder php noch SQL. Wie kriege ich also die "5" gelesen, um die "4" und "6" zu erzeugen ?
begriffsstutzige Natasja
Hello,
Danke schon mal, aber eines leuchtet mir noch immer nicht ein. So wie Du es dargestellt hast, müsste ich ja für jedes Bild eine eigene Seite erzeugen ?! Wenn also auf der aktuellen Seite das Bild Nr 5 zu sehen ist, dann muss in den Links natürlich 4 und 6 stehen. Klar. Aber genau das soll doch automatisch geschehen (dass da 4 und 6 oder was eben hingehört), weil sonst könnte ich ja gleich einfach für jedes Bild eine HTML erstellen und bräuchte weder php noch SQL. Wie kriege ich also die "5" gelesen, um die "4" und "6" zu erzeugen ?
Wofür verwendest Du eigentlich PHP? Ist das bei Dir nur zur Zierde? *gg*
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo,
Wofür verwendest Du eigentlich PHP? Ist das bei Dir nur zur Zierde? *gg*
Kann ich meine Datenbank auch anders auslesen??
natasja
Hello,
Wofür verwendest Du eigentlich PHP? Ist das bei Dir nur zur Zierde? *gg*
Kann ich meine Datenbank auch anders auslesen??
Ja.
Aber lass uns erstmal PHP lernen, bevor wir zu den schwierigeren Sprachen kommen :-)
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hello,
Danke schon mal, aber eines leuchtet mir noch immer nicht ein. So wie Du es dargestellt hast, müsste ich ja für jedes Bild eine eigene Seite erzeugen ?! Wenn also auf der aktuellen Seite das Bild Nr 5 zu sehen ist, dann muss in den Links natürlich 4 und 6 stehen. Klar. Aber genau das soll doch automatisch geschehen (dass da 4 und 6 oder was eben hingehört), weil sonst könnte ich ja gleich einfach für jedes Bild eine HTML erstellen und bräuchte weder php noch SQL. Wie kriege ich also die "5" gelesen, um die "4" und "6" zu erzeugen ?
Wofür verwendest Du eigentlich PHP? Ist das bei Dir nur zur Zierde? *gg*
*ups* wieder zu schnell Return gedrückt...
Mach Dir mal ein Script
<?php ### anzeigen.php
echo "<pre>\n";
pint_r($_GET);
echo "</pre>\n";
?>
Und das lädst Du unter dem Namen anzeigen.php auf Deinen Webspace.
Un nun rufst Du das Script auf:
http://domain.tld/anzeigen.php?zahl=1
oder
http://domain.tld/anzeigen.php?nummer=15&kommando=vor
oder
ach, denk Dir selber mal 'was aus
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Moin!
<?php ### anzeigen.php
echo "<pre>\n";
pint_r($_GET);
echo "</pre>\n";
?>
Schreib es ihr doch gleich richtig und sicher hin...
Meine Betrachtungen gehen von einer Tabelle mit den Spalten:
id - (big)integer, autoindex Wieviele Bilder dürfe es denn werden?
filename - text
text - text
gueltig - boolean (Wahrheitswert)
aus.
<?php #anzeigen.php
# Ermittlung der angeforderten Nummer:
if (isset($_GET['nr'])) {
# wenn die URI einen Wert für die Variable 'nr' enthält:
$intAktuellesBild = (int)$_GET['nr'];
# sei die Variable $intAktuellesBild gleich dem ganzzahligen Wert dieser Variable
# Die explizite Typumwandlung in ganzzahlig verhindert hier wirkungsvoll Angriffe
# auf die Datenbank
if ($intAktuellesBild < 1) {
# Für Spaßvögel, die negative Werte eingeben
$intAktuellesBild = 1;
}
}
} else {
# Was, wenn nicht?
$intAktuellesBild = 1;
# Man nehme, so man hat, einfach das erste Bild...
}
print "<hr>Angefordertes Bild: $intAktuellesBild</hr>";
# Du holst die Daten aus der Datenbank, wie das geht scheinst Du ja zu wissen ... unter anderem auch die Nummer des letzten (=Anzahl gültiger Bilder) und des ersten Bildes (id des ersten gültigen Bildes)
# Ferner musst Du Dir noch Gedanken machen, was passiert, wenn es
# mal (z.B. wegens Löschens) mittenmang in der Numerierung ein Bild nicht
# mehr gibt oder Du es nicht zeigen willst. Vielleicht solltest Du
# also statt des Datensatzes mit der passenden id den n-ten " gültigen
# Datensatz (als offset) geben lassen. Lies hierzu im MySQL- Manual Deiner Wahl
# unter Select und dort unter Limit nach.
# Vorschlag: hier: [link:http://dev.mysql.com/doc/refman/4.0/de/select.html]
$intErstesBild = 1;
# Ermitteln von $intLetztesBild
# SQL: SELECT COUNT(id) AS intLetztesBild FROM bilder WHERE gueltig=TRUE;
if ($intAktuellesBild > $intLetztesBild) {
# Für Spaßvögel, die sehr große Werte eingeben
$intAktuellesBild = $intLetztesBild;
}
# Dann folgt ein wenig Kinderkram:
if ($intAktuellesBild == $intErstesBild) {
$intVorherigesBild = $intLetztesBild;
} else {
$intVorherigesBild = $intAktuellesBild - 1;
}
if ($intAktuellesBild == $intLetztesBild) {
$intNaechstesBild = $intErstesBild;
} else {
$intNaechstesBild = $intAktuellesBild + 1;
}
print "<hr>Angefordertes Bild: $intAktuellesBild";
print "<hr>Vorheriges Bild: $intNaechstesBild";
print "<hr>Nächstes Bild: $intNaechstesBild";
print "<hr>Erstes Bild: 1";
print "<hr>Letztes Bild: $intLetztesBild";
# SQL: SELECT id, filename, text FROM bilder where gueltig=TRUE ORDER BY id LIMIT $intAktuellesBild,1;
# [...]
?>
Jetzt musst Du noch die Abfrabgen bauen und das ganze zu einer brauchbaren Seite umrüsten. Hinweise hat Du genug und die SQL-Abfrage selbst scheint Dir ja keine Sorgen zu bereiten...
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hello,
Schreib es ihr doch gleich richtig und sicher hin...
Bisschen viel auf einmal.
Ich bin für kleine Schritte beim Lernen.
Fertige Lösungen nur zum Angucken: "ja, das würde mir gefallen, wie geht das denn?"
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
n'abend,
In MySQL erstelle ich eine Tabelle, mit fortlaufender Nummer, Dateinamen der Bilder, Pfad der Bilder und zugehörigem Text, richtig? Die fortlaufende Nummer ist der Primär-Schlüssel.
das konzept ist logisch, ja.
[...] Zum vor-Blättern müsste ich dann die Nummer des aktuell angezeigten Bildes vom HTML auslesen, eins zu addieren und das wiederum aus der Datenbank abrufen, richtig?
was passiert, wenn ein bild aus der galerie gelöscht wird? dann wird ja auch der datensatz gelöscht... somit hast du keine fortlaufende nummerierung der bilder mehr... hast du daran gedacht?
Noch nicht ganz sicher bin ich bei der Nummern-Auslesung des aktuellen Bildes. Wie könnte ich das anstellen? Und gibt es vielleicht eine Lösung, bei der ich nicht jedes Bild einzeln über SQL als Datensatz einsetzen muss, sondern wo evtl. automatisch alle Bilder eines bestimmten Verzeichnisses (wo ich halt die Bilder immer reinsetze, wenn was neues kommt) jeweils zu einem Datensatz umgesetzt werden?
die dateien innerhalb eines verzeichnisses auszulesen und zu verarbeiten sind mit php kein thema. dafür gibts funktionen wie readdir und opendir - einfach mal die beispiele anschauen, da steht praktisch schon der fertige code drin.
weiterhin schönen abend...