csv datei auslesen und speichern

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • csv datei auslesen und speichern

    Hallo Leute,

    ich habe volgendes Problem!

    ich habe eine csv Datei die so aufgebaut ist:

    A B C D E F G H I

    1 123 eee fds jad kzt aha bdy goi hed

    2 123 eee fds jad kzt aha bdy goi hed

    3 123 eee fds jad kzt aha bdy goi hed

    4 123 eee fds jad kzt aha bdy goi hed

    Also abcd... sind halt die spalten und 1234.... sind die zeilen.
    In jeder Spalte steht was.


    Meine SQL ist so aufgebaut:

    --
    -- Tabellenstruktur für Tabelle `artikel`
    --

    CREATE TABLE `artikel` (
    `artikelnr` varchar(10) collate latin1_german2_ci NOT NULL,
    `artikel` varchar(60) collate latin1_german2_ci NOT NULL,
    `hersteller` varchar(30) collate latin1_german2_ci NOT NULL,
    `herstellernr` varchar(60) collate latin1_german2_ci NOT NULL,
    `eancode` varchar(30) collate latin1_german2_ci NOT NULL,
    `warengruppe` varchar(30) collate latin1_german2_ci NOT NULL,
    `netto` varchar(20) collate latin1_german2_ci NOT NULL,
    `status` varchar(20) collate latin1_german2_ci NOT NULL,
    `beschreibung` varchar(500) collate latin1_german2_ci NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;

    --
    -- Daten für Tabelle `artikel`
    --

    Spalte A soll in artikelnr gespeichert werden
    Spalte B in artikel
    usw.
    Ein datensatz steht in einer Zeile, D.H. die PHP soll jede
    Zeile als einen Datensatz in die Datenbank abspeichern.

    Hier mein PHP versuch:

    So wird die csv zwar angezeigt aber nicht gespeichert.

    PHP-Code:
    <?php
    include ("vars.php"); 

    //liest dir deine datei in ein array "Funst glaube ich richtig"
    $array file('artikel.csv'); 

    //Array zeilenweise abarbeiten. "Geht"
    foreach($array as $row

     
    $fields=explode(';',$row); //teilt dir deine reihe in spalten auf - trenner =; 

    // ab in die datenbank ? "hier komme ich nicht weiter"
    $aendern "UPDATE artikel Set 1= '$artikelnr[0]', 2= '$artikel[1]', 3 
     '
    $fields[1]' WHERE art = '$fields[2]'\n"
    $update mysql_query($aendern); 


    //giebt aus... "Aber stimmt irgendwie noch nicht ganz"
     
    echo "<b><br>erstes feld: ".$fields."<br></b>"
     
    print_r($fields); 

      }  
    ?>
    Habe schon alles mögliche ausprobiert, funst aber alles leider nicht.
    Was mache ich falsch und wie kann ich diesen text oprimieren?

    Ich bin ratlos, daher bitte ich Euch um hilfe.

  • #2
    Hi,

    du möchtest das mysql BULK INSERT feature benutzen.

    PHP-Code:
    $file_name 'path/to/file.csv';
    $table_name 'artikel';
    $query "LOAD DATA INFILE {$file_name} INTO TABLE {$table_name}
      FIELDS TERMINATED BY ' '  LINES TERMINATED BY '\n'"
    ;

    mysql_query($query,$db) or die('OHA!');

    // usw. 

    Mehr kann man da nicht optimieren.

    greets

    //EDIT: den feldterminator auf dein format angepasst
    Zuletzt geändert von closure; 31.08.2006, 09:31.
    (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

    Kommentar


    • #3
      Also das sieht mir nach Humbug aus
      PHP-Code:
      $aendern "UPDATE artikel Set 1= '$artikelnr[0]', 2= '$artikel[1]', 3 
       '
      $fields[1]' WHERE art = '$fields[2]'\n"
      Du hast gar keine Felder mit Namen 1 oder 2 in artikel (zumindest nach deinem Post zu urteilen). Woher kommen denn die Vars $artikelnr und $artikel ?
      Mach mal
      PHP-Code:
      $update mysql_query($aendern) OR die(mysql_error().'<br />'.$aendern); 
      Sollte dir ein paar Fehlermeldungen um die Ohren werfen

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Original geschrieben von jahlives
        Also das sieht mir nach Humbug aus
        PHP-Code:
        $aendern "UPDATE artikel Set 1= '$artikelnr[0]', 2= '$artikel[1]', 3 
         '
        $fields[1]' WHERE art = '$fields[2]'\n"
        Du hast gar keine Felder mit Namen 1 oder 2 in artikel (zumindest nach deinem Post zu urteilen). Woher kommen denn die Vars $artikelnr und $artikel ?
        Mach mal
        PHP-Code:
        $update mysql_query($aendern) OR die(mysql_error().'<br />'.$aendern); 
        Sollte dir ein paar Fehlermeldungen um die Ohren werfen

        Gruss

        tobi
        Jo jetzt zeigt er mir im Explorer dieses hier an:

        Unknown column 'art' in 'where clause'
        UPDATE artikel Set artikelnr= '10047', artikel= 'Organizer ASUS ZUB Autoladegerät A636/A632', hersteller = 'ASUS' WHERE art = 'ASUS'

        Aber er schreibt es nicht in die db.

        code:
        PHP-Code:
        <?php
        include ("vars.php"); 

        //liest dir deine datei in ein array 
        $array file('artikel.csv'); 

        //Array zeilenweise abarbeiten. 
        foreach($array as $row

         
        $fields=explode(';',$row); //teilt dir deine reihe in spalten auf - trenner =; 

        // ab in die datenbank 
        $aendern "UPDATE artikel Set artikelnr= '$fields[0]', artikel= '$fields[1]',
        hersteller = '
        $fields[2]' WHERE art = '$fields[2]'\n"
        $update mysql_query($aendern) OR die(mysql_error().'<br />'.$aendern);

        //machwas... 
        // echo "<b><br>erstes feld: ".$fields."<br></b>"; 
         
        print_r($fields); 

          }  
        ?>
        Ja bei Hamburg.... :-)

        Kommentar


        • #5
          Deine CSV-Datei scheint ja mit TAB getrennt zu sein.
          Wieso steht denn dort
          PHP-Code:
          $fields=explode(';',$row); 
          anstatt
          PHP-Code:
          $fields=explode("\t",$row); 
          ?

          Alternativ für einmalige / seltene Imports kann man aber auch DB-Verwaltungs-Software - wie Navicat (Kommerziel) oder Aqua Data Studio (frei bei nichtkommerziellem Einsatz) - verwenden.
          Ich habe insbesondere mit sehr großen Dateien (die größte war ca. 500 MB) sehr gute Erfahrungen mit letzterer Software.

          Kommentar


          • #6
            Unknown column 'art' in 'where clause'
            Was verstehst du an dieser Fehlermeldung nicht ? Suche mal nach der Spalte art in deiner Tabelle. Findest du diese ?

            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Original geschrieben von jahlives
              Was verstehst du an dieser Fehlermeldung nicht ? Suche mal nach der Spalte art in deiner Tabelle. Findest du diese ?

              Gruss

              tobi
              Nein, die tabelle giebt es nicht! Habe ich auch schon geändert!
              art is wech!

              PHP-Code:
              <?php
              include ("vars.php"); 

              //liest dir deine datei in ein array 
              $array file('artikel.csv'); 

              //Array zeilenweise abarbeiten. 
              foreach($array as $row

               
              $fields=explode("\t",$row); //teilt dir deine reihe in spalten auf - trenner =; 

              // ab in die datenbank 
              $aendern "UPDATE artikel Set artikelnr= '$fields[0]', artikel= '$fields[1]',
              hersteller = '
              $fields[2]' WHERE artikelnr = '$fields[0]'\n"
              $update mysql_query($aendern) OR die(mysql_error().'<br />'.$aendern);

              //machwas... 
              // echo "<b><br>erstes feld: ".$fields."<br></b>"; 
               
              print_r($fields); 

                }  
              ?>
              Habs jetzt so umgeändert aber er speichert immer noch nicht!
              Ich werde wahnsinnig. Hmmm

              Kommentar


              • #8
                Keine Fehlermeldungen mehr ?
                Was ergibt ein var_dump($fields) ?
                Ach ja und du hast doch bestimmt
                PHP-Code:
                error_reporting(E_ALL); 
                am Anfang deines Scriptes so wie's in unseren Regeln steht ?

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  Hör auf mit so "Fehlermeldungen" wie
                  er speichert immer noch nicht!
                  Damit kann man nicht arbeiten!

                  Poste Queries, Fehlermeldungen, etc. Error_reporting? (warum frag ich eigentlich immer wieder?)

                  Kommentar


                  • #10
                    OffTopic:
                    Leute, es war doch schon Zeitverschwendung, sich mit dieser Person zu beschäftigen, als sie sich noch adeno4you nannte ...
                    Auch da konnte man dutzende Male sagen, E_ALL benutzen, vernünftige Problembeschreibungen liefern, etc. - und im nächsten Thread ging dann wieder alles von vorne los.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Original geschrieben von TobiaZ
                      Hör auf mit so "Fehlermeldungen" wie Damit kann man nicht arbeiten!

                      Poste Queries, Fehlermeldungen, etc. Error_reporting? (warum frag ich eigentlich immer wieder?)
                      Ok ok,
                      werd ich mahen.

                      Aber das speichern is halt mein problem!

                      Werd es mal ganz umschreiben!
                      Mal sehen was er mir ausgiebt

                      Kommentar


                      • #12
                        Original geschrieben von wahsaga
                        OffTopic:
                        Leute, es war doch schon Zeitverschwendung, sich mit dieser Person zu beschäftigen, als sie sich noch adeno4you nannte ...
                        Auch da konnte man dutzende Male sagen, E_ALL benutzen, vernünftige Problembeschreibungen liefern, etc. - und im nächsten Thread ging dann wieder alles von vorne los.
                        Was soll das denn jetzt schon wieder?

                        Ich bin nicht all4you und werde es auch nie sein!
                        Verstehst Du das nicht ?
                        Ich und all4you "den Du ja gesperrt hast weil keine Ahnung"
                        sind zwei verschiedene Persohnen die sich unter dem Nahmen unseres Chefs angemeldet haben weil er es so wollte!
                        OK?

                        Also ich bin ich "PHPMÄNSCHEN" und "ALL4YOU" ist
                        ein Kolege!

                        Kommentar


                        • #13
                          Original geschrieben von phpmännchen
                          Also ich bin ich "PHPMÄNSCHEN" und "ALL4YOU" ist
                          ein Kolege!
                          Wie auch immer - trotzdem absolut eine Liga.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Original geschrieben von wahsaga
                            Wie auch immer - trotzdem absolut eine Liga.
                            Was hast Du eigentlich gegen mich oder all4you?
                            Das verstehe wer will. Deine willkühr all4you und
                            jetzt auch mir steine in den weg zu legen ist echt
                            nicht fair. Ich bin Anfänger und vergesse ab und dann mal
                            was, was ist denn so schlimm mich einfach darauf
                            hinzuweisen? Andere machen das auch und wie man sehen kann setzte ich es auch um. Nein Du schreibst immer solche äusserungen
                            wie oben und hast eigentlich doch keinen grund dazu!

                            Aber egal Du bist so wie Du bist!

                            Kommentar


                            • #15
                              Original geschrieben von phpmännchen
                              Ich bin Anfänger und vergesse ab und dann mal
                              was, was ist denn so schlimm mich einfach darauf
                              hinzuweisen?
                              Warum muss man dich immer wieder auf das gleiche hinweisen?

                              Wenn du ein Gedächtnis wie ein Sieb hast - dann schreib dir die wichtigen Punkte halt irgendwo auf.
                              Oder lies die Regeln des Forums, vor jedem neuen Posting, welches du machst.
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X