Daten im-/exportieren

Um Daten in meine Datenbank zu bekommen oder diese in einem Format auszugeben, das ich auch zum Import in meine DB nutzen kann, habe ich mir ein Verfahren ausgedacht das bisher gut funktioniert hat.

Daten werden beim Export formatiert in das Browserfenster ausgegeben. Diese kopieren ich dann mit "Cut & Paste" in eine Textdatei. Das hat den Vorteil: Es funktioniert überall im Web und ich brauche keine Beschränkungen / Rechte auf der Verzeichnisstruktur des Servers um dort eine Datei anbzulegen. Ich muß allerdings dafür sorgen das keiner so an Daten heran kommt, die er nicht sehen sollte. Eine Anmeldung / Benutzerverwaltung sollte es da ggf. schon geben.

Diese so erzeugte Textdatei kann ich beim Import benutzen um die Datenbank nach einem Crash wieder zu füllen oder offline neue Daten einzutragen / sammeln. Diese Datei wird dann per FTP auf den Server geschoben und kann vom Script ausgelesen werden. Angepaßt in 2015 auf PHP 4 / MySQL 5.

Zuerst der Export der Daten in ein Fenster:

$DB = mysql_pconnect("localhost","testuser","test");
$Tabelle = "Mitgliederliste"

# Übergabe: $DB - Datenbankanmeldung, PHP5
# $Tabelle, die entsprechende Tabelle
function DatenExport($DB,$Tabelle)
 { $temp = 0;
   $sqlTab = "SELECT * FROM " . $Tabelle ; 
   $resultTab = mysqli_query($sqlTab);
   $Felder = mysqli_num_fields($resultTab);
   $Anzahl = mysqli_num_rows($resultTab);
   # Kopf / Info 
   echo "Export der Tabelle: $Tabelle mit $Anzahl Datensätzen<br>";
   echo "-  -  -  -  Trennlinie  -  -  -  -  -<br>"; 
   # Wenn Datenbank erreichbar dann durchführen
   if ($DB)
    { $result = mysqli_query($DB,$sqlTab);
      while ($myrow = mysqli_fetch_row($result)) 
       {   $Datensatz = "";
           # Alle Felder (Spalten der Tabelle) des Datensatzes (Reihe der Tabele) ausgeben 
           for ($j = 0; $j < $Felder; $j++)
              { $Datensatz .= "\"$myrow[$j]\";";}
           # Formatierungen   
           $Datensatz .= "\\n";  
           # Zeilenumbruch (nicht angezeigt)
           $Datensatz .= "\n";
           echo $Datensatz . "<br>";
           # Export der Daten in ein Format:" ";" ";" ";" "; ..  ;\n  
           $temp++;
       }
      echo "-  -  -  -  Trennlinie  -  -  -  -  -<br>"; 
      echo "<br>Insgesamt " . $temp ." Datensätze geschrieben <br>";
      
      mysqli_close;
   }
  else {echo "Datenbank nicht erreichbar, Daten nicht exportiert.<br>";}
 }

Details: Um ein Ausgabeformat zu erzeugen das man auch mit Excel bearbeiten kann wurde "wert1";"wert2";"wert3"; ... "wertN"; als Ausgabe gewählt. Man kann dann Werte in Excel hinzufügen als CSV Datei Exportieren und schon hat man eine Importdatei und ein Backup! Das "\n" dienst beim Import als Zeilenende - Erkennung und darf nicht fehlen!

Nun der Import in eine Tabelle:

$Datei = "import.csv";
$DB = mysql_pconnect("localhost","testuser","test"); 
$Tabelle = "Mitgliederliste"

