SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Der CSS-Problemlöser

Der CSS-Problemlöser zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 13.08.2007, 11:09:05
sputnik72 sputnik72 ist offline
Anfänger
 
Registriert seit: Apr 2005
Alter: 47
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
  #2  
Alt 13.08.2007, 13:15:51
Raketenmann Raketenmann ist offline
Junior Member
 
Registriert seit: Jun 2004
Beiträge: 473
AW: Daten aus csv-Datei in zwei Tabellen speichern

Du kannst die csv-Datei mit der Funktion fgetcsv() Zeilenweise auslesen und die Spalten als Array erhalten.
Ansonsten Zeilen mit der Funktion fgets() auslesen und mit explode() die Spalten trennen.

Oder mit file() die ganze Datei einlesen und die Zeilen (Array!) mit explode() in eine zweite Array-Dimension oder ein Hilfsarray trennen.

Danach läuft eine Schleife durch das Array, die prüft ob das Buch der jeweiligen Zeile schon in der Tabelle 1 ist.
- Ja: UPDATE ... // oder auch kein Update, wie du willst
- Nein: INSERT ...

Weiter nimmt diese Schleife die Buch-ID (Bei einem Update "weißt" du die Buch-ID, bei einem Insert bekommst du sie über die Funktion mysql_insert_id(); ) und schreibt sie in die zweite Tabelle, zusammen mit der Kategorie Info aus deiner csv-Datei.

Die ersten beiden Zeilen kannst du bei dieser Art der Auswertung einfach überspringen, dafür muß nix in der Datei gelöscht werden.

Geändert von Raketenmann (13.08.2007 um 13:18:36 Uhr)
Mit Zitat antworten
  #3  
Alt 13.08.2007, 13:53:26
sputnik72 sputnik72 ist offline
Anfänger
 
Registriert seit: Apr 2005
Alter: 47
Beiträge: 121
AW: Daten aus csv-Datei in zwei Tabellen speichern

Hallo,
vielen Dank für die Lösungsansätze, das hilft mir erstmal weiter!
Könnte ich Dich gegebenfalls später nochmal mit Nachfragen behelligen?

Gruß Sputnik
Mit Zitat antworten
  #4  
Alt 13.08.2007, 14:06:46
Raketenmann Raketenmann ist offline
Junior Member
 
Registriert seit: Jun 2004
Beiträge: 473
AW: Daten aus csv-Datei in zwei Tabellen speichern

Zitat:
Zitat von sputnik72 Beitrag anzeigen
Könnte ich Dich gegebenfalls später nochmal mit Nachfragen behelligen?
...probiers aus! ;-)

Sonst antwortet aber bestimmt auch jemand anders.
Mit Zitat antworten
  #5  
Alt 13.08.2007, 14:55:40
sputnik72 sputnik72 ist offline
Anfänger
 
Registriert seit: Apr 2005
Alter: 47
Beiträge: 121
AW: Daten aus csv-Datei in zwei Tabellen speichern

Hallo!

Zitat:
Die ersten beiden Zeilen kannst du bei dieser Art der Auswertung einfach überspringen, dafür muß nix in der Datei gelöscht werden.
Wie überspringe ich denn die ersten beiden Zeilen? Ich gehe davon aus, dass das in der while-Schleife passieren muss.

PHP-Code:
$fp fopen($str_ziel,"r");
while(
$zeile fgetcsv($fp,500,";")){

  for(
$x=0;$x<count($zeile);$x++){
# hier wird spaeter getrennt
  
}  
  echo 
"--<br>";
}
fclose($fp); 
Gruß Sputnik
Mit Zitat antworten
  #6  
Alt 13.08.2007, 15:47:00
Raketenmann Raketenmann ist offline
Junior Member
 
Registriert seit: Jun 2004
Beiträge: 473
AW: Daten aus csv-Datei in zwei Tabellen speichern

Wenn du nicht weißt, was in den Zeilen steht, kannst du einen Zähler mitlaufen lassen. Sonst geht es auch mit einer Bedingung, die sich auf den Inhalt in Element [0,0] bzw. [1,0] bezieht.

Die Zählervariante, denn ich weiß nicht was drinsteht ;-)

PHP-Code:
$first_rows=0;

$fp fopen($str_ziel,"r"); 
while(
$zeile fgetcsv($fp,500,";")){ 

if(
$first_rows<2
   {
      
$first_rows++;
   }
else
   {
       for(
$x=0;$x<count($zeile);$x++){ 
       
// hier wird spaeter getrennt 

       // Bem. Raketenmann: Es wurde bereits getrennt, durch fgetcsv..
      // ...hier die Elemente der jeweiligen Spalte in der Db zuordnen

       
}   
       echo 
"--<br>"
    }

fclose($fp); 
Mit Zitat antworten
  #7  
Alt 13.08.2007, 17:12:15
sputnik72 sputnik72 ist offline
Anfänger
 
Registriert seit: Apr 2005
Alter: 47
Beiträge: 121
AW: Daten aus csv-Datei in zwei Tabellen speichern

Hallo Raketenmann,

ich habe es hinbekommen.
Vielen Dank für die Anregungen und die Hilfe!

Beste Grüße
Sputnik
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mit PHP daten aus MYSQL in eine XML speichern! ferryx PHP für Fortgeschrittene und Experten 3 14.03.2007 09:53:22
Daten platzsparend speichern CFJH MySQL/MySQLi 1 22.12.2006 14:45:03
Tabellen in *.txt datei nach Datum / ID sortieren? claud PHP Grundlagen 1 19.02.2006 14:34:40
Meta Daten aus Pdf Datei auslesen und in db speichern waiman PHP für Fortgeschrittene und Experten 0 03.06.2004 10:58:17
Personendaten in Datei auf Server speichern! Satherlor PHP Grundlagen 1 12.10.2003 20:55:20


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:37:04 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.


© 2001-2020 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt