Sunteți pe pagina 1din 7

Index.php <?php include_once ("./includes.inc"); include_once ("./settings.inc"); include_once ("$parser_path/excelparser.php"); if ( !isset($_POST['step']) ) $_POST['step'] = 0; ?> <html> <head> <STYLE> <!

-body, table, tr, td {font-size: 12px; font-family: Verdana, MS sans serif, Arial, Helvetica, sans-serif} td.index {font-size: 10px; color: #000000; font-weight: bold} td.empty {font-size: 10px; color: #000000; font-weight: bold} td.dt_string {font-size: 10px; color: #000090; font-weight: bold} td.dt_int {font-size: 10px; color: #909000; font-weight: bold} td.dt_float {font-size: 10px; color: #007000; font-weight: bold} td.dt_unknown {font-size: 10px; background-color: #f0d0d0; font-weight: bold} td.empty {font-size: 10px; background-color: #f0f0f0; font-weight: bold} --> </STYLE> </head> <body text="#000000" link="#000000" vlink="#000000" alink="#000000" topmargin="0" leftmargin="2" marginwidth="0" marginheight="0"> <table width="100%" align="center" bgcolor="#006699"> <tr> <td>&nbsp;</td> <td width="60%"><font color="#FFFFFF" size="+2">Excel Parser</font></td> <td width="40%" align="right"><font color="#FFFFFF" size="+1">MS Excel ke MySQL</font></td> <td>&nbsp;</td> </tr> </table> <?php // Outputting fileselect form (step 0) if ( $_POST['step'] == 0 ) echo <<<FORM <table width="100%" border="0" align="center" bgcolor="#7EA9D3"> <tr> <td>&nbsp;</td> <td<p>&nbsp;</p>Pilih File Excel dari komputer Anda<p>&nbsp;</p></td> </tr> <tr> <td>&nbsp;</td> <td> <table border="0"> <form name="exc_upload" method="post" action="" enctype="multipart/form-data"> <tr><td>File Excel:</td><td><input type="file" size=30 name="excel_file"></td></tr> <tr><td>Baris pertama menjadi nama field:</td><td><input type="checkbox" name="useheaders"></td></tr> <tr><td colspan="2" align="right"> <input type="hidden" name="step" value="1"> <input type="button" value="Next" onClick=" javascript: if( (document.exc_upload.excel_file.value.length==0)) { alert('Pilih file Excel ya...'); return; }; submit(); "></td></tr> </form> </table> </td> </tr> <tr> <td>&nbsp;</td> <td align="right"><p>&nbsp;</p>

<a href="http://www.nicdesain.net" style="font-size: 9px; text-decoration: none; font-family: Verdana, Geneva, Arial, Helvetica, sansserif;">www.NICdesain.net</a>&nbsp;&nbsp; </td> </tr> </table> FORM; // Processing excel file (step 1) if ( $_POST['step'] == 1 ) { echo "<br>"; // Uploading file $excel_file = $_FILES['excel_file']; if( $excel_file ) $excel_file = $_FILES['excel_file']['tmp_name']; if( $excel_file == '' ) fatal("No file uploaded"); move_uploaded_file( $excel_file, 'upload/' . $_FILES['excel_file']['name']); $excel_file = 'upload/' . $_FILES['excel_file']['name']; $fh = @fopen ($excel_file,'rb'); if( !$fh ) fatal("No file uploaded"); if( filesize($excel_file)==0 ) fatal("No file uploaded"); $fc = fread( $fh, filesize($excel_file) ); @fclose($fh); if( strlen($fc) < filesize($excel_file) ) fatal("Cannot read file"); // Check excel file $exc = new ExcelFileParser; $res = $exc->ParseFromString($fc); switch ($res) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: { break; fatal("Can't open file"); fatal("File too small to be an Excel file"); fatal("Error reading file header"); fatal("Error reading file"); fatal("This is not an Excel file or file stored in Excel < 5.0"); fatal("File corrupted"); fatal("No Excel data found in file"); fatal("Unsupported file version");

default: fatal("Unknown error"); } // Pricessing worksheets $ws_number = count($exc->worksheet['name']); if( $ws_number < 1 ) fatal("Tidak ada worksheet yang aktif."); $ws_number = 1; // Setting to process only the first worksheet for ($ws_n = 0; $ws_n < $ws_number; $ws_n++) { $ws = $exc -> worksheet['data'][$ws_n]; // Get worksheet data if ( !$exc->worksheet['unicode'][$ws_n] ) $db_table = $ws_name = $exc -> worksheet['name'][$ws_n]; else { $ws_name = uc2html( $exc -> worksheet['name'][$ws_n] ); $db_table = convertUnicodeString ( $exc -> worksheet['name'][$ws_n] ); } echo "<div align=\"center\">Worksheet: <b>$ws_name</b></div><br>"; $max_row = $ws['max_row']; $max_col = $ws['max_col'];

