Zum Inhalt springen

CSV o.Ä. in die T3 SQL - DB

Erstellt am 12. Juni 2006 · 9 Antworten · letzte Antwort am 13. Juni 2006

Tags: Frage

ÁndreMansfeld ·

Liebe Helfer,
hab sowas schonmal vor längerer Zeit angefragt, aber noch keine passende Lösung gefunden.
Ich habe ein Excelfile mit verschieden Spalten.
Dann habe ich eine eigene Extension gebaut, welche mir die Daten auch wunderbar im FE anzeigt. Das Problem ist nun folgendes. Ich kann meinem Kunden nicht zumuten und auch aus Sicherheitsgründen erst gar nicht erlauben :-) dieses File per my SQL (Tabelle einfügen) zu integrieren.
Wie könnte man sowas einfach lösen? Am liebsten wäre mir eine Lösung, bei der der Kunde nur irgendwo einen Mechanismus auslösen kann " hier aktuallisieren" z.B.
Dann öffnet sich ein Uploadfenster, er wählt die CSV o.ä. und drückt auf Upload. Die EXT müßte dann automatisch die Spalten in die dafür schon vorgesehene SQL Tabelle schreiben, gegebenenfalls verifizieren (doppelte suchen und aktualisieren oder komplett löschen und neu hochladen).
Ich habs schon mit csv_tables versuchen wollen (klingt so, als wäre das schon das richtige), aber nach der Installation zeigt sich nirgendwo etwas von der EXT. weder als Front In PlugIn noch in der Webtoolsspalte. Doku gibts keine.
Hat jemand ne Idee??

woida ·

Das integrieren ein CSV-Datei in MySQL ist ja (fast) das einfachste der Welt ( #giggle# ):
http://www.php-faq.de/q/q-mysql-csv-import.html

Entweder fügst du die Daten direkt in die Ziel-Tabelle ein und löscht alle alten Beiträge, oder du speicherst die Daten in einer Temporären Tabelle und kannst dann irgendwelche Überprüfungen durchführen, bevor du die Daten dann übernimmst.

ÁndreMansfeld ·

😃 ja, soweit so gut :p
Danke für die Antwort. Mein Bestreben ist es ja diese Funktionen einem "NICHTFACHMANN" zugänglich zu machen.
Könnte man sowas evt auch programmieren. Vielleicht als kompl. ext Script für einen PC (Cronjob o.ä.)
Oder eben eine FE EXT. bei der man nur einen Uploadbuttom integriert und diese Seite dann schützt, so das ein Mitarbeiter dann einfach eine neue Liste uploaden kann!

ÁndreMansfeld ·

o.O Hab mich mal durch die Materie gelesen.
Also ich denke, dass hier eine eigene EXTENSION Abhilfe schaffen könnte.
Da dieses Thema schon öfter angefragt wurde und bis auf den Verweiß auf z.B. "csv_tabels" noch nicht zu Ende geführt wurde, würde ich mich gerne mal an das Thema heran wagen.
Wenn ich das richtig sehe, müßte ich eine kleine Extesion bauen welche folgenden Funktionen hat.
1. Uploadmöglichkeit für die Datei an einen bestimmten Ort (fileadmin/datablabla/liste.csv)
2. Aktuallisieren Buttom, welcher den SQL Befehl

LOAD DATA LOCAL
        INFILE '/home/www/servers/www.servername.de/tmp/import.csv'
        REPLACE
        INTO TABLE tabellenname
        FIELDS
                TERMINATED BY ';'
                OPTIONALLY ENCLOSED BY '"';

ausführt. (Daran könnte es bei mir dann scheitern :-) )

Wenn ich das richtig verstehe würden dann alle Daten aus der SQL Tabelle mit den entsprechenen Spalten (z.B. ; getrennt) ersetzt werden.
Das wäre ja schon was. Würde mir auch sehr viel Arbeit ersparen, weil ich dann die Typo3 Tabellenspalten (PID,UID,tstamp,crdate ect.pp.) nicht auch noch vorher berücksichtigen müßte.

Alles was ich benötigen würde, wäre der Befehl in der EXT, der dann den SQL Befehl auslöst.
Hat jemand einen Codeschnipsel für mich? Oder einen Denkanstoß? :o

