[PHP] Dateinamen in DB übernehmen...

Eliah

Cadet 4th Year
Registriert
Okt. 2004
Beiträge
98
Hallo zusammen!

folgende Aufgabe muss ich lösen:

Ich habe auf dem Server ein Verzeichnis mit Datein. Ihre Dateinamen sollen in
einer Tabelle in der DB eingetragen werden. Die Tabelle exisitert bereits und
auch das einlesen der Dateien klappt.

Nun ist es so das ich in unregelmässigen Abständen Dateine hinzufügen möchte.
Un darin besteht mein Problem. Ich bekomme es nicht hin das mein Script die Dateien
in der DB mit der im Verzeichnis vergleicht um anschliessend die neuen hizuzufügen.

Bisher sieht das so aus:

PHP:
<?php
// alle Dateien in einem Verzeichnis auslesen
$handle=opendir ("../../fiels");

// DB Verbindung herstellen
require_once('../connect.php');


// Vorhandene Einträge aus der DB auslesen und im Array speichern
 $sql = "SELECT filename FROM dateien";
 $result = mysql_query($sql) OR die(mysql_error());
     if(mysql_num_rows($result)) {
          while($row = mysql_fetch_assoc($result)) {

          // hier sollte die Funktion hin um zu überprüfen welche
          // Datei bereits vorhanden ist. Fehlt ein Dateiname sollte dieser eingetragen werden.


            }

          }
     }
// ------



// ENDE
closedir($handle);
 ?>

Danke für eure Hilfe!
 
Warum machst du es dir nicht einfach in dem die Datenbank jedes mal neu angelegt wird?

Dann ist alles drin, was auf dem Server ist auch dateien die gelöscht wurden sind drausen oder geht es um zuviele Dateien das es zu lange dauern würde?
 
Also gleich vornweg, ich werde keinen Code posten da ich die befehle
1. nicht kenne und
2. weils dann weniger Spass macht :P


Im Prinzip würde ich auch zu der Lösung tendieren die Tabelle einfach neu anzulegen, ausser in der Tabelle stehen noch mehr Informationen zu den Dateien die auf jeden Fall erhalten bleiben müssen.


als erstes würde ich ne zusätzliche Spalte in der Tabelle anlegen. Nenn sie "checked" oder so, Typ Binär und Standard auf "false"

Dann suchst du dir die php funktion die die alle Dateinamen innerhalb eines verzeichnisses zurück gibt, am besten als array, sonst machs du nen array draus.

Dann ne Schleife die das komplette Array durchgeht und dabei ne Suchanfrage an die Datenbank gibt, kommt kein Ergebnis zurück, gibts die Datei in der DB nicht, also eintragen lassen, existiert der Eintrag schon setz den dazugehörigen "checked" eintrag auf "true"

Ist die schleife durchgelaufen, sind alle (neuen) Dateien in der Tabelle drin, jetzt müssen nur noch die fehlenden raus

also ne such anfrage an die DB ..."where Checked = False"
und die gefunden Ergebnisse löschen.

Danach die komplette Checked spalte wieder auf false setzen.


PS: Bin mir irgendwie ziemlich sicher das es ne elegantere Variante gibt, aber bin mit php und sql nicht so vertraut, wurde nur vorn paar Wochen als Praktikant an sowas ähnliches dran gesetzt.
 
Zuletzt bearbeitet: (linksschreibung)
Stark vereinfacht:

PHP:
$files_in_dir=array('1.txt','2.txt','3.txt','4.txt');

$files_in_database=array('1.txt','2.txt','4.txt');

$compare=array_diff($files_in_dir, $files_in_database);

if (count($compare)!=0) {
	foreach ($compare as $key => $value) {
		echo 'Datei "'.$value.'" ist nicht in der Datenbank<br />';
		echo 'INSERT INTO tabelle...';
	}
}

ich würde es evt. in der while schleife der DB einfach prüfen mit ner if Anweisung.
 
Zurück
Oben