Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

twpesquisa

Gravar em Arquivo TXT

Recommended Posts

Pessoal,

 

tenho um código que está gravando perfeitamente dados de um formulario em um arquivo TXT, porém necessito que para cada registro gravado, seja gerado um ID, uma espécie de chave primaria. Com o posso fazer ?

 

Abaixo segue o meu código:

<?php
//Pegando os valores do formulário!
$nome = $_POST["nome"]; 
$rg = $_POST["rg"]; 
$endereco = $_POST["endereco"]; 
$email = $_POST["email"]; 
$fone = $_POST["fone"]; 
$cidade = $_POST["cidade"]; 
$pai = $_POST["pai"]; 
$estado = $_POST["estado"]; 
$mae = $_POST["mae"]; 
$cpf = $_POST["cpf"]; 
$login = $_POST["login"]; 
$senha = $_POST["senha"]; 

//Agora atribuímos tudo para uma variável só.
$documento = "$login;$senha;$nome;$rg;$endereco;$email;$fone;$cidade;$pai;$estado;$mae;$cpf;\r\n";

//Aqui você coloca o nome do arquivo que será gravado
$arquivo = "usuarios.txt";

//Abrimos o arquivo que será gravado.
$abrir = fopen($arquivo, "a");

//Gravamos no arquivo
$gravar = fwrite($abrir, $documento);

//Testa se foi gravado
if($gravar){
}else{
echo"Não gravado!";
}
?>
<form style="text-align:center">
<p>dados salvos com sucesso</p>
<input type="button" value="Voltar" onClick="JavaScript: window.history.back();">
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa gerenciar isso pelo script. Ao criar o script, atribua ID=1. Ao adicionar um dado, busque o ID do último registro do aruqivo, some uma unidade e esse será o ID do novo registro.

 

Sugestões: você pode usar XML ou JSON, para estruturar melhor o conteúdo do arquivo. Outra possibilidade é usar SQLite, que lhe dará de brinde o gerenciamento de IDs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade é um trabalho da Faculdade, e o mesmo precisa ser gravado no arquivo TXT.

As ferramentas de uso são apenas PHP e Arquivo TXT.

 

Senão fosse isso, eu estaria fazendo em MySql mesmo, rsrsrsrs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai gravar um registro por arquivo ou vários por arquivo?

 

Se for vários, basta inserir o id como primeiro valor da linha, depois antes de gravar um novo registro basta ler o primeiro valor da última linha e incrementar +1 ao id.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será gravado vários registros em um arquivo, exemplo:

 

1;joao carlos;joaocarlos@email.com.br

2;maria silva;mariasilva@email.com.br

3;roberta miranda;robertamiranda@email.com.br

4;luis paulo;luispaulo@email.com.br


Fiz assim e funcionou.

 

<?php
$file = "registro.txt"; 
$lines = count(file($file)); 
$contador = $lines+1;
 
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

$lines = count(file($file));

Nesse trecho, você põe o arquivo inteiro na memória, só para contar o número de linhas. Se o arquivo for muito grande, pode tomar toda a memória disponível.

 

Seria mais eficiente usar outras alternativas, como um loop usando fgets() ou até rodar o comando "wc -l", se estiver em ambiente Linux.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderias sugerir exemplificando ?

Realmente trabalhar com arquivos é "complicado".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia fazer algo assim

 

$file="largefile.txt";
$linecount = 0;
$handle = fopen($file, "r");
while(!feof($handle)){
  $line = fgets($handle);
  $linecount++;
}
fclose($handle);
echo $linecount;

Roubei daqui: http://stackoverflow.com/a/2162528

 

Nesse exemplo, só é mantida em memória a linha atual do loop, sem carregar todo o arquivo em memória :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeito!

Mas agora estou com um novo problema.

Quando excluo um registro (linha) e vou cadastrar um novo registro ele está contando a quantidade de linhas existentes e adicionando o proxio "ID" com um código igual ao que ja existe.

 

Por exemplo:

 

Antes:

 

1;joao carlos;joaocarlos@email.com.br

2;maria silva;mariasilva@email.com.br

Depois de exluir o registro 1

Fica assim:

2;maria silva;mariasilva@email.com.br

Quando vou cadastrar um novo ele tá gravando assim:

2;maria silva;mariasilva@email.com.br

2;novo registro;novoregistro@email.com.br

Acredito que o ideal seria pegar o ultimo ID e somar mais um e assim evita que tenham registros repeditos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que o ideal seria pegar o ultimo ID e somar mais um e assim evita que tenham registros repeditos.

Exato. Só dar um explode(), separando pelo ponto-e-vírgula, e pegar a posição 0. Some uma unidade e terá o próximo ID

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui mas ta contando errado...

 

$registros = "registro.txt";
$posicao = explode(";", $registros);
$valor = $posicao[0] + 1;
echo "Novo valor: " . $valor;

 

id Nome Detalhar Editar Excluir 2 Julio Detalhar Editar Excluir

Novo valor: 1

 

Abri o arquivo e realmente a posição é 0. Quando é inserido um registro no arquivo, é feito assim:

 

//PREPARA O CONTEÚDO A SER GRAVADO
$conteudo = "$teste;$nome;$idade;$email\r\n";
Observa que é feito uma quebra de linha e com isso sempre será 0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, entendi.

Mas no meu caso a proxima linha é 0.

 

_registros.jpg

 

Resultado:

_result.jpg

Código (o que entendi)

$file="registro.txt";
$linecount = 0;
$handle = fopen($file, "r");
while(!feof($handle)){
	$line = fgets($handle);
	$linecount++;
	
	$posicao = explode(";", $line);
	$proximo_id = $posicao[0];
	$calcula = $proximo_id + 1;
	$proximo_id=$calcula;
}
fclose($handle);
echo "Quantidade de linhas: ". $linecount."<br>";
echo "Proximo Registro: ". $proximo_id."<br>";
		 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tira a linha em branco no final do arquivo que vai funcionar, ou faça:

<?php
$file = "registro.txt";
$linecount = 0;
$handle = fopen($file, "r");

while(!feof($handle)){
	$line = fgets($handle);
    if (empty($line))
        continue;
	$linecount++;
	
	$posicao = explode(";", $line);
	$proximo_id = $posicao[0] + 1;
}
fclose($handle);

echo "Quantidade de linhas: {$linecount}<br>";
echo "Proximo Registro: {$proximo_id}<br>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi Assim:

    $arquivo = fopen ("registros.txt", "r"); 
	$num_linhas = 1; 
	while (!feof ($arquivo)) {
		$linha=fgets($arquivo);
		if ($linha != "\n" && $linha != "") {
			$num_linhas++; 
			$ultima = $linha;
			$posicao = explode(";", $ultima);
			$id_atual = $posicao[0];
			$proximo_id = $id_atual + 1;
		}
	} 
	fclose ($arquivo); 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.