Tipp zu CSV-Import

zamo76

Erfahrenes Mitglied
Hi Leute,

ich mache mich heute mal an einen CSV-Import und habe folgendes gebastelt:

PHP:
<?php
error_reporting(E_ALL);
$fp = @fopen("http://www.domain.de/test.csv", "r") or die ("Kann Datei nicht lesen.");

while ($line = fgets($fp, 1024)) {
$my_array = explode(';',$line,9);

sql = "INSERT INTO test_tabelle SET          artikel='$my_array[9]',
                                                                 number='$my_array[8]',
                                                                 ps22='$my_array[7]',
                                                                 deep='$my_array[6]',
                                                                 bild='$my_array[5]',
                                                                 lieferzeit='$my_array[4]',
                                                                 versand='$my_array[3]',
                                                                 status='$my_array[2]',
                                                                 seller='$my_array[1]';";
if( mysql_query($sql)){
echo "Erfolg! ";
echo $my_array[9]."<br>";
}

}
fclose($fp);
?>

Sage gleich dazu, das ich noch Anfänger bin! ;-)

Es geht also darum eine CSV-Datei auszulesen und die jeweiligen Spalten/ Zeilen in die Datenbank zu übertragen. Allerdings bekomme ich immer ein parse error beim SQL-Statement.

Vielleicht kann mir jemand helfen bzw. sagen ob es überhaupt so funktioniert!?

Danke
zamo76
 
Also:

PHP:
Parse error: parse error in /home/httpd/vhosts/domain/httpdocs/csvtest.php on line 11

on line 11 steht das SQL-Statement.

Aber ich werde natürlich Deine Alternative auch mal durchgehen! ;-)

zamo76
 
Hallo!

Spontan fällt mir auf dass "sql" aus der Zeile
PHP:
sql = "INSERT INTO
keine Variable ist..... da fehlt also das "$" davor.

Gruss Dr Dau
 
aah ja, das war schon mal Fehler Nr. 1

Jetzt poste ich mal die ersten beiden Zeilen der Fehlermeldung:

PHP:
Notice: Undefined index: 9 in /home/httpd/vhosts/domain/httpdocs/csvtest.php on line 11
Erfolg!

Notice: Undefined offset: 9 in /home/httpd/vhosts/domain/httpdocs/csvtest.php on line 22

Was sagt mir das?

zamo76
 
Ich kenne zwar den Aufbau Deiner CSV nicht, aber ich vermute mal dass dort nur 9 Datenfelder pro Datensatz sind.
Ein Array beginnt immer mit "0" (wenn automatisch nummeriert wird).
Demnach müssten Deine Datenfelder von $my_array[0] bis $my_array[8] gehen.
 
So, ich habe mich mal wieder mit dem CSV-Import befasst und es klappt soweit alles, bis auf die Tatsache das er alles in die erste Spalte der Tabelle schreibt:

PHP:
$fp = @fopen("http://www.domain.de/datei.csv", "r") or die ("Kann Datei nicht lesen.");

while ($line = fgets($fp, 1024)) {
$my_array = explode(" ",$line,9);

$sql = "INSERT INTO `tabelle` (`artikel`, `number`, `ps22`, `deep`, `bild`, `lieferzeit`, `versand`, `status`, `seller`) VALUES ('$my_array[0]', '$my_array[1]', '$my_array[2]', '$my_array[3]', '$my_array[4]', '$my_array[5]', '$my_array[6]', '$my_array[7]', '$my_array[8]')";

Eine Zeile der CSV-Datei sieht so aus:
PHP:
Artikel Herstellernummer Preis etc.

Ich denke mein Fehler liegt bei explode()!? Kann mir jemand einen Tipp geben?

Danke im Voraus

zamo76
 
Hi,

bist Du sicher das die einzelnen Felder in der CSV-Datei wirklich nur durch ein Leerzeichen getrennt sind

PHP:
explode(" ",...
trennt die Felder nämlich so und wofür steht die Zahl 9?

Explode verlangt doch nur das Trennzeichen und den Text der getrennt werden soll.

Dann müßte es heißen
PHP:
$my_array = explode(" ", $line);
wenn es wirklich ein Leerzeichen ist oder aber
PHP:
$my_array = explode(";", $line);
wenn die Felder mit Semikolon getrennt wird
 
also, da kein anderes Trennzeichen zu sehen ist, wird es wohl eine Leerzeichen sein!
Die 9 steht für die Anzahl der Spalten und mit explode(";") habe ich es auch schon probiert!
aber nicht!

zamo76
 
Zurück