Moin!
$dir = opendir ("../$verzeichnis");
while ($bild = readdir ($dir)){
if ($bild != "." && $bild != "..")hier deinen INSERT INTO setzen
Hhhm, ich hatte mir das komplizierter vorgestellt.
Das kann es noch werden.
Wenn du diesen Code erstellst und ausführst, wird dir pro Skriptlauf jedes im Verzeichnis befindliche Bild in die Datenbank geschrieben. Beim zweiten Skriptlauf hast du dann jedes Bild schon doppelt drin.
Ob das im normalen Betrieb passiert, hängt davon ab, welchen Weg deine Bilder nehmen, um in die Galerie bzw. die Datenbank zu gelangen. Nicht unüblich ist, ein Formular mit Upload-Feldern zu haben, in die man jedes Bild einzeln eintragen muß. Sehr mühsam - aber der Eintragungscode würde dann gar kein Verzeichnis durchscannen, sondern müßte die hochgeladenen Bilder nur in das passende Verzeichnis verschieben und den Dateinamen dann in die DB eintragen.
Fortgeschrittenere Methoden erlauben auch das Hochladenen mehrerer Bilder, die sich in einer einzelnen ZIP-Datei befinden. Das zu realisieren ist aber noch komplexer, weil man das ZIP natürlich auspacken muß.
Beide Ansätze sind unsinnig, wenn man direkten Zugriff auf das Verzeichnis hat, welches das Skript als Auslieferungslager für die spätere Bildanzeige nutzt (lokale Festplatte, FTP, SCP, ...). Wenn also der Arbeitsablauf vorsieht, dass du einfach die neuen Dateien in das festgelegte Verzeichnis bzw. in dortige Unterverzeichnisse packst, und dein Skript diese Struktur neu indizieren soll, dann ist es logisch, dass du berücksichtigen mußt, ob die Datei vorher schon einmal indiziert wurde - in diesem Fall darf sie natürlich nicht als neues Bild in die Datenbank geschrieben werden - allenfalls dürfen Dateiinformationen, die sich zwischenzeitlich geändert haben, aktualisiert werden.
Am einfachsten dürfte sein, wenn du der Datenbank das Auffinden von Duplikaten überläßt. Wenn festgelegt ist, dass jeder Dateiname einmalig sein muß, dann setze einen UNIQUE-Index auf die Spalte mit dem Dateinamen. INSERTs, die schon vorhandene Dateinamen einfügen wollen, scheitern dann mit einer SQL-Fehlermeldung (die du mit mysql_error() bzw. mysql_errno() abfragen kannst - die Fehlernummer abzufragen ist sicherlich leichter, weil die Nummer für "Duplicate Entry" sich nicht ändert, egal welche MySQL-Version, und du diesen erwarteten Fehler dann nicht dem User melden mußt - alle anderen natürlich schon).
Wenn du Unterverzeichnisse benutzt, müßte die UNIQUE-Spalte entweder den vollen oder anteiligen Pfadnamen enthalten, oder alternativ gibt es zwei Spalten (Pfad und Dateiname getrennt), über die ein gemeinsamer UNIQUE-Index gelegt wird (dann muß die Kombination beider Felder einmalig sein - kommt aufs gleiche raus, ist aber eventuell aus Sicht der Tabellen-Struktur günstiger - hängt davon ab, was du mit den Feldinformationen noch so vor hast, außer die Datei wiederzufinden).
Du siehst: Das Thema ist weitaus komplexer, als man es auf den ersten Blick sieht - aber beginne am besten wirklich ganz einfach, denn alle Komplizierungen ergeben sich erst, nachdem du die erste, noch humpelnde Version geschrieben hast, und auf deren Unzulänglichkeiten gestoßen bist - Lerneffekt. ;)
- Sven Rautenberg
"Love your nation - respect the others."