Wenns klappt hätten wir doch ne nette EXT. fürs TER.
So wie ich das mitbekommen habe gibts sowas noch garnicht. Evt. die "csv_table" aber die läuft bei mir nicht und ist undokumentiert.

woida ·

Einen Cronjob brauchst du nicht. Es soll ja nur dann eine Aktion durchgeführt werden, wenn auf Upload gedrückt wird.
Der CSV-Import ist eingentlich nur was, wenn die Ziel-Tabelle das gleiche Format wie die CSV-Datei hat. Wenn du die Felder PID,UID,tstamp,crdate auch in deiner CSV Datei hast (und auch noch an der richtigen Stelle), dann ist es kein Problem.

ÁndreMansfeld ·

Nein leider nicht 🙁 .
Die ExceltTabellen beginnen mit dem Eintrag der Art. Nummer. Ich habe mir im Moment so beholfen, dass ich per COPY/PASTE die Excel in eine Mustervorlage (welche die restlichen Spalten hat) reingeladen habe und dann als CSV exportiert habe. Per PHPmyAdmin dann die Tabelle ausgewählt und die CSV importiert. Leider ist das zuviel bastelei für den Enduser.

In dem Link zu http://www.php-faq.dewar aber zu lesen, dass nur die Felder welche gleichlauten ersetzt werden!!! Hab ich das evt falsch verstanden?

woida ·

In dem Link zu www.php-faq.dewar aber zu lesen, dass nur die Felder welche gleichlauten ersetzt werden!!! Hab ich das evt falsch verstanden?

Diese Zeile habe ich nicht gelesen. Du könntest Sie ja evtl. zitieren, wo sie steht.

In deinem Fall mußt du halt die CSV-Datei selbst mit einem Skript parsen und dann über INSERTs oder UPDATEs einfügen. Das ist auch nicht recht viel mehr Aufwand.

ÁndreMansfeld ·

OK, ich denke, dass es sich so verhält, nur die Spalten welche gleich bezeichnet sind ändern sich. Schließt aber wohl ein, dass es immer gleich viele Spalten sein müssten. In der PHPmyAdmin lautet diese Zeile
"Wenn Sie nur bestimmte Spalten importieren möchten, geben Sie diese bitte hier an".
Habs versucht, aber beim Importieren fängt er in der ersten Spalte an.
Also erhalte ich anstatt einer leeren UID (weil ja nicht in der CSV ) eine UID, welche die Artikelnummer enthält :-)
Anders, wenn ich alle Spalten habe und dort angebe er soll nur die Artilnummer ändern. dann passts!!!! Alle Änderungen waren hinfällig, bis auf die Artikelnummer.
Also ich muß noch ein bisschen feilen :-), halt Euch auf dem Laufenden.
Und wie gesagt, wenn jemand einen Denkanstoß hat, dann her damit!! :p

woida ·

Also erhalte ich anstatt einer leeren UID (weil ja nicht in der CSV ) eine UID, welche die Artikelnummer enthält

Ist ja auch klar, woher soll MySQL denn Wissen, daß die Artikelnummer keine UID ist?

Und wie gesagt, wenn jemand einen Denkanstoß hat, dann her damit!!

Ich dachte ich hab dir schon einen gegeben. Naja.

ÁndreMansfeld ·

😃 Hey WOIDA, Tschuldigung und natürlich ein großes Danke!!
Ich meinte weiterführend.
Ich werde jetzt schauen meine EXT zu bauen und dort auf einen Buttom einen Befehl zu legen, welcher dann einen SQL Befehl ausführt.
Also einfach ausgedrückt.
Wenn geklickt dann "SQL BEFEHL "

LOAD DATA LOCAL
        INFILE '/home/www/servers/www.servername.de/tmp/import.csv'
        REPLACE
        INTO TABLE tabellenname
        FIELDS
                TERMINATED BY ';'
                OPTIONALLY ENCLOSED BY '"';

oder so ähnlich!! 🙂 Und hier bin ich dann noch für jede Hilfe DANKBAR, denn ich denke, dass wenn ich da einen kleinen Fehler drin habe, könnte ich mir wohl ne komplette SQL schrotten #angry# .
Mach sowas doch auch zum ersten Mal