Fotoalbum mit Backend

Hallo zusammen,

jetzt habe ich auch mal ein Problemchen, eine Lösung… und brauche einen kleinen Schubs in die richtige Richtung nach was ich denn suchen soll resp. was ich dafür benötige.

Ich möchte ein Fotoalbum erstellen. Bisher besteht dieses noch aus HTML-Seiten, in die die Fotos sowie eine kurze Beschriebung eingegeben werden. Dazu ein altes Frameset (top Banner, links Navi, rechts Navi, center Hauptframe - sieht insgesamt aus wie ein statisches PHP-Kit) - Wirklich nicht mehr zeitgemäß.

Was gibt es für empfehlenswerte Alternativen?

Zum einen würde ich gerne die Frames aufpeppen, weil diese wirklich nur in 1024*768px genießbar sind. Zum anderen würde ich gerne die HTML-Seiten komplett durch PHP mit mySQL ersetzen. Dazu ein kleines Backend um schnell Bilder hinzufügen und löschen zu können.

Soweit steht mein Plan. In der Umsetzung hapert es allerdings extrem an meinen DB-Kenntnissen, weil ich sonst immer CMS verwendet habe, die mir schön alles vorgekaut haben.

Ich habe jetzt einfach mal ins Grüne gesponnen, dass es so funktionieren müsste:
Das Upload-Script. Das schaff ich soweit, dass ich Dateien hochladen kann. Ich würde jedoch gerne die Dateinamen gleichzeitig ändern (Nummern aufsteigend) und die Größe des Bildes fixieren… Außerdem sollen dazu noch ein paar kleine Infos eingegeben werden können - und das Kategorisieren in 2 Stufen wäre klasse.
Alles (Link zur Bild-Datei, Info1, Info2, Info3, Oberkategorie, Unterkategorie) soll der User in Textboxen eingeben können und dann soll das Ganze in einer DB gespeichert werden.

Wie kann ich sowas alles aus einem Formular in die DB geben, sodass diese daas auch wiederfindet. Und wieviel kann eine mySQL überhaupt fassen?

Für jede Unterkategorie soll jetzt eine eigene Seite in PHP her. Diese soll stumpf untereinander alle Bilder und deren Infos abrufen, die in eben jener Unterkategorie in der DB stehen.

Wie rufe ich genau diese Daten aus der SQL ab?

Zu guter letzt möchte ich noch, dass man anhand der Bildnummer entsprechende Datei im Backend entfernen kann. Das kann ich - wollte es nur der Vollständigkeit halber erwähnen.

Das ist so das Grobe - und ich hoffe ihr könnt mir einfach ein paar Such-Wörter an den Kopf schmeißen, mit denen ich mich dann in nächster Zeit auseinandersetzen werde - oder mich kritisieren wenn ich mir dabie zuviel Mist gedacht habe. Verbesserungsvorschläge sind auch gerne gesehen :slight_smile:

Vielen Dank vorab :wink2:

//EDIT: Achja… Und kann ich durch ein PHP-Script irgendwie die Anlage der Tabellen vereinfachen? Ich hab keine Lust jetzt die ~2000 Tables von Hand durchzunudeln

Huhu,
mal sehen ob dich ein bisschen in die richtige Richtung schubsen kann :slight_smile:

Frames ja, Frames nein … ich denke mal die haben immernoch ihre Berechtigung, aber ich habs normalerweise lieber ohne :slight_smile:

Wenn die Datei hochgeladen wird, dann landet sie ja erst einmal in einem temporären Verzeichnis. Mit move_uploaded_file(source, dest) kannst du sie dann in dein Bilder Verzeichnis verschieben und auch gleich umbenennen.
Allerdings würde ich den Bildern keine fortlaufenden Nummern geben, sondern eher Datum/Uhrzeit oder mit uniqid() eine zufällige Zeichnkette.
Dann sparst du dir das nachschauen, welche Zahlen schon belegt sind und hast trotzdem keine doppelten Namen.

Zum Thema Größe des Bildes fixieren.
Die aktuelle Größe kannst du mit getimagesize(filename) auslesen und mit imagecopyresampled() dann in einer anderen Größe speichern.

