Mailinglisten-Archive |
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