if ( $max_row > 0 && $max_col > 0 ) getTableData ( &$ws, &$exc ); // Get structure and data of worksheet else fatal("Worksheet kosong"); } } if ( $_POST['step'] == 2 ) { // Adding data into mysql (step 2) echo "<br>"; extract ($_POST); $db_table = ereg_replace ( "[^a-zA-Z0-9$]", "", $db_table ); $db_table = ereg_replace ( "^[0-9]+", "", $db_table ); if ( empty ( $db_table ) ) $db_table = "Table1"; // Database connect check if ( !$link = @mysql_connect ($db_host, $db_user, $db_pass) ) fatal("Koneksi database error, coba cek koneksinya..."); if ( !$connect = mysql_select_db ($db_name ) ) fatal("Nama database salah"); if ( empty ($db_table) ) fatal("Nama Tabel salah"); if ( !isset ($fieldcheck) ) fatal("Tidak ada field terpilih."); if ( !is_array ($fieldcheck) ) fatal("Tidak ada field terpilih."); $tbl_SQL .= "CREATE TABLE IF NOT EXISTS $db_table ( "; foreach ($fieldcheck as $fc) if ( empty ( $fieldname[$fc] ) ) fatal("Empty fieldname for selected field $fc."); else { // Prepare table structure $fieldname[$fc] = ereg_replace ( "[^a-zA-Z0-9$]", "", $fieldname[$fc] ); $fieldname[$fc] = ereg_replace ( "^[0-9]+", "", $fieldname[$fc] ); if ( empty ( $fieldname[$fc] ) ) $fieldname[$fc] = "field" . $fc; $tbl_SQL .= $fieldname[$fc] . " text NOT NULL,"; } $tbl_SQL = rtrim($tbl_SQL, ','); $tbl_SQL .= ") TYPE=MyISAM"; $fh = @fopen ($excel_file,'rb'); if( !$fh ) fatal("Tidak ada file diupload"); if( filesize($excel_file)==0 ) fatal("Tidak ada file diupload"); $fc = fread( $fh, filesize($excel_file) ); @fclose($fh); if( strlen($fc) < filesize($excel_file) ) fatal("Tidak baca file"); $exc = new ExcelFileParser; $res = $exc->ParseFromString($fc); switch ($res) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: { break; fatal("Can't open file"); fatal("File too small to be an Excel file"); fatal("Error reading file header"); fatal("Error reading file"); fatal("This is not an Excel file or file stored in Excel < 5.0"); fatal("File corrupted"); fatal("No Excel data found in file"); fatal("Unsupported file version");

default: fatal("Unknown error"); }

// Pricessing worksheets $ws_number = count($exc->worksheet['name']); if( $ws_number < 1 ) fatal("Tidak ada worksheet dalam file excel."); $ws_number = 1; // Setting to process only the first worksheet for ($ws_n = 0; $ws_n < $ws_number; $ws_n++) { $ws = $exc -> worksheet['data'][$ws_n]; // Get worksheet data $max_row = $ws['max_row']; $max_col = $ws['max_col']; if ( $max_row > 0 && $max_col > 0 ) $SQL = prepareTableData ( &$exc, &$ws, $fieldcheck, $fieldname ); else fatal("Empty worksheet"); } if (empty ( $SQL )) fatal("Tabel output error..."); // Output data into database // Drop table if ( isset($db_drop) ) { $drop_tbl_SQL = "DROP TABLE IF EXISTS $db_table"; if ( !mysql_query ($drop_tbl_SQL) ) fatal ("Hapus tabel gagal."); } // Create table if ( !mysql_query ($tbl_SQL) ) fatal ("Buat tabel gagal"); $sql_pref = "INSERT INTO " . $db_table . " SET "; $err = ""; $nmb = 0; // Number of inserted rows foreach ( $SQL as $sql ) { $sql = $sql_pref . $sql; if ( !mysql_query ($sql) ) { $err .= "<b>Kesalahan SQL pada</b> :<br>$sql <br>"; } else $nmb++; } if ( empty ($err) ) { echo <<<SUCC <br><br> <div align="center"> <b>Proses penempatan data pada database berhasil</b><br><br> $nmb baris pada tabel "$db_table"<br> <br><a href="">Mulai</a> </div> SUCC; } else echo "<br><br><font color=\"red\">$err</font><br><br><div align=\"center\"><a href=\"\">Mulai</a></div>"; @unlink ($excel_file); echo <<<ZAKKIS <br><br> <div align="right"> <a href="http://www.nicdesain.net" style="font-size: 9px; text-decoration: none; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">NICdesain.net</a>&nbsp;&nbsp; </div> ZAKKIS; } ?>

