Dicke Probleme mit fgetcsv

stephandziurla

Erfahrenes Mitglied
Hey, ich bin's ma wieder....
Nachdem ich feststellen musste, dass man wohl bestimmte Rechte auf der Datenbank braucht, um .csv-Dateien mittels SQL-Syntax à la "LOAD DATA INFILE......." importieren zu können, habe ich mich nun an der Funktion fgetcsv() versucht und bin da wohl kläglich gescheitert.

Ich habe mir dazu das Beispiel auf php.net angeschaut und ausprobiert. Es funktioniert auch. Aber das Problem ist, dass ich die entsprechenden Datensätze mit dieser Funktion in eine bestehende Tabelle (T_Testtabelle) importieren möchte und ehrlich gesagt mir der Ansatz dazu fehlt, weil ich das Beispiel nicht 100%ig verstehe.
Hier vielleicht man das Beispiel:
PHP:
<?php
$row = 1;                                      // Anzahl der Arrays
$handle = fopen ("test.csv","r");              // Datei zum Lesen öffnen
while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) { // Daten werden aus der Datei
                                               // in ein Array $data gelesen
   $num = count ($data);                      // Felder im Array $data
                                               // werden gezählt
   print "<p> $num fields in line $row: <br>\n";
   $row++;                                    // Anzahl der Arrays wird 
                                               // inkrementiert
   for ($c=0; $c < $num; $c++) {              // FOR-Schleife, um Felder 
       print $data[$c] . "<br>\n";            // des Arrays auszugeben
   }
}
fclose ($handle);
?>

print $data[$c] gibt ja immer die jeweils komplette Zeile aus, die kann ich so aber nicht hochladen....oder?

Kann mir da vielleicht jemand ein wenig zur Hilfe gehen? Wäre supernett, danke schonmal im Voraus!!
 
Wie sieht denn da Trennzeichen in deiner CSV-Datei aus. Wenn es anders ist als dein Komma dann kommt es zu dem von dir beschriebenen Problem.

Falls du Excel benutzt hast um die CSV-Datei zu erstellen, verwende mal ein Semikolon als Trennzeichen in der Funktion fgetcsv()


Hoffe konnte dir helfen
 
Naja......nicht so wirklich *grins*
Auf den Fehler mit dem Semikolon bin ich auch schon gekommen und hab das bereits verbessert.

Aber ich möchte sozusagen auf die einzelnen "Datensätze" zugreifen, damit ich sie dann hochladen kann; das war, bzw. ist ja leider mein Problem.
 
Gibt es denn die Möglichkeit die bestimmten Datensätze zu identifizieren?
Ich meine gibt es ne eindeutige ID oder so?

Mit Datensätzen meinst du doch eine Zeile in der CSV, die du als Array von der Funktion zurück bekommst?
 
Ja richtig, das meine ich.
Ich habe gerade ein Beispiel gefunden, was ein wenig anders arbeitet, aber dennoch funktioniert.

PHP:
1: $file = file('T_Kundendaten.csv');
2: $string = explode( ';',  $file[0] ); 
3: echo $string[0]."<br>".$string[1]."<br>".$string[2];

Die erste Zeile liest die komplette Datei ein und speichert sie in ein Array $file.
In Zeile 2 werden mittels der Funktion explode alle Inhalte von der ersten Zeile des Eintrages (also $file[0]) getrennt und in das Array $string gespeichert.
Die letzte Zeile gibt als Probe die ersten drei Einträge des ersten Datensatzes aus.


Find ich tierisch einfach und es funktioniert auch. Wenn man das Ganze schön in Schleifen verpackt, ist das Einlesen einer solchen Datei ziemlich einfach und effizient, finde ich. Somit ist dann auch das Hochladen der Bestandteile der .csv-Datei ein Kinderspiel.
 
Tja nun das get auch! Aber die Funktion fgetcsv gibt dir ja nun ein Array zurück bis der Datensatz zu ende ist und der nächste beginnt! Und das solange bis der Dateizeiger am Ende der Datei ist.

Wenn du also in deiner while-Schleife das Array $data hast kannst du doch ganz einfach auf den Inhalt zugreifen.

Beispiel:

echo $data[0]; ->ID
echo $data[1]; ->Vorname
echo $data[2]; ->Nachname

Somit kannst du dann auch ein SQL-Statement zusammenbauen!
 
Hmm...man, das ist sogar einleuchtend *lach*
Ich hab das so nicht gesehen, deshalb stand ich auch aufm Schlauch.....stimmt, so kann man es auch machen.
 
Zurück