Einzelnen Beitrag anzeigen
  #1  
Alt 13.08.2007, 10:09:05
sputnik72 sputnik72 ist offline
Anfänger
 
Registriert seit: Apr 2005
Alter: 51
Beiträge: 121
Daten aus csv-Datei in zwei Tabellen speichern

Hallo,
ich habe folgende Problemstellung, zu der ich einen guten Rat bräuchte:

Ich habe zwei Tabellen, wobei in Tabelle 1 Daten über Bücher abgelegt sind (Autor, Titel, usw., insgesamt 13 Felder inkl. ID) und die Tabelle 2 dazu dient, diese Bücher bestimmten Kategorien zuzuordnen. Tabelle 2 hat nur zwei Felder, eins mit dem Buch-ID und eins mit der Kategorienummer. Die zweite Tabelle gibt es, damit man ein Buch auch eventeuell mehreren Kategorien zuordnen kann.

Nun sollen Daten aus einer csv-Datei via php (nicht phpmyadmin) importiert werden. Die csv-Datei wird von einem Nutzer mit Hilfe von Excel oder OpenOffice generiert. Am besten wäre es, wenn der Nutzer nur EINE Tabelle bearbeiten bräuchte (bzw. soll er eine Vorlage benutzten), in der die Kategorienummer einfach als zusätzliches Feld eingetragen ist.

Das Hochladen und der Datenimport in Tabelle 1 ohne die Kategorie klappt soweit. Nach dem Hochladen mache ich den Import zur Zeit so, wobei ich vorher noch die ersten beiden Zeilen der Datei lösche, die die Überschriften und eine Beispielzeile enthält (ich vermute, dass man das auch eleganter machen kann, aber es funktioniert):

PHP-Code:
$str_ziel "/home/bokbyen.no/public_html/dokument/".$_FILES['thefile']['name'];

// Zugriffsrechte anpassen
chmod($str_ziel0777);

# erste Zeile (Ueberschriften) der csv-datei loeschen
$d file($str_ziel); 
unset(
$d[0]); 
$neu implode(""$d); 
$open fopen($str_ziel"w+"); 
fwrite($open$neu); 
fclose($open);  

# zweite Zeile der csv-datei loeschen
$d file($str_ziel); 
unset(
$d[0]); 
$neu implode(""$d); 
$open fopen($str_ziel"w+"); 
fwrite($open$neu); 
fclose($open);  

$sql "LOAD DATA LOCAL INFILE '$str_ziel' IGNORE INTO TABLE bokliste
FIELDS TERMINATED BY ';' "
;

if(
mysql_query($sql)) {
echo(
"<p><b>Data blei importert i databasen.</b></p>");
}

else {
echo(
"<p>Det oppstod ein feil under import av csv-data. Pr&oslash;v ein gong til.<br />".

       
"Feil: " mysql_error() . "</p>");

Doch mit dem zusätzlichen Kategoriefeld müsen die Daten ja erst irgendwie getrennt und dann in zwei verschiedene Tabellen importiert werden. Und hier weiss ich nicht genau, wie man am besten vorgehen sollte.

Ich habe irgendwo gelesen, dass man die Daten einer csv-Datei zeilenweise auslesen lassen und sie dann in einem Array speichern kann (wobei ich nicht weiss, wie man das macht), dann folgt der Import. Könnte man im Zuge einer solchen Vorgehensweise die Daten aus der csv-Datei auch trennen und zwei verschiedene Arrays erstellen, die dann jeweils in Tabelle 1 und 2 eingelesen werden? Falls ja, wie macht man das?
Oder gibt es noch eine einfachere Lösung für das Problem?

Wäre dankbar für Tips!

Beste Grüße
Sputnik
Mit Zitat antworten