Includes.inc <?php function print_error( $msg ) { print <<<END <tr> <td colspan=5><font color=red><b>Error: </b></font>$msg</td> <td><font color=red><b>Rejected</b></font></td> </tr> END; } function getHeader( $exc, $data ) { // string $ind = $data['data']; if( $exc->sst[unicode][$ind] ) return convertUnicodeString ($exc->sst['data'][$ind]); else return $exc->sst['data'][$ind]; } function convertUnicodeString( $str ) { for( $i=0; $i<strlen($str)/2; $i++ ) { $no = $i*2; $hi = ord( $str[$no+1] ); $lo = $str[$no]; if( $hi != 0 ) continue; elseif( ! ctype_alnum( $lo ) ) continue; else $result .= $lo; } return $result; } function uc2html($str) { $ret = ''; for( $i=0; $i<strlen($str)/2; $i++ ) { $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]); $ret .= '&#'.$charcode; } return $ret; } function get( $exc, $data ) { switch( $data['type'] ) { case 0: // string $ind = $data['data']; if( $exc->sst[unicode][$ind] ) return uc2html($exc->sst['data'][$ind]); else return $exc->sst['data'][$ind]; case 1: // integer return $data['data']; case 2: // float return $data['data']; case 3: return $data['data']; //str_replace ( " 00:00:00", "", gmdate("d-m-Y H:i:s",$exc->xls2tstamp($data[data])) ); default: return ''; } } function fatal($msg = '') { echo '[Fatal error]'; if( strlen($msg) > 0 ) echo ": $msg";

echo "<br>\nScript terminated<br>\n"; if( $f_opened) @fclose($fh); exit(); } function getTableData ( $ws, $exc ) { global $excel_file, $db_table; global $db_host, $db_name, $db_user, $db_pass; if ( !isset ( $_POST['useheads'] ) ) $_POST['useheads'] = ""; $data = $ws['cell']; echo <<<FORM <form action="" method="POST" name="db_export"> <table border="0" cellspacing="1" cellpadding="2" align="center" bgcolor="#666666"> <tr bgcolor="#f1f1f1"> FORM; // Form fieldnames if ( !$_POST['useheaders'] ) { for ( $j = 0; $j <= $ws['max_col']; $j++ ) { $field = "field" . $j; echo <<<HEADER <td> <input type="checkbox" name="fieldcheck[$j]" value="$j" checked title="Check to proceed this field"> <input type="text" name="fieldname[$j]" value="$field" title="Field name"> </td> HEADER; } } else { for ( $j = 0; $j <= $ws['max_col']; $j++ ) { $field = getHeader ( $exc, $data[0][$j] ); $field = ereg_replace ( "^[0-9]+", "", $field ); if (empty ($field) ) $field = "field" . $j; echo <<<HEADER <td> <input type="checkbox" name="fieldcheck[$j]" value="$j" checked title="Check to proceed this field"> <input type="text" name="fieldname[$j]" value="$field" title="Field name"> </td> HEADER; } } echo "</tr>"; foreach( $data as $i => $row ) { // Output data and prepare SQL instructions if ( $i == 0 && $_POST['useheaders'] ) continue; echo "<tr bgcolor=\"#ffffff\">"; for ( $j = 0; $j <= $ws['max_col']; $j++ ) { $cell = get ( $exc, $row[$j] ); echo "<td>$cell</td>"; } echo "</tr>"; $i++; } if ( empty ( $db_table ) ) $db_table = "Table1"; echo <<<FORM2 </table><br> <table align="center" width="390"> <tr><td>Nama tabel:</td><td>&nbsp;<input type="text" name="db_table" value="$db_table"></td></tr>

<tr><td>Hapus tabel jika sudah ada:</td><td><input type="checkbox" name="db_drop" checked></td></tr> <tr><td colspan="2"> <i>Jangan dicentang jika ingin memasukkan data pada tabel yang sudah ada.<br><font color="red"> Jika tidak ada kesamaan nama filed atau jumlah field tidak sama maka akan muncul komentar error.</td></tr> <tr><td>Host Database:</td><td>&nbsp;<input type="text" size=30 name="db_host" value="$db_host"></td></tr> <tr><td>Nama Database:</td><td>&nbsp;<input type="text" size=30 name="db_name" value="$db_name"></td></tr> <tr><td>User Database:</td><td>&nbsp;<input type="text" size=30 name="db_user" value="$db_user"></td></tr> <tr><td>Password Database:</td><td>&nbsp;<input type="password" size=30 name="db_pass" value="$db_pass"></td></tr> <tr><td></td><td><input type="hidden" name="excel_file" value="$excel_file"> <input type="hidden" name="useheaders" value="$_POST[useheaders]"> <input type="hidden" name="step" value="2"> &nbsp;<input type="submit" name="submit" value="Output"></td></tr> </form> </table> <br>&nbsp; <div align="right"> <a href="http://www.nicdesain.net" style="font-size: 9px; text-decoration: none; fontfamily: Verdana, Geneva, Arial, Helvetica, sans-serif;">www.NICdesain.net</a>&nbsp;&nbsp; </div> FORM2; } function prepareTableData ( $exc, $ws, $fieldcheck, $fieldname ) { $data = $ws['cell']; foreach( $data as $i => $row ) { // Output data and prepare SQL instructions if ( $i == 0 && $_POST['useheaders'] ) continue; $SQL[$i] = ""; for ( $j = 0; $j <= $ws['max_col']; $j++ ) { if ( isset($fieldcheck[$j]) ) { $SQL[$i] .= $fieldname[$j]; $SQL[$i] .= "=\""; $SQL[$i] .= addslashes ( get ( $exc, $row[$j] ) ); $SQL[$i] .= "\""; $SQL[$i] .= ","; } } $SQL[$i] = rtrim($SQL[$i], ','); $i++; } return $SQL; } ?> Setting.inc <?php $db_user $db_pass $db_name $db_host $db_port = = = = = "root"; "password"; "nama_database"; "localhost"; ""; // // // // // Database Database Database Database Database username password name host port

// Parser settings $parser_path = "../../"; ?> // Path to Excel parser without /

S-ar putea să vă placă și