dedlfix: Problem bei CSV-Import (zeit überschritten)

Beitrag lesen

echo $begrüßung;

Ich hab noch was wichtiges vergessen.

ich bin gerade dabei eine Datei zu schreiben um komfortabel CSV-Dateien von Partnerprogrammen in eine MySQL-DB zu importieren:
9: $import = file("$ok.csv");
11: foreach($import as $fh)
13:   $handy = explode(";", $fh);

Diese Vorgehensweise berücksichtigt nicht die Regeln für CSV-Dateien in Hinsicht auf Begrenzungszeichen. Was ist, wenn ein feldertrennendes ; innerhalb eines Feldes steht, das korrekt mit Quotierungzeichen eingerahmt ist? Dann teilst du das eine Datum in zwei "Datümer" auf und es verschieben sich alle nachfolgenden Spalten. Mal abgesehen davon, dass die Quotierungszeichen nicht berücksichtigt werden.

Die Funktion fgetcsv() ist speziell für CSV-Dateien gemacht. Sie berücksichtigt alle Regeln. Allerdings arbeitet sie nicht mit dem Array zusammen, das bei file() entsteht. Du müsstest sie und weitere File-Funktionen schon so anwenden, wie es das Beispiel auf der Handbuchseite macht. Dann tritt auch dein Fehler nicht auf.

15:   $daten= "INSERT INTO affili_handy (id, artikelnr, titel, beschreibung, preis, bild, link, pcid, pcname, anbieter) VALUES ('','$handy[0]','$handy[1]','$handy[2]','$handy[3]','$handy[4]','$handy[5]','$handy[6]','$handy[7]','a$ok')";

Auch du ignorierst die Möglichkeit, dass das Zeichen ' innerhalb der Daten vorkommen kann (z.B. in Namen wie O'Brien). Dieses und andere Zeichen müssen besonders notiert werden, auch Escaping genannt. PHP kennt dafür für MySQL die Funktion mysql_real_escape_string().

Oder als Lehrsatz formuliert: Wann immer du Daten in einen anderen Kontext bringst, musst du sie kontextspezifisch behandeln.

echo "$verabschiedung $name";