<mySearch ⁄>
<mySnippets order="rand" ⁄>
<myContacts ⁄><email ⁄>
<windows live messenger ⁄>
<myCurriculum type="pdf" ⁄>
<myBlog show="last" ⁄>
<myNews show="rand" ⁄>
<myNews type="cat" ⁄>
<myQuote order="random" ⁄>Todos comem e bebem; são poucos os que sabem distinguir os sabores
<myPhoto order="random" ⁄>
<myAdSense ⁄>
<myVisitorsMap ⁄>
# Table "dados_utilizadores" DDL CREATE TABLE `dados_utilizadores` ( `pk_utilizador` tinyint(4) UNSIGNED NOT NULL AUTO_INCREMENT, `nome` varchar(255) NOT NULL DEFAULT '', `email` varchar(255) NOT NULL DEFAULT '', `website` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`pk_utilizador`) ) ENGINE=MyISAM
campo1;campo2;campo3;campo4;campo5;nome;email 1;ggdgdfg;gdfgdfgd;fhfghfg;hrhtrhrt;my name;my_email@my_domain.com 2;jgjhgjgh;ryrtyrt;rtfgbfgbf;bfbfgbf;my other name;my_other_email@my_other_domain.com 3;jgjhgjgh;ryrtyrt;rtfgbfgbf;bfbfgbf;my unknown name;my_unknown_email@my_unknown_domain.com
<?php /** * Fazer o parsing do ficheiro * **/ function parse_csv_file($file, $columnheadings = false, $delimiter = ',', $enclosure = "\"") { $row = 1; $rows = array(); $handle = fopen($file, 'r'); while (($data = fgetcsv($handle, 1000, $delimiter, $enclosure )) !== false) { if (!($columnheadings == "false") && ($row == 1)) { $headingTexts = $data; } elseif (!($columnheadings == "false")) { foreach ($data as $key => $value) { unset($data[$key]); $data[$headingTexts[$key]] = $value; } $rows[] = $data; } else { $rows[] = $data; } $row++; } fclose($handle); return $rows; } /** * Obter valores * @param $filename - ficheiro csv * @param $arrGetCSVFields - array que contém os campos que pretendemos * @param $column_headings - o csv contém 1 header? * */ function getCSVValues($filename,$arrGetCSVFields,$column_headings=false){ $arr=parse_csv_file($filename,$column_headings); $arrCSVValues=array(); foreach($arr as $arrKey=>$arrValues){ foreach($arrValues as $key=>$value){ $arrAux=array(); //re-definir array $values=explode(";",$value); //converter string separada por ; p/ array foreach($arrGetCSVFields as $csv_key=>$csv_field_pos){ //armazenar os valores array_push($arrAux,$values[$csv_field_pos]); } array_push($arrCSVValues,$arrAux); //adicionar campos } } return $arrCSVValues; } /** * Inserir registo CSV numa tabela * * @param $arrFields - array de campos onde irão ser armazenados os valores * @param $arrValues - array que contém os valores a armazenar na tabela * @param $table - tabela * @param $isFirstFieldPk - o 1º campo é uma chave primária? * */ function insertCSVRecord($arrFields,$arrValues,$table,$isFirstFieldPk=false){ $iSQL=generateSQL($arrFields,$arrValues,$table,$isFirstFieldPk); $db=connectDB(); mysql_query($iSQL) or die($iSQL); mysql_close($db); } /** * * Construir formulário de upload * * **/ function buildFormUploadCSV(){ return " Escolha um ficheiro CSV<br><br> <form name='frmUploadCSV' enctype='multipart/form-data' method='post' action=''> <input type='file' name='filename' size='75'> <input type='hidden' name='accao' value='uploadCSV'> <input type='submit' value='Upload'> </form> "; } /** * @param $arrFields - array com o nome dos campos * @param $arrValues - array com o valor dos campos * @param $table - nome da tabela * @param $isFirstFieldPk - o 1º campo é uma chave primária? * */ function generateSQL($arrFields,$arrValues,$table,$isFirstFieldPk=true){ if(!is_array($arrFields) || !is_array($arrValues)) return ""; $size=sizeof($arrFields); if($arrValues[0]>0 && $isFirstFieldPk){ //update record $sqlRestriction=" Where $arrFields[0]='$arrValues[0]' "; for($i=1;$i<$size;$i++){ $iSQL.=$arrFields[$i]."='$arrValues[$i]',"; } $iSQL=left($iSQL,strlen($iSQL)-1); //retirar , final $iSQL="Update $table set $iSQL $sqlRestriction"; } else{ //new record $startAt=($isFirstFieldPk)?1:0; for($i=$startAt;$i<$size;$i++){ $sqlFields.=$arrFields[$i].","; $sqlValues.="'$arrValues[$i]',"; } $sqlFields=left($sqlFields,strlen($sqlFields)-1); $sqlValues=left($sqlValues,strlen($sqlValues)-1); $iSQL="Insert Into $table ($sqlFields) values ($sqlValues)"; } return $iSQL; } function left ($str, $howManyCharsFromLeft){ return substr ($str, 0, $howManyCharsFromLeft); } /** * Efectuar ligação à BD mySQL * * @return identificador */ function connectDB(){ $db = mysql_connect("servidor", "username", "password"); mysql_select_db("database",$db) or die("Impossivel aceder á base de dados"); return $db; } ?>
<?php include_once("funcoes_csv.php"); $accao=$_REQUEST["accao"]; ?> <html> <head> <title>CSV</title> </head> <body> <?php if($accao=="uploadCSV"){ $file = $HTTP_POST_FILES['filename']['tmp_name']; //atenção que estes 2 arrays têm de "bater certo" //indice dos campos que estão no CVS, que pretendemos obter // tenham só em atenção que o indice começa na posição 0 $arrCSVGetFieldsValues=array(5,6); //campos correspondentes na tabela $arrTableFields=array("nome","email"); $arrCSVValues=getCSVValues($file,$arrCSVGetFieldsValues); foreach ($arrCSVValues as $key=>$arrValues){ //percorrer o array insertCSVRecord($arrTableFields,$arrValues,$table); //função que vai inserir os registos } } echo buildFormUploadCSV(); ?> </body> </html>