csv import

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

  • csv import

    Würde gerne csv-files, die im Internet liegen automatisch mit Hilfe von PHP in mySQL importieren.
    Problem ist, dass die Daten pro Datensatz, aus mehrere csv-Dateien kommen und nicht nur aus einer:
    In der datenbank soll pro Datensatz "Datum", "Name" und "Menge" erscheinen. Als Quelle liegen jedoch zwei csv-Dateien vor;
    die eine mit "Datum" und "Name", die andere mit "Datum" und "Menge".
    D.h. es dürfte beim Import des zweiten files, die bereits importierten Daten nicht überschrieben werden und diese müßten auch noch an den richtigen Datensatz angehängt werden.
    Können die Dateien direkt im web ausgelesen werden oder müssen sie erst auf die Festplatte.

    Würde mich über ein paar tips freuen, danke im voraus
    Rolf

  • #2
    zuerst mit http://de3.php.net/manual/en/function.fgetcsv.php die dateien einlesen und dann mittels foreach durchlaufen und entsprechend erweitern.

    Kommentar


    • #3
      Ich habe ein paar Funktionen, die Dir helfen könnten:

      PHP-Code:
      <?php

      //export von tabellen aus mysql nach csv
      //$tablename -> Quelltabelle in Gilde
      //$filename -> Zieldatei (csv mit " als Begrenzer)
      function exporttable($tablename$filename)
      {
          
      //0. Admininfo
          
      echo "<b>exporttable($tablename$filename)</b><br>";
          
      //1. Tabelle auslesen
          
      echo "Öffnen der Tabelle $tablename...";
          
      $query="select * from $tablename";
          if (
      $trace==TRUE) {echo "q: $query <br>";}
          
      $result=mysql_query($query) or die(mysql_error());
          
      $rows=mysql_num_rows($result);
          
      $cols=mysql_num_fields($result);
          if (
      $trace==TRUE) {echo "rows : $rows cols: $cols <br>";}
          echo 
      "...done.<br>";

          
      //2. Feldnamen feststellen
          
      echo "Feststellen der $cols Feldnamen...";
          for(
      $x=0;$x<$cols;$x++)
          {
               
      $fieldname[$x]=mysql_field_name($result,$x); //feldnamen merken!
          
      }
          echo 
      "...done.<br>";

          
      //3. String Datei anlegen
          
      echo "String Datei $filename anlegen...";
          
      $stringdatei fopen("$filename","w");
          echo 
      "...done.<br>";

          
      //4. Werte wegschreiben
          
      echo "$rows Datensätze schreiben";
          
      //4.1 zuerst Hearde
          
      $row=implode("\",\"",$fieldname);
          
      $row="\"".$row."\"\r\n";
          
      fwrite($stringdatei,$row);
          
          
      //4.2 Daten schreiben
          //Array nur als textholen, sonst ist alle doppelt!!!
          
      while ($row mysql_fetch_array($result,MYSQL_ASSOC)) //alle Zeilen
          
      {
              
      $row=implode("\",\"",$row);
              
      $row="\"".$row."\"\r\n";
              
      fwrite($stringdatei,$row);
              echo 
      ".";
          }
          echo 
      "done.<br>";

          
      //5. sTRING     Datei schliessen
          
      echo "String Datei beenden...";
          
      fclose($stringdatei);
          echo 
      "...done.<br>";
          
          return 
      TRUE;
      }
      //------------------------------------------------------

      //import von tabellen von dbase in Mysql
      //$tablename -> Zieltabelle in Gilde
      //$filename -> Quelldatei (csv mit " als Begrenzer)
      //$mode -> drop -> leert Tabelle vorher, ID wird übernommen
      //         insert -> fügt Datensätze ein, ID muss stimmen! (not implemented!)
      //         upsert -> fügt ein oder macht update anhand von ID (not implemented!)
      function importtable($tablename$filename,$mode)
      {
          
      //0. Admininfo
          
      echo "<b>importtable($tablename$filename,$mode)</b><br>";

      /*    //lokale Funktion um die " von den Feldern zu entfernen
          function stripbegrenzer($feld)
          {   
              if ($trace==TRUE) {echo "stripbegrenzer: $feld ->";}
              $feld=str_replace("\"","",$feld);
              if ($trace==TRUE) {echo "$feld <br>";}
              return $feld;
          }
      */
          //lokale Funktion, um alle Recs einer Tabelle zu shreddern
          
      function droptalbe($tablename,$mode)
          {   
              if (
      $mode=="drop")
              {
                  echo 
      "Deleting all recs from $tablename (mode=drop)...";
                  
      $query="delete from $tablename";
                  if (
      $trace==TRUE) {echo "q: $query <br>";}
                  
      $result=mysql_query($query) or die(mysql_error());
                  echo 
      "...done.<br>";
                  return 
      TRUE;
              }
              return 
      FALSE;
          }

          
      //1. Quelldatei öffnen
          
      echo "Öffnen der Quelldatei $filename...";
          
      $stringdatei fopen("$filename","r");
          echo 
      "...done.<br>";

          
      //2. Feldnamen feststellen (Stehen in der ersten Zeile)
          
      echo "Feststellen der Feldnamen...";
               
      $fieldname=fgetcsv($stringdatei,99999,','); //feldnamen merken!
       //       array_walk($fieldname,"stripbegrenzer");
          
      echo "...done.<br>";


          
      //2b. Wenn drop, dann Tabelle löschen
          
      if ($mode=="drop")
          {
              
      droptalbe($tablename,$mode);//recs löschen
          
      }
          
          
      //3. Werte aus Datei einlesen
          
      echo "Werte einlesen und wegschreiben";
          while (
      $valueline=fgetcsv($stringdatei,99999,','))
          {
              echo 
      ".";
              
      //$fieldname=addslashes($fieldname); // " in \" umwandeln, wg. values
              //3b jeweils wegschreiben
              
      if (($mode=="drop") or ($mode="insert"))
              {
                      
      $fieldstr=$fieldname[0];
                      
      $valuestr="'".$valueline[0]."'";
                      for(
      $x=1;$x<count($fieldname);$x++) //query aufbauen
                      
      {
                          
      $fieldstr=$fieldstr.", ".$fieldname[$x]; //Komma und Feldname anhängen
                          
      $valuestr=$valuestr.", '".$valueline[$x]."'";
                          
      //if ($trace==TRUE) {echo "valuestr-x: $valuestr $x <br>";}
                      
      //endfor
                      //Query zusammenbauen
                      
      $query="insert into $tablename
                      (
      $fieldstr)
                      values
                      (
      $valuestr)";
                      if (
      $trace==TRUE) {echo "q: $query <br>";}
                      
      mysql_query($query) or die(mysql_error()); // go go go!
              
      //endif

              
      if ($mode=="upsert")
              {
                  echo 
      "ERROR: not implemented mode $mode";
              } 
      //endif
          
      //endwhile
          
      echo "done.<br>";

          return 
      TRUE;
      }
      //----------------------------------------------------------------

      //import von eine CSV-Datei in ein Array
      function importarray($filename)


          
      //0. Test ob Dateien da sind
          
      if (!file_exists($filename))
          {
              echo 
      "<br>(E) $filename nicht gefunden.<br>";
              global 
      $status;
              
      $status="System: (E) $filename nicht gefunden.<br>";
              return 
      FALSE;
          }
          if (
      $trace==TRUE) {echo "importarray($filename)<br>";}
          
      //1. Quelldatei öffnen
          
      $stringdatei fopen("$filename","r");

          
      //2. Feldnamen feststellen (Stehen in der ersten Zeile)
          
      $fieldnames=fgetcsv($stringdatei,99999,','); //feldnamen merken!
          
          //2.1 Anzahl Felder minus ID Feld (welches ist Feld 0)
          
      $num_cols=count($fieldnames)-1;

          
      //2.2 Prüfung: Ist Feld[0] wirklich id ist. (ist pflicht!!!)
          
      if ($fieldnames[0]!='id')
          {
              
      $status='DBA: (E) Beladung der Seeddata fehlgeschlagen.';
              echo 
      "(E) Beladung der Seeddata klappt nicht, da field[0]!='id' ($fieldnames[0]).<br>";
          }

          
      //3. Daten lesen und in Array schreiben
          
      while ($valueline=fgetcsv($stringdatei,99999,','))
          {
              
      //ID aus der Zeile auslesen
              
      $id=$valueline[0];

              
      //Wert nr. x bekommt
              
      $value[$id]=$valueline;
              if (
      $trace==TRUE)
              {
                  for(
      $y=0;$y<count($valueline);$y++)
                  {
                      echo 
      "$y:$valueline[$y]<br>";
                  }
              }

          }
          
          return 
      $value;
      }
      //----------------------------------------------------------------

      //import von eine CSV-Datei in ein Array
      //einen Datensatz mit der ID, wobei Type die bekannten
      //dateien sind
      function dba_GetCSVRec($type,$id)
      {
          if (
      $trace==TRUE) {echo "dba_GetCSVRec($type,$id)<br>";}
          
      $value=importarray("dba/$filename.csv");

          for (
      $x=1;$x==count($value);$x++)
          {
              if (
      $value[$x]==$id)
              {
                  return 
      $value[$x];
              } 
      //endif
          
      //endif
          
          
      return FALSE;
      }

      ?>

      Kommentar

      Lädt...
      X