Csv Import script Mysql

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

  • Csv Import script Mysql

    Hallo,

    Ich habe ein Problem. Ich habe ein angefangenes Script, mit dem ich nicht weiter komme.

    PHP-Code:
    <?php
      $con 
    mysqli_connect("xxxxxxxxx");

      
    // Check connection
      
    if (mysqli_connect_errno())
        die(
    "Failed to connect to MySQL: " mysqli_connect_error());
      
       
    $row 0
       
       if ((
    $handle fopen("ftp://user:password@example.com/...csv""r")) !== FALSE
       { 
          while ((
    $data fgetcsv($handle1000";" '"' )) !== FALSE)
          {
              
    $row++;
              
              
    // Erste Zeile überspringen
              
    if ($row == 1)
                continue;

    if(
    $data[1] == No) {0;}
    Elseif(
    $data[1] == Yes) {3;}
             
              
    $query "Update 
                          `s_articles_details`
                        set
                          `instock`='" 
    $data[1] . "'
                        where
                          `ordernumber`='" 
    mysqli_real_escape_string($con$data[0]) . "'";
                        
           
              
    mysqli_query($con$query)
                or die (
    "MySQL-Error: " mysqli_error($con));
          }
       }
       
       
    fclose($handle); 
       
    mysqli_close($con);
    ?>
    Und zwar soll aus der eingelesenen CSV Datei ein Wert geändert werden.
    Sprich in der CSV Datei Spalte 2 steht für den Bestand Yes oder No.
    Und dementsprechend soll vor dem DB Import das Yes in die Zahl 3 umgewandelt werden und das No in die Zahl 0.
    Leider weiß ich nicht wirklich, wie ich das genau hinbekomme. Habe es mit der If elseif probiert, aber ohne Erfolg.
    Vielleicht findet sich ja jemand, der mit ein paar Tips geben kann.
    Vielen Dank

  • #2
    Zitat von Stifticus Beitrag anzeigen
    Hallo,

    PHP-Code:
    if($data[1] == No) {$data[1] = 0;}
    Elseif(
    $data[1] == Yes) {$data[1] = 3;} 
    So vielleicht?

    Kommentar


    • #3
      Perfekt, das hat gefehlt. Vielen Dank.

      Noch eine Frage. Was müsste ich ändern und eine csv Datei mit diversen Spalten zu importieren und ein update. Sprich reiner import

      Kommentar


      • #4
        Du importierst doch schon eine CSV-Datei. Daher verstehe ich deine Frage nicht

        Kommentar


        • #5
          Das schon. Es soll ein weiter script werden um eine CSV Datei komplett einzulesen. Sprich neue Datensätze in einer bestehenden Datenbank sollen eingepflegt werden.
          Dafür muss ich doch sicher was für jede Spalte der CSV Datei definieren, damit diese richtig in der Datenbank angelegt wird. Oder sehe ich das falsch?

          Sprich Spalte 1 = Ordernumber in der Datenbank
          usw.

          Da müsste doch dann der Update $query weg?
          Zuletzt geändert von Stifticus; 28.06.2014, 09:54.

          Kommentar


          • #6
            [FONT=Arial]Googlesuche fgetcsv

            Dann haste ein ARRAY, kannst die Bezeichner angeben und dann in eine DB Importieren mit Insert, wobei die Bezeichner des Array,s mit denen der DB übereinstimmen müssen.


            Aber scheinbar hast du da ein Script vorgefunden und weis nicht was du damit GENAU anstellen sollst [COLOR=#000000][COLOR=#0000CC][/COLOR][COLOR=#006600][/COLOR][/COLOR]
            [/FONT]

            Kommentar


            • #7
              Das script, was ich oben gepostet habe ist mir klar. Dort wird die Artikelnummer abgeglichen mit der DB und dann ein Wert für den Bestand geschrieben.

              Nur wir ich das mit der Zuweisung der einzelnen Spalten hinbekomme, weiß ich nicht.
              Es soll ja kein update sein, wie oben.

              Kommentar


              • #8
                INSERT !!!! ist der Befehl.

                Schrieb ich doch

                Kommentar


                • #9
                  So, habe mal gesucht und gelesen.

                  Wäre der Ansatz so richtig?
                  PHP-Code:
                  PHP-Code:
                        
                  $sql="INSERT INTO tabellexy (bestand,Ordernumber) VALUES ('$data[0]', '$data[1]')";
                      
                  $sqlinsert=mysql_query($sql); 

                  Kommentar


                  • #10
                    Zitat von Stifticus Beitrag anzeigen
                    So, habe mal gesucht und gelesen.

                    Wäre der Ansatz so richtig?
                    Probier es doch aus. Ansonsten lese mal ein Tutorial über MYSQL Befehle

                    Kommentar


                    • #11
                      Zum ersten würde ich mir mal angewöhnen PDO oder MySQLi verwenden.

                      Anstatt jede Zeile aus der Datei mit einem insert einzufügen, würde ich load data . . . benutzen. -> MySQL :: MySQL 5.1 Referenzhandbuch :: 13.2.5 LOAD DATA INFILE

                      Beispiel:

                      Eine Tabelle mit den Feldern id, vorname, nachname, telefon, ort, abteilung.

                      Eine CSV-Datei personen.csv, die importiert werden soll, ohne Spaltenüberschrift:

                      Otto;Waalkes;012345;Emden;Komik
                      Joachim;Kroel;098765;Frankfurt;Krimi
                      Karl;May;34567;Dresden;Abenteuer

                      In der CSV-Datei fehlt die Spalte ID. Warum? Die ID ist in der Tabelle als primary key, auto_increment definiert und wird daher automatisch eingetragen und hochgezählt.

                      Das Script zum Import:
                      PHP-Code:
                      <?php
                      error_reporting 
                      (E_ALL); 
                      ini_set ('display_errors'true);
                      $conn = new PDO("mysql:host=localhost;dbname=test""guenni""guenni");
                      /*
                      * Syntax der Anweisung Load Data
                      *
                      LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
                          [REPLACE | IGNORE]
                          INTO TABLE tbl_name
                          [FIELDS
                              [TERMINATED BY 'string']
                              [[OPTIONALLY] ENCLOSED BY 'char']
                              [ESCAPED BY 'char']
                          ]
                          [LINES
                              [STARTING BY 'string']
                              [TERMINATED BY 'string']
                          ]
                          [IGNORE number LINES]
                          [(col_name_or_user_var,...)]
                          [SET col_name = expr,...)]
                       */
                      $query "load data local infile 'personen.csv' into table test.tabelle52 fields terminated by ';'
                                lines terminated by '\n' (vorname, nachname, telefon, ort, abteilung)"
                      ;
                       
                      $stmt $conn->prepare($query);
                      $result $stmt->execute();
                      if(
                      $result === false){
                       echo 
                      "<pre>";
                       
                      print_r($query->errorInfo());
                       echo 
                      "</pre>";
                      }else{
                                echo 
                      "Die Datei wurde importiert.";
                               }
                      ?>
                      Gruß
                      Günni
                      Zuletzt geändert von Guenni61; 29.06.2014, 10:34.

                      Kommentar


                      • #12
                        Das wird mit so, glaube ich nichts bringen, da ich ja mit load data infile nicht die Datßei vom FTP holen kann, oder sehe ich das falsch. Das muss ich doch dann über fgetcsv machen?
                        Und was ist, wenn eine Spalte in der CSV nicht Vorhand ist, aber in der DB?

                        Kommentar


                        • #13
                          Zitat von Stifticus Beitrag anzeigen
                          Das wird mit so, glaube ich nichts bringen, da ich ja mit load data infile nicht die Datßei vom FTP holen kann, oder sehe ich das falsch. Das muss ich doch dann über
                          fgetcsv machen?
                          Und was ist, wenn eine Spalte in der CSV nicht Vorhand ist, aber in der DB?
                          Hi Stifticus,

                          du musst jetzt hier nicht nach jedem Post neue Anforderungen stellen, die "dein Script" erfüllen soll.

                          Wenn du wissen willst, ob du mit Load Data . . . Dateien via FTP importieren kannst, dann versuch es doch einfach selber mal.

                          Wenn eine Spalte in der CSV nicht vorhanden ist, aber in der DB? Probiers aus, was passiert.

                          Ein "bischen" Eigeninitiative kann man ja wohl erwarten.

                          Kommentar

                          Lädt...
                          X