Jump to content


xaceshighx

Member Since 21/07/2005
Offline Last Active 04/08/2006, 10:39
-----

Posts I've Made

In Topic: Ajuda ! Input Recebe Dados De Txt

20/07/2006, 09:19

Fala ae!
Consegui solucionar o meu problema, abaixo segue o código para quem se interessar ou tiver ou mesmo problema que eu.

<? 
 if($submit) { 
  
 $dbhost = ""; // local onde esta o banco.
 $dbuser = ""; // usuário do banco.
 $dbpass = ""; // senha do banco.
 $dbname = ""; // nome do banco.
 
 // conecta-se ao banco de dados. 
 $con = mysql_connect($dbhost, $dbuser, $dbpass);  
 mysql_select_db($dbname, $con); 
  
 
 $pasta="./upload/"; // pasta onde são gravados os arquivos upados.
 

 $uploaded=date("YmdHis"); 

 $myfile=$pasta .$uploaded .".csv"; // renomeio TXT p/ CSV (arquivo excel).
   
 if (copy($upfile, $myfile)) { 

 
 $file = file("$upfile");

	 for($i = 0; $i < count($file); $i++) {
						$email		  = substr($file[$i], 0, 40);
		$empresa	= substr($file[$i], 40, 40);
		$endereco   = substr($file[$i], 80, 40);
		$bairro		  = substr($file[$i], 120, 25);
		$cidade		  = substr($file[$i], 145, 25);

		$sql = "INSERT INTO TESTE (email, empresa, endereco, bairro, cidade) VALUES ('$email', '$empresa', '$endereco', '$bairro', '$cidade')"; 
		$result = mysql_query($sql) or die(mysql_error()); 
	}
}	
?> 
 <html> 
 <head> 
 <title>Upload csv-file</title> 
 </head> 
 <body bgcolor="#ffffff" text="#000000" id=all> 
 <form enctype="multipart/form-data" action="<? echo "$PHP_SELF"; ?>" method=POST> 
 <div align="center"> 
 <table border="0" cellpadding="0" cellspacing="0" width="600" align="center"> 
 <tr> 
 <td width="200" align="left" valign="top">Upload TXT</td> 
 <td width="400" valign="top"><input name="upfile" type="file"><br><br></td> 
 </tr> 
 <tr> 
 <td width="100%" colspan="2" align="center"><input type="submit" name="submit" value="Upload"></td> 
 </tr> 
 </table> 
 </div> 
 </form> 
 </body> 
 </html> 
 <? 
 } 
 ?> 

A parte que estava complicando era pegar os campos do txt e jogar p/ banco, pois não havia nenhum caracter separador.

email = substr($file[$i], 0, 40);
0 => começa a partir do zero.
40 => pega os próximos 40 espaços.
$empresa = substr($file[$i], 40, 40);
40 => começa do espaço 40.
40=> pega os próximos 40 espaços.


Bom, é isso!

Valeu ...

In Topic: Ajuda ! Input Recebe Dados De Txt

17/07/2006, 10:08

Fala gennf, blz? =)
Bom seu código me serviu para criar um esquema de envio de e-mails que estava precisando via txt.

Bom, andei fusando pela net e achei um código excelente e adaptei ele as minhas necessidades.
Tentei voltar a página na qual achei ele p/ dar os créditos ao autor, mas não entrou na página. =|
Segue abaixo o código:

Explicando o que o código abaixo faz:

1 Supondo que você tenha um arquivo txt com vários campos na primeira linha relacionados a um produto.
Os campos terão que ser separados por algum caracter, neste aqui esta ",". Lembra que eu comentei sobre os espaços em branco que ficava entre um campo e outro, qdo ele grava no Banco, ele desconsidera esses campos (y).
2 - Você terá que criar no seu ftp uma pasta com nome de sua escolha para upar os arquivos e gravá-los neles, dando permissão de gravação. Os arquivos são renomeados de uma forma simples e prática: por data e hora e renomeia tb p/ csv (Arquivo Excel) como pode ver abaixo no código.
3 - Neste código existe uma condição de limite ao arquivo a ser upado: 100K, fica seu critério isso.
4 - Feito o "up" ele grava na tabela todos os dados do txt, repare que qdo ele faz o load ele determina qual caracter é o diferenciador dos campos, que é o ",".
5 - Bom, é isso. Foi mto útil este código a mim, acredito que mtos as vezes precisam de algo do gênero.


<?
if($submit) {

$dbhost = "";
$dbuser = "";
$dbpass = "";
$dbname = "";

$con = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname, $con);

$mypath="./upload/"; //NESTA LINHA VOCÊ COLOCA O LOCAL ONDE TEM PERMISSÃO DE GRAVACÃO PARA QUE O ARQUIVO POSSA SER UPLOADADO
$mytable="TABELA"; // AQUI VOCÊ ESCOLHE O NOME DA TABELA

