import von "anspruchsvollen" csv dateien über php zur datenbank

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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ß

  • #2
    Wohin willst du die Datei denn einlesen? In mySQL?

    Kommentar


    • #3
      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 ;-)
      h.a.n.d.
      Schmalle

      http://impressed.by
      http://blog.schmalenberger.it



      Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
      ... nur ohne :-)

      Kommentar


      • #4
        Warum willst du das unbedingt mit PHP machen?

        Datenbanken: MySQL - Wie kann ich eine CSV-Datei in MySQL importieren?

        Kommentar


        • #5
          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ß

          Kommentar


          • #6
            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.

            Kommentar


            • #7
              Zitat von Obssesion Beitrag anzeigen
              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.

              Kommentar


              • #8
                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ß

                Kommentar


                • #9
                  Zitat von Obssesion Beitrag anzeigen
                  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.

                  Kommentar


                  • #10
                    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ß

                    Kommentar


                    • #11
                      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.
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        Zitat von Obssesion Beitrag anzeigen
                        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...

                        Kommentar


                        • #13
                          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ß

                          Kommentar


                          • #14
                            Warum verwendest du nicht PHP: fgetcsv - Manual ?

                            Kommentar


                            • #15
                              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($handle1000";")) !== 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

                              Kommentar

                              Lädt...
                              X