Problem mit CSV Import Script

xtramen01

Erfahrenes Mitglied
Hallo Leute,

ich weis mir leider nicht mehr zu helfen.
Sitze schon seid stunden drann und finde einfach keinen Weg.

Ich schreib mir grad ein kleines CSV Import Script.
Klappt eigentlich auch ganz gut.

Aber meine Produktnamen und Beschreibungen sind Mehrsprachig.
Und hier ist das Problem. Ich hab keine Ahnung wie ich die CSV Datei so separieren kann dass ich die Einträge in die DB schreiben kann.

Die Feldnamen der CSV Datei sehen ungefähr so aus, wobei die Ziffer hinter products_description und products_name jeweils die IDs der jeweiligen Sprache darstellen:

Code:
products_id, products_price,......products_description_1, products_description_2, products_name_1, products_name_2....

Alle Daten ausser products_description und products_name kommen in die DB Tabelle "products", welches auch kein Problem ist.
Die anderen Daten sollen in die Tabelle "products_description" welche foldendes DB Design hat.

Code:
products_id | language_id | products_name | products_description

Die IDs der Sprachen hole ich so:

PHP:
       foreach ($languageID as $key => $langID){
       $lID = $langID['id'];
       $lname = $langID['code'];
}

Mir geht es nur darum wie ich die Daten aus der CSV so separiere das ich das mit der Mehrsprachigkeit realisieren kann.
Bzw. Die Felder aus der CSV Datei der jeweiligen Sprach ID zu zuordnen.
Hat jemand eine Idee, oder schonmal gemacht?

Anbei mal das ganze Script:
PHP:
// Sprachen werden geladen
  $languageID = tep_get_languages();

// Dateinamen und SPeicherort bestimmen bestimmen
  $filename = 'test.csv';
// Größe der Datei
  $size = filesize($file);
// Datei zum schreiben öffnen
  $stringdatei = fopen($filename,"r");
// Trennzeichen bestimmen
  $delimeter = ';';

// Felder von Tabelle Products zählen
  $field_count_query = tep_db_query("select * from " . TABLE_PRODUCTS . "");
  $field_count_products = tep_db_num_fields($field_count_query);


//######################################################################
// Feldnamen ANFANG
//######################################################################

// Feldnamen werden aus der CSV Datei ausgelesen und in ein Array geschrieben
  $fieldname = fgetcsv($stringdatei, $size, $delimeter);

// Feldnamen Array wird zerlegt für jeweilige Tabellen
  $fieldname_products = array_slice($fieldname, 0, $field_count_products);
  $fieldname_description = array_slice($fieldname, $field_count_products, -1);
  //$fieldname_cat_id = array_slice($fieldname, -1);

//######################################################################
// Feldnamen ENDE
//######################################################################

//######################################################################
// Werte ANFANG
//######################################################################

// Werte werden aus der CSV Datei ausgelesen und in ein Array geschrieben
  while($row = fgetcsv($stringdatei, $size , $delimeter)){

// Werte Array wird zerlegt für jeweilige Tabellen
  $row_products = array_slice($row, 0, $field_count_products);
  $row_description = array_slice($row, $field_count_products, -1);


//------------------------------------------------
// Daten für Tabelle Products
  $i = 0;
  foreach($row_products as $value_products){
  $values_products[$i] = $value_products;
  $output_products[$i] = $fieldname_products[$i] . " = '" . $values_products[$i] . "'";
  $i++;
  }
  $products_input = implode(", ", $output_products);

//------------------------------------------------
// Daten für Tabelle Description

  $i = 0;
  foreach($row_description as $value_description){
  $values_description[$i] = $value_description;
  $output_description[$i] = $fieldname_description[$i] . " = '" . $values_description[$i] . "'";
  $i++;
  }
  $description_input = implode(", ", $output_description);
//------------------------------------------------
// Daten in Tabelle Products schreiben

  $id_exists_query = tep_db_query("select products_id from " . TABLE_PRODUCTS . " where products_id = '". $row[0] ."'");
  $id_exists = tep_db_num_rows($id_exists_query);

  if($id_exists != 0){
    tep_db_query("update " . TABLE_PRODUCTS . " set " . $products_input . " where products_id = '". $row[0] ."'");
  }else{
    tep_db_query("insert into " . TABLE_PRODUCTS . " set " . $products_input . "");
  }

  }
//------------------------------------------------
// Daten in Tabelle Description schreiben
// An dieser Stelle scheitere ich leider!!

//######################################################################
// Werte ENDE
//######################################################################

Gruss und schonmal jetzt Danke!
 
Hi,

eventuell kann man sich da Codieren ja sparen. Ich habe da ein Tool
gebaut, http://dbTube.org, mit dem man seine Datenimports "zeichnen" kann.
Man zeichnet den Datenimport als workflow und verwendet die so erstelllte
Definition bei seinen späteren Imports.

Lieben Gruß

Andreas
 
Zurück