if ($upfile_size<="100000000") { // LIMITE DE UPLOAD DE 100K

$status="Ok";
$uploaded=date("YmdHis");

$myfile=$mypath .$uploaded .".csv"; //AQUI ELE RENOMEIA O ARQUIVO .CSV = TABELA DE EXCEL

if (copy($upfile, $myfile)) {
$status.=", arquivo copiado para a pasta UPLOAD.";

//COLOCAR O ARQUIVO NA TABELA
$insert_csv="LOAD DATA LOCAL INFILE '$myfile' INTO TABLE $mytable FIELDS TERMINATED BY ','";
$result_csv = mysql_query($insert_csv, $con) or die("NÃO VIROU ... " .mysql_error());
echo "$myfile<br>";
echo "$upfile<br>";
if ($result_csv) {
$status.=" e gravado no banco de dados.";
} else {
$status.=" MAS NÃO FOI POSSIVEL COLOCAR NA BASE DE DADOS";
}
} else {
$status.="... O ARQUIVO NAO FOI COPIADO";
}
echo "$status";
} else {
echo "ARQUIVO MUITO GRANDE";
}
} else {
?>
<html>
<head>
<title>Upload csv-file</title>
</head>
<body bgcolor="#ffffff" text="#000000" id=all>
<form enctype="multipart/form-data" action="<? echo "$PHP_SELF"; ?>" method=POST>
<div align="center">
<table border="0" cellpadding="0" cellspacing="0" width="600" align="center">
<tr>
<td width="200" align="left" valign="top">UPAR</td>
<td width="400" valign="top"><input name="upfile" type="file"><br><br></td>
</tr>
<tr>
<td width="100%" colspan="2" align="center"><input type="submit" name="submit" value="Upload"></td>
</tr>
</table>
</div>
</form>
</body>
</html>
<?
}
?>



Valeu !!!
Qq coisa eu volto.






Independente deste código que eu postei.

Qual seria a maneira de programar desta forma:

Arquivo txt:

maria rua tiradentes são paulo 350,00
josé da silva rua julio mesquita são paulo 750,15


----------------------------------------------------------------

Desta forma, eu sabendo que o campo nome pode ter no máximo 50 caracteres, e se o nome for 12, ele deixa 38 em branco como o arquivo vem, é possível pegar os dados sem ter um caracter diferenciando o campo ???? E como se alguém souber ?

In Topic: Ajuda ! Input Recebe Dados De Txt

14/07/2006, 10:25

gennf: Valeu pelo auxílio que tem dado.
Ok! Num primeiro momento ele disse que é possível. (separado por +)

Minha idéia é assim:

Fazer um script p/ upar o arquivo txt (isso é consegui).

Agora preciso saber como fazer uma página php que:

1 - Leia o arquivo txt.
2 - Primeira linha um cliente, segunda linha outro cliente, e assim em diante. (cada txt que upar não saberei o número de clientes, isso é aleatório)
3 - Na programação tipo um $sql = "INSERT INTO 'pedido' para levar esses dados p/ o MySQL.

Minha idéia é nunca aproveitar todos os txts, cada vez q upar ele sobrepõe ao outro. Só não sobrepõe as ID´s do clientes que serão auto-incremento.


Não sei se é mto, e se alguem poderia me ajudar! =)


Valeu !!!

In Topic: Ajuda ! Input Recebe Dados De Txt

13/07/2006, 17:28

Esses dados tb existem numa base DBF.
O programador do sistema dessa empresa me disse que funciona dessa forma:

E-mail: 50 caracteres => programado p/ no máximo 50, se o no txt o e-mail for teste@teste.com.br => 18 caracteres, o que acontece: ele subtrai 50 - 18 = 32 ... e deixa 32 espaços em branco até chegar no campo Nome da Empresa e assim sucessivamente p/ os outros campos.

E eu não conheço uma forma de pegar esses dados e jogar p/ dentro de um banco do jeito que estão, queria saber se deste jeito que esta o txt tenho FUTURO ou é preciso mudar a forma a que venha o txt de modo que eu consiga distinguir os campos e o fim de um cliente e começo do outro para importá-los.



Obrigado pela atenção.
Valeu.

In Topic: Ajuda ! Input Recebe Dados De Txt

13/07/2006, 16:49

Não deu certo.


Não sei se a possibilidade, de fazer algo assim:

Pegar os dados vindos do txt e já importar p/ a tabela de um banco MySql, distinguindade um fim de um cliente e começando o outro.

Pq como falei, ele cadastrar um por um não é a idéia dele.

Tá xxxxxx achar uma solução. =(

IPB Skin By Virteq