| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

18-05-2009, 06:20
|
|
Obssesion
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 6
|
|
import von "anspruchsvollen" csv dateien über php zur datenbank
Hallo ,
ich versuche schon etwas länger eine etwas anspruchsvoller aufgebaut csv datei über php einzulesen, und dann bestimme spalten (komplette spalten) in der datenbank zu speichern.
die csv datei sieht so aus :
protokollnummer;Mitgliedsname;Name des K‰ufers;Telefonnummer;E-Mail-Adresse;Adresse 1;Adresse 2;Ort;Region;PLZ
3232;xxxx;xxxx;xxxx;xxxx;xxxx;;xxxx;;xxxx
4343;xxxx;xxxx;xxxx;xxxx;xxxx;;xxxx;;xxxx
1; Verkaufsprotokoll(e) heruntergeladen;von ;12.05.09;20:42:14; bis ;12.05.09;20:42:14;;
Mitgliedsname des Verk‰ufers: xxxxsdsd@xxx.de;;;;;;;;;
d.h es ist eine kopf und fußzeile vorhanden . Diese müssen irgendwie übersprungen werden.
Desweiteren sind oft leere Felder vorhanden , die dementsprechend auch in der Datenbank dann leer sein sollten.
Mal sind es auch mehr einträge, mal weniger .
nun habe ich zb eine datenbank mit einer tabelle und den spalten "Mitgliedsname,Region,Ort" und möchte auch nur diese Spalten importieren.
Wie komplex ist sowas zu lösen ? ist fgetcsv der richtige Ansatz dafür ?
(bin bisher dran gescheitert, da dies mir für jedes einzelne Feld ein neuen Wert im Array ausgibt (also bräuchte ich irgendiwe pro spalte ein array, welches komplett in die Datenbank übertragen wird ? )
Ich hoffe ihr habt paar ideen oder lösungsvorschläge für mich . Eine komplett lösung erwarte ich nicht, bin aber noch leider was php angeht, nicht der hellste
Gruß
|

18-05-2009, 08:10
|
|
pekka
PHP Master
|
|
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
|
|
Wohin willst du die Datei denn einlesen? In mySQL?
|

18-05-2009, 13:54
|
 |
schmalle
  Ich Root, Du nix
|
|
Registriert seit: Jun 2001
Ort: Egelsbach FFM
Beiträge: 9.170
|
|
CSV einlesen mit file();
Array aufbauen mit den benötigten Spalten.
Schleife über file beginnend bei 1 und endend bei count(file)-1.
In der Schleife explode auf Zeile und array verwenden.
Nachdenken, machen, fertig ;-)
|

18-05-2009, 14:24
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
|

18-05-2009, 15:28
|
|
Obssesion
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 6
|
|
ja daten sollen in einer mysql datenbank gespeichert werden.
ich möchte sie über php einlesen, da ich keine idee habe, wie ich ohne bearbeiten der csv , diese über mysql direkt reinbekommen soll und außerdem soll es später mal über das front end direkt möglich sein, da es nicht nur von mir genutzt wird
@schmalle
deine idee klingt gut , ich muss das mal versuchen.
danke an alle für die hilfe, werde mich mal wieder ransetzen
gruß
|

18-05-2009, 15:32
|
|
pekka
PHP Master
|
|
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
|
|
Schau Dir mal mySQL-Frontends wie
http://www.heidisql.com/? (für WIndows, Details: http://www.heidisql.com/screenshots....mport_textfile)
und
phpMyAdmin an. Deren CSV-Importfunktionen können alles, was Du brauchst, bis auf das löschen der letzten ("Fuß"-)Zeile. Leere DAtensätze könntest Du mit einem DELETE FROM löschen. Ansonsten: Wenn es um eine Publikumstaugliche Version geht, dann ist selbst Programmieren wohl Mittel der Wahl.
|

18-05-2009, 15:32
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von Obssesion
da ich keine idee habe, wie ich ohne bearbeiten der csv , diese über mysql direkt reinbekommen soll
|
Ehmmm.. hast du den Link oben angeklickt? Da steht ganz genau beschrieben, wie es geht.
|

18-05-2009, 15:50
|
|
Obssesion
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 6
|
|
hallo,
ja das hab ich gelesen, es wäre eine möglichkeit, bloß müsste ich dann alles importieren, es immerhin nicht nur die paar spalten , sondern um die 30-40 die die gesamte csv datei beinhaltet
wie gesagt ,es muss ein front end haben, wo jeder der dies benutzt, die csv datei einfach über "durchsuchen" auswählen kann. die personen die es benutzen werden, haben noch nie im leben was von php,mysql gehört , daher muss es quasi alles fast selbsterklärend sein , oder nachdem ich es einmal erklärt habe.
gruß
|

