phpbar.de logo

Mailinglisten-Archive

[php] Excel2MySQL...

[php] Excel2MySQL...

Thomas 'Dante' Feyrer Dante_(at)_altmuehlnet.de
Wed, 14 Apr 1999 01:03:51 +0200


Hi,

da ein Kunde die Daten für die Web-Datenbank per Excel bearbeiten will, hab
ich mir ein Script geschrieben, dass nach einem Upload, das File in eine
MySQL Datenbank einliest...
Ich weiß allerdings nicht, ob ich vielleicht irgendetwas übersehen hab...
Die Excel-Tabelle muss als "Text (Tabs getrennt) (*.txt)" gespeichert
werden...

function Excel2MySQL( $filename, $table, $fields ) {
    $file = fread( fopen( $filename, "r" ), filesize( $filename ) );
    $file = explode( "\n", $file );

    $sof = sizeof( $file );
    $soz = sizeof( explode( "\t", $file[0] ) );

    for( $i=0; $i+1<$sof; $i++ ) {
        $zeile[$i] = explode( "\t", $file[$i] );
        for( $s=0; $s<$soz; $s++ ) {
            $zeile[$i][$s] = trim( $zeile[$i][$s] );
            if( substr( $zeile[$i][$s], 0, 1 ) == "\"" and substr(
$zeile[$i][$s], -1 ) == "\"" )
                $zeile[$i][$s] = substr( $zeile[$i][$s], 1, strlen(
$zeile[$i][$s] )-2 );
            $zeile[$i][$s] = ereg_replace( "\"\"", "\"", $zeile[$i][$s] );
            $zeile[$i][$s] = addslashes( $zeile[$i][$s] );
            if( $s+1<$soz ) {
                $query .= "'".$zeile[$i][$s]."', ";
            } else {
                $query .= "'".$zeile[$i][$s]."'";
            }
        }
        mysql_query( "INSERT INTO $table ( $fields ) VALUES ( $query )" )
or die( "Error!<br>\nMySQL-Error: ".mysql_error() );
        $query = "";
    }
}

Nun noch eine kleine Erklärung dazu:
Da man in Excel IMHO keine Tabs mit in eine Zelle schreiben kann, können
die einzelnen Felder per explode mit \t getrennt werden...
Das $i+1 in der ersten for-Schleife kommt daher, da Excel zum Schluss noch
eine (unnötige) Leerzeile anhängt...
gleich darauffolgend wir ein trim verwendet, da irgendwie noch ein paar
Leerzeichen mit reinrutschen, wenn vor und nach dem string ein " durch ein
" innerhalb des Strings gesetz wurde...
wenn nun ein " in einer Zelle vorkommt, speicher Excel dies als "", mit
ereg_replace werden dann doppelte "" in einfache " umgewandelt...

Könnte es sein, das bei größeren Tabellen die Ausführungzeit über die
Standartmäßigen 30 sek. steigt, wodurch das Script abgebrochen würde und
die Daten nur teilweise in der MySQL-Datenbank wären?
Gibt es eine Methode die Begrenzung der Ausführungszeit innerhalb des
Scripts zu erhöhen, bzw. komplett auszuschalten?

Gruss & Thanks
    Domas



php::bar PHP Wiki   -   Listenarchive