Da würde ich dir jetzt gerne ein gutes MySQL Tutorial an die Hand geben. Nur leider fehlt mir grade die Zeit nach einem zu suchen :wink:
Man braucht am Anfang ein bisschen Eingewöhnung an die Denkweise solch einer Datenbank, aber wenn man dann mal durchblickt lassen sich ganz viele tolle Sachen damit machen. Falls du konkrete Fragen/Probleme zu MySQL hast immer raus damit, nur wie gesagt, am besten vorher ein Tutorial anschauen damit du weißt was es mit SELECT, INSERT, UPDATE und DELETE auf sich hat. :slight_smile:
Und eine Datenbank kann soviel fassen … so viel könnten wir beide gar nicht fotografieren
:smiley:

Hier ist es gängige Praxis sogar nur eine Seite für alles zu machen und die gewünschte Kategorie in der URL als Parameter zu übergeben.
z.B.: fotos.php?kat=2
Dann kannst du dir mit einem SELECT(“Alle Bilder aus Kategorie $_GET[‘kat’]”) die Bilder holen und darstellen. Dann bist du auch flexibel wenn neue Kategorien hinzukommen und musst nicht wieder eine neue Seite dafür schreiben.

mysql_query(“SELECT dateiname FROM bilder WHERE kategorie=$kat”);
Das ist nur ein Beispiel … Das schon oft erwähnte Tutorial hilft dir da hoffentlich weiter. Den genauen Ablauf zu erklären, sprengt den Umfang meines Posts leider. Aber lass dich nicht abschrecken! Es ist alles halb so schlimm :slight_smile:

Wenn du deine Datenbank fertig hast und alles läuft, sollte es kein großes Problem sein, das automatisiert einzufügen.
Kleine Abschlusbemerkung … wahrscheinlich wird es eher eine Tabelle mit 2000 Zeilen :slight_smile:

So. Hoffe konnte dir etwas weiterhelfen. Ich muss jetz leider auch schnell los zum lernen. :wink:

Hi,

erstmal danke für deine ausfürlichen Schubser - die haben schonmal einiges optimiert - vor allem in der Richtung nur eine einzige PHP-File dafür erstellen zu müssen spart mir ungemein viel Zeit. Ich habe schon geahnt, dass ich nicht drumherum komme mich erstmal mit DBs auseinander zu setzen. Darum werd ich jetzt mal Google missbrauchen um mich in dieser Richtung schlau zu machen.

Noch eine Frage abschließend, bevor ich mich ans SQL-Lernen mache:
Ist es sinniger alle Daten als Zeilen in eine Tabelle zu knallen, oder lieber für jede Oberkategorie eine Tabelle zu erstellen?

Thx :wink2:

Ich würde alle Kategorien in eine Tabelle nehmen. Dann ist es auch einfacher die Kategorie eines Bildes zu ändern.

Okay, danke :slight_smile:

So ist es auch am einfachsten zu erstellen. Ich war mir nur nicht ganz sicher ob die Datenbank diese Masse an Infos fasst :ps: Aber das sollte ja kein Problem sein.

Bei der Größe musst du dir mal gar keine Sorgen machen…für das sind ja Datenbanken da :wink:

Dann ist ja gut :ps:

Hier das mysql tut das ich genommen hab:
php-einfach.de/einf_mysql.php
das is ziemlich simpel und idiotensicher (ich habs kapiert :smiley: )
ist so ziemlich alles drin was du brauchst

Grundsätzlich gilt immer: Daten gleicher Struktur kommen auch in ein und die selbe Tabelle.

Hi,

@bastler
Danke - Das ist wirklich totqal einfach und gut erklärt. Ich werd wohl ein paar längere Nächte vor mir haben :ps:

@chrisb
Danke für die Klarstellung - das erleichtert meine Arbeit um einiges.

Und bevor du anfängst, deine Querys zu schreiben:
Tu was für die Sicherheit deiner Scripte und informiere dich über SQl-Injection und den Sinn (und die Anwendung) von mysql_real_escape_string() :wink:

