Sorry, ich wusste nicht, wie weit Du schon bist. Ich denke, die Tabellen kannst Du erstellen, oder? Wie Du die Tabellen auslesen kannst, weisst Du auch.
In der Datenbank-Programmierung splittet man alles so gut auf, wie es geht. Daraus entsteht die Dynamic. Nehmen wir als Beispiel die Tabelle Kategorien. Natürlich könntest Du, wie Du es anfangs geplant hast, die Kategorie mit in die Tabelle Bilder packen. Aber dort läufst Du dann Gefahr, doppelte Kategorien zu haben.
Genauso bei den Usern. Natürlich könntest Du auch die Userinfos in die Tabelle Bilder mit reinknallen, aber irgendwann ist die Tabelle so vollgestopft (mit Daten, die Du nur selten brauchst), dass MySQL sehr langsam wird. Daher baut man viele Tabellen und verknüpft diese miteinander.
So kann man aus einer Tabelle alle Informationen ziehen, die man braucht, selbst wenn diese in einer anderen Tabelle liegen.
Was Du nun machst, ist einen Bereich programmieren, in den sich ein User einloggen muss. Um den User zu identifizieren, werden seine Daten ja aus der Datenbank ausgelesen und in einer Session gespeichert. Unter anderem die ID des Users. Das ist die Variable $session[id].
Danach schreibst Du ein Formular mit den Feldern für die Kategorie, das Datum des Bildes und die Bilddatei selbst. Die Methode des Formulars ist "POST", somit werden die übermittelten Daten in $_POST-Variablen gespeichert. z.B. $_POST['kategorie']
Ich weiss leider nicht, wie Dein Upload-Script aussieht, aber dort steht auf jeden Fall etwas von $HTTP_POST_FILES. Da Du eine Datei hochladen möchtest, benutzt Du im Formular das Feld INPUT TYPE="FILE". Die übermittelten Daten nach dem Absenden des Formulars werden in der Variablen $HTTP_POST_FILES gespeichert. Den Namen der Datei kannst Du mit $HTTP_POST_FILES['feldname']['name'] auslesen. Das brauchst Du, weil mysql keine Arrays verarbeiten kann (zumindest nicht bei SELECT, INSERT, UPDATE und DELETE). Somit kannst Du den Bildnamen als $bild = $HTTP_POST_FILES['feldname']['name']; definieren und in die Datenbank schreiben.
Kommen wir zum Datum. Du möchtest das Datum gerne absteigend sortieren. Zahlen werden in MySQL nur dann richtig sortiert, wenn der Feldtype INT ist. Da ein Datum aber einen Punkt hat, kannst Du diesen Feldtype nicht verwenden. Du müsstest das Datum also String speichern, aber dann kannst Du es nicht mehr richtig sortieren.
Das umgehen wir, indem wir aus diesem Datum eine Zeitmarke erstellen, die die vergangenen Sekunden seit dem 1.1.1970 darstellt. Sieh Dir dazu mal die Funktion mktime() an. Aus dieser Zeitmarke kannst Du nun alle Infos rausholen, die Du brauchst. Und da dies ein INTEGER (also eine reine, ganze Zahl) ist, kannst Du auch den Feldtype INT verwenden. Und schon kannst Du sortieren.
Kommen wir zur Kategorie. Du kannst theoretisch alle Bilder in einem Ordner speichern, denn die Kategorie wird ja in der Datenbank gespeichert und aus dieser ausgelesen. Das Ganze hat nur den Nachteil, dass, wenn jemand ein Bild mit dem selben Namen hochlädt, das alte Bild gelöscht wird. Wenn Du das umgehen willst, solltest Du das Überschreiben von Dateien unterbinden und eine Fehlermeldung ausgeben, mit dem Hinweis, dass der User den Dateinamen doch bitte ändern möchte.
Wenn Du das nicht willst, musst Du immer dann, wenn eine neue Kategorie erstellt wird, auch einen neuen Ordner erstellen. Das machst Du mit mkdir(). Um aber zu verhindern, dass eine Kategorie doppelt eingetragen wird, solltest Du die neue Kategorie mit den schon vorhandenen Kategorien aus der Datenbank vergleichen. Wenn Du das machen möchtest, muss ich Dir dann helfen, wenn Du soweit bist. Ansonsten wird das jetzt zu spät.
Wie Du die Daten dann in die Datenbank bekommst, weisst Du?
Gruß,
Stephan