CSV Daten auslesen (PHP) und dann in MySQL speichern

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

  • CSV Daten auslesen (PHP) und dann in MySQL speichern

    Hallo,

    ich versuche schon die ganze Zeit eine CSV Datei in meine MySQL DB einzubetten. Dies möchte ich mit php verwirklichen. Mit " LOAD DATA (LOCAL) INFILE" kann ich immer nur die gesamte CSV Datei importieren, dabei möchte ich bis zu einem bestimmten Codewort den Import ausführen.

    Jetzt versuche ich es mit fgetcsv, habe aber Probleme die Daten mit den INSERT INTO Befehlen genau zuzuordnen. Denn immerhin ändert sich ja immer das Datum und der VALUE:

    PHP-Code:
    /* Inhalt der statistik.csv
    01.08.2001#62.159.232.250#www.selfphp3.de
    02.08.2001#212.82.34.222#www.selfphp4.de
    02.08.2001#http://suchen.abacho.de#62.159.232.250
    03.08.2001#http://www.fireball.de#212.185.44.15
    */

    $row 1;                                      // Anzahl der Arrays
    $handle fopen ("statistik.csv","r");              // Datei zum Lesen öffnen
    while ( ($data fgetcsv ($handle1000"#")) !== FALSE ) { // Daten werden aus der Datei
                                                   // in ein Array $data gelesen
        
    $num count ($data);                      // Felder im Array $data
                                                   // werden gezählt
        
        
    $row++;                                    // Anzahl der Arrays wird 
            
    for ($c=0$c $num$c++) {              // FOR-Schleife, um Felder 
            
    print $data[$c] . "<br>\n";            // des Arrays auszugeben
            
    $sql="INSERT INTO tbl_basis (datum) VALUES ('$data[$c]')";
        }
            
      
    }
    fclose ($handle); 
    Ich denke, ich mache einen groben Fehler bei der Aufsplittung der csv daten.

    P.S. ich habe den Code aus dem Netz und versuche damit zu verstehen, wie csv2SQL funktioniert. Bei dem Beispiel ist nur die Ausgabe in php angedacht und kein Import nach SQL

  • #2
    Die for-Schleife ist vermutlich unsinnig, denn damit würdest du ja für jede Spalte aus der CSV-Datei ein neues INSERT-Statement machen - aber eigentlich willst du doch wohl die Daten aus einer Zeile auch als einen Datensatz einfügen, oder?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      ja, sorry..hab dabei die hälfte vergessen, bzw. weggelassen.

      PHP-Code:
      $sql="INSERT INTO tbl_basis (datum,ip,url) VALUES ('$data[$c]'...)"
      Denn da fängt das Problem auch schon wieder an..wie kann ich einzeln auf die Arrays zugreifen

      Kommentar


      • #4
        Das sind Grundlagen - schau ins Handbuch, oder lies ein Tutorial.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Zitat von wahsaga Beitrag anzeigen
          Das sind Grundlagen - schau ins Handbuch, oder lies ein Tutorial.
          eiskalt abgeschmettert. Da traut sich wohl keiner mehr nen Tipp zu lassen. schade.
          Ich bin auch eher davon ausgegangen, dass ich mit Explode die Werte aus der csv "zerstückeln" müsste und so einfacher an die Arrays komme.
          Zuletzt geändert von argonsputter; 10.09.2010, 21:49.

          Kommentar


          • #6
            Zitat von argonsputter Beitrag anzeigen
            eiskalt abgeschmettert.
            Nein - ganz normal darauf hingewiesen, dass du dich ein wenig mit den Grundlagen beschäftigen musst, wenn du sowas umsetzen willst.

            Ich bin auch eher davon ausgegangen, dass ich mit Explode die Werte aus der csv "zerstückeln" müsste und so einfacher an die Arrays komme.
            Unfug, fgetcsv liefert dir doch bereits ein Array, das für jede Spalte eines Datensatzes ein Element enthält.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Zitat von wahsaga Beitrag anzeigen
              Die for-Schleife ist vermutlich unsinnig, denn damit würdest du ja für jede Spalte aus der CSV-Datei ein neues INSERT-Statement machen - aber eigentlich willst du doch wohl die Daten aus einer Zeile auch als einen Datensatz einfügen, oder?
              Richtig, aber ich muss die Arrays in der For-Schleife hochzählen, um diese im Sql String zu verarbeiten...oder muss ich dies ganz manuell hochzählen?

              PHP-Code:
                    $sql="INSERT INTO tbl_basis (datum,ip) VALUES ('$data[0]', '$data[1]')";
                  
              $sqlinsert=mysql_query($sql); 
              ich meine so funktioniert es, aber was, wenn die arrays unterschiedlich lang sind? zB. eine Zeile geht bis $data[33] und die andere bis $data[99] ?
              Zuletzt geändert von argonsputter; 11.09.2010, 10:13.

              Kommentar


              • #8
                Dann ist die CSV-Datei kaputt. Eine Zeile sollte immer gleich viel Werte haben.

                Kommentar


                • #9
                  Zitat von h3ll Beitrag anzeigen
                  Dann ist die CSV-Datei kaputt. Eine Zeile sollte immer gleich viel Werte haben.
                  ah, ok. Ich bin vom Worst Case ausgegangen.

                  Ferner habe ich noch eine Frage zu dem Auslesen der CSV. Ich möchte die Daten bis zu einem bestimmten Wert eintragen lassen. Klappt auch soweit mit:

                  PHP-Code:
                  /* Inhalt der statistik.csv
                  01.08.2001#62.159.232.250#www.selfphp3.de
                  02.08.2001#212.82.34.222#www.selfphp4.de
                  Stop#Stop#Stop
                  02.08.2001#http://suchen.abacho.de#62.159.232.250
                  03.08.2001#http://www.fireball.de#212.185.44.15
                  */ 



                  if ($data[0]!= 'stop')
                      {
                      
                  $sql="INSERT INTO tbl_basis (datum,ip) VALUES ('$data[0]', '$data[1]')";
                      
                  $sqlinsert=mysql_query($sql);
                      }
                      else {
                          echo 
                  "stop gefunden!!"//zum Debuggen
                          
                  echo $data[0];
                          break;
                      } 
                  Der Sinn dabei ist, alle Daten nach diesem "Stop" Eintrag in eine andere Tabelle einzutragen. Müsste ich nicht nochmal eine while schleife starten, die eine geändert if abfrage hat..

                  PHP-Code:
                  if ($data[0]== 'stop')
                  {
                  $sql="INSERT INTO tbl_basis_2 (datum,ip) VALUES ('$data[0]', '$data[1]')";

                  Was meint ihr dazu? Schmutzige Lösung?

                  Kommentar


                  • #10
                    Das wars natürlich nicht hier meine Verbesserung...

                    Ich fange also die $row in der "Stop" Zeile ab, speichere diese und starte eine neue While Schleife mit der csv Datei, um direkt auf diese $row zu kommen. Dann erfolgen die Einträge in eine andere Tabelle.

                    Hab extra nicht die Edit Funktion benutzt, damit die Änderung deutlich wird.

                    Bitte um Meinungen zu dem Code, ob es so "logisch" ist. Danke

                    PHP-Code:
                    $row 1;                                     
                    $handle fopen ("statistik.csv","r");              
                    while ( (
                    $data fgetcsv ($handle1000"#")) !== FALSE ) { // Daten werden aus der Datei
                                                                  
                        
                    $num count ($data);                     
                                                                   
                        
                        
                    $row++;                                    
                       
                        
                        echo 
                    "<br>";
                        
                          if (
                    $data[0]!= 'stop')
                        {
                        
                    $sql="INSERT INTO tbl_basis (datum,ip) VALUES ('$data[0]', '$data[1]')";
                        
                    $sqlinsert=mysql_query($sql);
                        
                        }
                        else {
                            
                            echo 
                    "Stop gefunden in Zeile:"$row "<BR>";
                            
                    $row=$stopgefundenrow;
                            
                    $stop_gefunden=1;
                            break;
                            }


                     
                    //while 

                    if ($stop_gefunden==1)
                    {
                        while ( (
                    $data fgetcsv ($handle1000"#")) !== FALSE ) { 
                                                                   
                        
                    $num count ($data);                      
                        
                    $row++;        
                        If (
                    $row<$stopgefundenrow)
                            {continue;
                            }
                            
                    $sql_stop="INSERT INTO tbl_basis_2 (datum,ip) VALUES ('$data[0]', '$data[1]')";
                            
                    $sqlinsert=mysql_query($sql_stop);
                            echo 
                    "<BR>";
                        }
                        



                    fclose ($handle); 

                    Kommentar


                    • #11
                      Ich kann mir beim besten Willen nicht vorstellen, wozu das "Stopp Gedöns" gut sein soll!
                      Auf mich macht es den Eindruck eines gruseligen Normalisierungsfehlers.
                      Wir werden alle sterben

                      Kommentar


                      • #12
                        Zitat von combie Beitrag anzeigen
                        Ich kann mir beim besten Willen nicht vorstellen, wozu das "Stopp Gedöns" gut sein soll!
                        Auf mich macht es den Eindruck eines gruseligen Normalisierungsfehlers.
                        Nunja, in meiner CSV Datei kommt nach ca. 200 Zeilen ein bestimmter Eintrag (Codewort:Stop) und ab diesen Eintrag sollen alle folgenden Zeilen in eine andere Tabelle geschrieben werden.

                        Kommentar


                        • #13
                          1. ist es dann keine CSV Datei mehr
                          2. habe ich dich sehr wohl verstanden
                          3. Wozu soll das gut sein?
                          4. halte ich es für einen gruseligen Normalisierungsfehler
                          Wir werden alle sterben

                          Kommentar

                          Lädt...
                          X