:wink2:

google WTF ist ein Query?
aha eine Abfrage (zum Beispiel einer Datenbank), die häufig einen formalen Ausdruck erwartet.

Danke für den Tip, werd mich dahingehend schlau machen.

ich dachte, das sei klar, schliesslich heist es ja uch mysql_query() :wink:

alles was nur einen Hauch unklar ist wird ab sofort gegooglt :ps:

Ich erdreiste mich mal eines Doppelposts, sonst wird das hier wahrscheinlich nicht bemerkt.

Ich verzweifel gerade an einer wahrscheinlich ganz einfachen Sache. Ich will mittels PHP einen Datensatz entfernen. Ich habe dazu folgendes kleines Formular erstellt, das aus einer Textbox und einem Send-Button besteht.

<form method="post" action="loeschen.php"> <input name="loeschen" type="text" size="20" maxlength="30"> <input type="submit" value=" OK ">

Man tippe in das erste Feld nun also die ID des Datensatzes ein und schickt das Formular ab.
Die loeschen.php wird dann aufgerufen, allerdings komplett weiß, also scheint was nicht zu funken.

$sql = ("DELETE FROM linienmaster WHERE id='$_POST["loeschen"]' LIMIT
1");
if (mysql_query($sql)){
echo "Datensatz gelöscht!<br>\n";} 
else {
echo "Datensatz konnte nicht gelöscht werden!<br>\n";}
} 
mysql_close ($db);

Wenn ich anstelle der Post-Variable eine Zahl eingeben funktioniert es tadellos. Allerdings bekomm ich dann immer „Datensatz gelöscht!“ gemeldet, auch wenn dieser garnicht existiert.

Primär würde ich gerne wissen, wieso das mit $_POST[„loeschen“] nicht funktioniert und was ich da beheben kann. Hat jemand ne Idee?

Den Schönheitsfehler, dass else echo nicht angezeigt wird kann ich mir sicher selbst ergooglen.

Danke :wink2:

Erstmal zu der Ausgabe “Datensatz gelöscht!”:
Die kommt darum, weil du mit if (mysql_query($sql)) nicht prüfst, ob der Datensatz wirklich vorhanden war und gelöscht wurde, sondern nur ob der query ausgeführt wurde, und nicht etwa ein Fehler aufgetreten ist.

Meld dich mal bei mir bei MSN, ich mache gerade auch so ein Skript :wink:

Weil die Zeile einfach syntaktisch fehlerhaft ist.
Überleg’ mal, wo du den mit doppeltem Anführungszeichen begonnenen String wieder beendest …

php.net/manual/en/language.t … ng.parsing

Wie man die Anzahl der von einem Statement betroffenen Datensätze auswertet, kannst du im Manual auf der Seite zu mysql_query nachlesen.

auch wenn sich hier einige wieder ärgern: Ich habe dir den Code mal korrigiert:

// ! // Mysql-Verbindung nicht vergessen!

$sql = "DELETE FROM linienmaster WHERE id='".mysql_real_escape_string($_POST["loeschen"])."' LIMIT
1";
$query = mysql_query($sql);
if ($query && mysql_affected_rows($query) > 0){
echo "Datensatz gelöscht!<br>\n";} 
else {
echo "Datensatz konnte nicht gelöscht werden!<br>\n"; //} // hier ist eine Klammer zuviel
} 
mysql_close ($db);

Hi,

erstmal danke für die Infos euch dreien - und auch danke für die Korrektur. Ich werd jetzt natürlich net blind copypasten sondern mir genau anschauen was ich falsch gemacht habe und warum - ich will ja verstehen was ich da mache.

Jegliches Ärgernis ist also unbegründet :wink:

Vielen Dank :wink2:

BTW: Von einer Verbindung bin ich an sich ausgegangen :ps: Das ist ja ohnehin das erste was ich machen muss ^^

//EDIT//

Da ist noch irgendwas nicht ganz richtig. Der Datensatz wird zwar entfernt, jedoch mit der Meldung die im else-echo-Zweig steht.