[PHP/mySQL] mySQL-Tabelle mittels csv-Datei aktualisieren

eichi

fühlt sich hier wohl
mySQL-Tabelle mittels csv-Datei aktualisieren

Hallo zusammen,
ich bin totaler newbi in PHP und mysql und bräuchte Anregungen für diese Aufgabenstellung:

Die Tabellen unserer mysql-DB sollen aktualisiert werden. Die neuen Einträge liegn in einer csv-Datei.
Meine Aufgabe ist es zu prüfen, ob diese Einträge den Eigenschaften der Tabellenfelder,
also z.B. int(11) für den Typ oder unsigned für die Attribute usw., genügen.
Und diese Eigenschaften sollen von Hand in eine ini-Datei eingetragen werden.
Diese ini-Datei habe ich gemacht und bekomme in meinem script mit parse_ini_file() die Einträge
heraus.

Bloß wie könnte es jetzt weiter gehen? Ich im Moment völlig ratlos.
Hat jemand eine Idee???

Gruß

eichi
 
Hia

Vielleicht verstehe ich deine Frage falsch (?) aber wieso importierst du das CSV nicht einfach via phpmyadmin in die mysql datenbank? Sicherstellen dass die CSV-Werte von den Datentypen her in in die Tabellen passen solltest du schon beim export des CSV.

für was überhaupt ein ini file, was genau willst du damit erreichen?

Ziel ist ja einfach das CSV in die DB zu bekommen, richtig? Wenn die Datentypen nicht zusammen passen werden sie auch nicht zusammen passen nachdem du es in ein Ini File geschrieben hast.


merror
 
hallo merror,
erst mal ein großes 'tschuldigung für meine späte Antwort. Aber ich hatte in den letzten Tagen keine Möglichkeit ins inet zu kommen. (big problems mit meinem eigenen pc und auf der arbeit.)

Bei meinem Problem ist es wohl so, daß meine Firma einen Webshop für einen Kunden entwickelt.
Und wenn dieser Kunde neue Artikel hat (oder sein Angebot irgentwie ändert) kommt eine csv-Datei zum DB-Admin bei uns.

Wenn ich das richtig verstehe (ich bin leider total unbedarft, was DBs und PHP betrifft), muß man davon ausgehen, daß die csv_Werte nicht unbedingt mit den gewünschten Datentypen übereinstimmen.

Es ist auch möglich, daß es Abhängigkeiten gibt, wie
z.B. : ist Feld(1) nicht besetzt, dann muß zwingend Feld(2) besetzt sein oder
ist Feld(1) ein int, dann muß es in einem Range von 1-4 sein
Oder ähnlich.

Und solche Vorgaben soll der DB-Admin selber händisch in eine ini-Datei eintragen.
Mein Job ist es nun, ein Script zu schreiben, das diese Vorgaben aus der ini-Datei liest und die csv-Datei darauf prüft.

Dann sollen die korrekten Werte in die DB und die fehlerhaften als xls-Datei zurück zum Kunden geschickt werden.

That's my job.
Aber ich bin irgendwie überfordert damit.

Sorry nochmal und danke für deine Zeit.

eichi
 
Die Anzahl der Felder ist bei den CSV-Dateien ja hoffentlich immer gleich.

Also z.B.
Code:
23;Name;Details;;23.50;
dazu einfach die CSV-Datei zeilenweise einlesen und mit explode() in ein Array übertragen.

Zum Auswerten würde ich mir eine kleine Funktion schreiben nach dem Schema:
PHP:
pruefen($variable, $datentyp, $minimum, $maximum) {
   $io = true;
   switch ($datentyp) {
      case 1: if (!is_int($variable)) $io = false;
      			  break;
      case 2:
      ...
      ...
      
      default : $io=false;
   }
   // hier noch auf min und max abfragen wenn Bereich nicht io
   return $io
}

So kannst du in einer INI-Datei oder über eine weitere CSV-Datei einfachst die Datentypen für jede Konstellation angeben. Wobei bei immer gleichen Datensätzen eine seperate Datei übertrieben wäre.
 
hallo
also parse_ini_file() und explode() haben prima gefunzt.
Nu habe ich ein 2-dim. Array aus der csv und ein 2-dim. Array aus der ini.
Habe nur Schwierigkeiten, weil eines davon ein assoziatives Array ist.
Das eine Feld wird über Indizes angesprochen, das andere über Schlüssel.
Ich werde mal versuchen, aus dem assoziativen in indizoertes zu machen.

Vieleicht ist das etwas einfacher zu handhaben

Vielen Dank für Eure Hilfe
eichi
 
Oben