# Übergabe: $DB - Datenbankanmeldung, $Datei - Datei die impotiert werden soll
# $Tabelle, die entsprechende Tabelle
# Auslesen einer angegebenen Datei, und Import in den aktuellen Datenbestand.
# Das Format ist das entsprechende beim Datenexport (Format:" \";" \";" \";" \"; ..  ;\n)
# Das Hinzufügen ist additiv, bestehende DS werden nicht verändert oder überschrieben. 
function DatenImport($DB,$Datei,$Tabelle)
 { # Kopf / Info 
   echo "Datenimport<br>";
   echo ".. in Tabelle: $Tabelle "<br>;
   # Tabelle heraussuchen in die Importiert werden soll. 
   $sqlTab = "SELECT * FROM " . $Tabelle ; 
   $resultTab = mysqli_query($sqlTab);
   $ZielFelder = mysqli_num_fields($resultTab);
   
   if ($Datei == "")
    { # hier kann eine routine aufgerufen werden die eine Datei vom Server auswählen läßt...
       DateiAngeben(); }
   else
    { # Wieviele Zeilen werden importiert - 1 Zeile pro Tabellenzeile!
      $zeilenDatei = count(file($Datei));
      $filearray = file($Datei);
      $temp = 0;
      $i = 0;
      $wert = "";
      $DSpruefString = explode(";",$filearray[0]);
      $QuellFelder = count($DSpruefString) - 1;      
      # 1. Kausalitätsprüfung
      # Felder bis .. x, die Einzulesenden habe ein Feld (wegen '\n' ) mehr!
      if ($ZielFelder <> $QuellFelder )
       { echo "Ziel ($ZielFelder) und Quellfelder ($QuellFelder) NICHT identisch. Bitte Importdaten und Zieltabelle prüfen.<br>" ;  }
      else 
       { echo " Ziel und Quellfelder identisch - Import beginnt! <br>" ;
         echo "- - - - - - - - - - - - - - - - - - - - - - - - - -<br>" ;  
         # Feldbezeichner (Spaltennamen der Tabelle) einsammeln
         $FeldNamen = array();
         for ($f = 0; $f < $ZielFelder; $f++)
          { $feldname = mysqli_fetch_field_direct($resultTab,$f);
            $FeldNamen[$f]= $feldname->name ;  
          }
         $sql  = "INSERT INTO " . $Tabelle . " (";
         for ($f = 0; $f < ($ZielFelder-1); $f++)
           { $sql  .= $FeldNamen[$f] . ", " ;  }
         $sql  .= $FeldNamen[$ZielFelder-1];
         $sql .= ") ";
         $sql .= "VALUES (";
         # Anmeldung DB hat geklappt ?
         if ($DB) 
          { $sqlkm = "Lock Tables " . $Tabelle . " WRITE"; 
            $reskm = mysqli_query($DB,$sqll);
            $Daten = array();
            while ($temp < $zeilenDatei)
             { echo "Eingelesen: " . $filearray[$temp]. "<br>";
               $DSString = explode(";",$filearray[$temp]);
               while ($i < $ZielFelder)
                { # Zur Erinnerung "wert1"; .. "wertN"; Wobei " gleich \" und \ gleich \\ als Ersatzdarstellung in PHP haben 
                  # Es wird hier der Wert zwischen den Anführungsstrichen / Ersatzzeichen herausgesucht   
                  $von = strpos($DSString[$i],"\"") + 1;
                  $bis = strrpos($DSString[$i],"\\");
                  $len = $bis - $von;
                  $wert = substr($DSString[$i],$von,$len);
                  $Daten[$i] = $wert;
                  $i++;
                }
               # SQL Befehl dieses Datensatzes zusammenbauen. 1. Teil (siehe oben) + die Werte
               $sqlds = $sql ;
                for ($f = 0; $f < ($ZielFelder-1); $f++)
                { $sqlds .= "'" .$Daten[$f] ."'," ; }
                $sqlds .= "'" .$Daten[$ZielFelder-1] ."')" ;
               $result = mysqli_query($DB,$sqlds);
               # zum Debuggen - Argument ausgeben
               # echo  "" . $sqlds . "<br>";
               if ($result)
                { $number = mysqli_insert_id();
                  echo "Datensatz $Nummer ($Name) erzeugt. <br>";
                } 
               else 
                { echo "Fehler: ". mysqli_error($DB) . "<br> ";  }              
               $i = 0;
               $temp++;
             }
            $sqlkm = "Unlock Tables"; 
            $reskm = mysqli_query($DB,$sqlkm);
          }
         else { echo "Datenbank nicht erreichbar, Daten nicht importiert.<br>";}
    }
     
   }
 }

Verwendungshinweis: Um das Script zu verwenden einfach diese Datei über den Browser speichern und dann mit einem Texteditor oder Dreamweaver / FirstPage etc. bearbeiten. Das Script darf für jeden frei verwendet werden, soweit der Autor / Quelle genannt wird. Wer nützliche Links / Scripte hat darf die mir auch gerne zur Verfügung stellen.

Home | Autor | eMail | Gästebuch

Bearbeitet und erstellt von Horst - G. Burmester (HGB) ©