18-05-2009, 15:52
|
|
pekka
PHP Master
|
|
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
|
|
Zitat:
Zitat von Obssesion
hallo,
ja das hab ich gelesen, es wäre eine möglichkeit, bloß müsste ich dann alles importieren, es immerhin nicht nur die paar spalten , sondern um die 30-40 die die gesamte csv datei beinhaltet
gruß
|
Nein müßtest du nicht. Lies halt mal genauer hin. Du kannst in den Importdialogen der von mir erwähnten Tools genau festlegen, ob und welche Spalten importiert werden sollen.
|

18-05-2009, 22:01
|
|
Obssesion
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 6
|
|
ja nur wie gesagt, es muss alles in einem front end sein, welches für personen die nicht den durchblick haben ,trotzdem leicht zu verstehen ist, ohne irgendwelche einstellungen zu ändern etc. dazu werden später noch ein paar weitere funktionen hinzukommen.
gruß
|

18-05-2009, 23:46
|
Abraxax
  THE REAL HAXE (Administrator)
|
|
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.621
|
|
Schaue mal ins Manual von MySQL :: MySQL 5.1 Reference Manual :: 12.2.6 LOAD DATA INFILE Syntax
Hier kannst du auch Header-Zeilen ignorieren und auch Daten beim Import "Bearbeiten". (SET)
Wenn ich dich richtig verstanden habe, löst das dein Problem.
|

19-05-2009, 08:38
|
|
pekka
PHP Master
|
|
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
|
|
Zitat:
Zitat von Obssesion
ja nur wie gesagt, es muss alles in einem front end sein, welches für personen die nicht den durchblick haben ,trotzdem leicht zu verstehen ist, ohne irgendwelche einstellungen zu ändern etc. dazu werden später noch ein paar weitere funktionen hinzukommen.
gruß
|
Wenn dir das HeidiSQL-Interface nicht einfach genug ist, wirst du wohl kaum umhin kommen das selbst zu programmieren...
|

19-05-2009, 19:06
|
|
Obssesion
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 6
|
|
so habe beretis den teil hier:
PHP-Code:
<?PHP include "config.php"; $table ="artikel"; $verbindung = @mysql_connect($host,$user,$password) or die ("Keine Verbindung möglich"); mysql_select_db($dbname, $verbindung) or die ("SQL-Fehler = ".mysql_error()); $csvFile = "test.csv"; $csvData = file($csvFile); foreach($csvData as $v){ $csvrowdata = explode(";",$v); $query = "insert into $table Values ('".$csvrowdata[0]."', '".$csvrowdata[1]."', '".$csvrowdata[2]."', '".$csvrowdata[4]."', '".$csvrowdata[5]."', '".$csvrowdata[6]."', '".$csvrowdata[3]."')"; mysql_query($query) or die(mysql_error()); } ?>
leider wird immer nur die erste zeile importiert  sollte ich nun damit nicht weiterkommen, werde ich mysql load data local infile benutzen , damit müsste es nun klappen. (habe es nun auch endlich zum ende durchgelesen , und gesehen das man auch nur bestimmte spalten importieren kann  )
gruß
|

19-05-2009, 19:23
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Warum verwendest du nicht PHP: fgetcsv - Manual ?
|

19-05-2009, 20:32
|
|
Obssesion
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 6
|
|
PHP-Code:
<?php include "config.php"; $verbindung = @mysql_connect($host,$user,$password) or die ("Keine Verbindung möglich"); mysql_select_db($dbname, $verbindung) or die ("SQL-Fehler = ".mysql_error()); $row = 1; $handle = fopen("test333.csv", "r"); while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { $query = "insert into artikel Values ('".$data[0]."', '".$data[1]."', '".$data[2]."', '".$data[3]."', '".$data[4]."', '".$data[5]."', '".$data[6]."')"; mysql_query($query) or die(mysql_error()); } fclose($handle); ?>
 bringt mich auch nicht weiter, da ich nicht weiss , wie ich es anstellen soll, das er mir nicht nur die zellen "0-6" in die datenbank hinzufügt, sondern auch alle anderen zeilen aus der csv datei.
gruß karol
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
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.
HTML-Code ist aus.
|
|
|
|
PHP News
|