Jump to content


Photo

Banco De Dados Com Txt


  • Faça o login para participar
25 replies to this topic

#1 sk15

sk15

    Super Veterano

  • Usuários
  • 2071 posts
  • Sexo:Masculino
  • Localidade:SP - SP

Posted 12/08/2004, 15:41

Recentemente pude verifica que as pessoas(os programadores PHP, cito) tem muita dificuldades em se ultilizar de arquivos de texto, que em línguagem PERL é conhecido como FLAT, então neste artigo pretendo mostrar como escrever, exibir, páginar, mudar e deletar dados de arquivos de texto.

1º Disposição dos Dados
Você deve ter primeiramente a noção de como serão gravados os dados no arquivo de texto, para que tenha um melhor aproveitamento do mesmo.
Serão gravados uma linha abaixo da outra, e com um difusor separador que no nosso caso vou usar "|", estou usando ele por que não é muito usual e se for um
caractere usual confundira o sistema na hora da leitura.

Exemplo:
Dado1|Dado2|Dado3 [Linha 1]
Dado1|Dado2|Dado3 [Linha 2]
Dado1|Dado2|Dado3 [Linha 3]

Assim serão disposta os dados no arquivo de texto.
Como se fossem um banco de dados visto de um sistema de adminsitração.

2º A Gravação
Da gravaçao do arquivo, esse só tem uma forma ao contrario da leitura que tem outras, pois bem é só abrir o arquivo e gravar os dados que devam vir de um "formulário", "query string", "cookie" ou qualquer outro meio idôneo de se enviar dados, não se esqueçendo do "\n"(nova linha) no final, isso garantira que ele realmente pule de linha.
* Lembrado: Sempre que o apêndice de abertura deve ser:
a = Colocar uma linha abaixo da outra, ou 
a+ = Colocar uma linha abaixo da outra, e cria o arquivo se não existir ou em termos mais técnicos coloca o ponteiro de gravação no final do arquivo.
Uma observação que devo salientar e que dependendo de onde vem (como um textarea) e o tipo de dado pode comromper a linha.
Dai uma solução adotada é tirar esses caracteres que prejudique a linha.
Compete ao programador definir qual dado está mais sujeito a rebeber esses caracteres e tomas as diligencia de correção;

PHP
Exemplo [Retirara de dados que comprometem a linha]:
$dado = str_replace("\t", "", $dado);  
$dado = str_replace("\r", "", $dado);
$dado = str_replace("\n", '\n', $dado);
$dado = str_replace("|", "|", $dado);

Exemplo [Gravaçao normal]:
<?php
$fp
= fopen("arquivo.txt","a");
fwrite($fp,"$dado1|$dado2|$dado3\n");
fclose($fp);
?>


3º A Leitura
Come citei no inciso anterior a leitura possui mais de 1(um) modo com as funções:
"file()+while()+each()+explode()", "file()+for()+count()+explode()" e também com "fopen()+fread()+fclose()+while()/for()+explode()", de qualquer forma vou ultilizar apenas uma a (2º) para não se confudirem, e também fica findo a facilitação, para a ultilização de páginação.
É páginação pode ser feita com txts ao contrario do que muitos pensam.
Primeiro devemos trasformar cada linha em array ultilizado a função file(), depois contar quantas linhas há com o count(), lista-las com o for e por último extrair os dados dos "|" com o explode().

Exemplo:
<?php
$linha = file("arquivo.txt");
$total = count($linha);
for ($i = "0"; $i < $total; $i++){
list($dado1,$dado2,$dado3) = explode("|",$linha[$i]);
echo "Dado 1: $dado1 - Dado 2: $dado2 - Dado 3: $dado3";
echo "+ <a href=\"deletar.php?codigo=$i\">Apagar</a>-<a href=\"mudar.php?codigo=$i\">Mudar</a><br />";
}
?>


A parte do explode(), também pode ser escrita de forma simples sem list()
para no caso de não for nescessário o uso de todos os dados na listagem:

Exemplo:
<?php
$linha = file("arquivo.txt");
$total = count($linha);
for ($i = "0"; $i < $total; $i++){
$dados = explode("|",$linha[$i]);
echo "Dado 1: $dados[0] - Dado 2: $dados[1] - Dado 3: $dados[2]";
echo "+ <a href=\"deletar.php?codigo=$i\">Apagar</a>-<a href=\"mudar.php?codigo=$i\">Mudar</a><br />";
}
?>


Uma coisa que devo dizer é se você quiser exibir as últimas gravações primeiro, em alusão dessas serem as mais novas, para ser mostradro basta usar a função array_reverse() depois de file(), mas mesmo assim a desvantagem do (texto X banco de dados) nesse quesito de organição, é enorme no sentido de mostragem por order de coluna, ascendente, descendente.

PHP
Exemplo:
<?php
$linha
= file("arquivo.txt");
$linha = array_reverse($linha);
$total = count($linha);
/* Resto do script indelével */
?>


3.1º A Leitura com Páginação
Agora vou mostrar como se fazer a páginação de um arquivo de texto o que é possivel e muitos pensam que não.
A primeira atitude a se tomar e colocar uma variável definido quandos dados por página vamos colocar nesse exemplo será 5, depois para ser uma páginação bem feita somaremos quantas páginas vão existir na divisão do total por 5 e vamos ultilizar a função ceil() para arredondar valores quebrados e será tirado 1(um) pelo fato de estar lidando com array e eles começam do 0(zero), em seguida iremos verificar se a página requerida pelo usuário é valida ou seja que contenha
numero e não exceda do total que exite em especial devo citar a função is_numeric(), que serve para verificar se é um número, depois vamos vazer as somas do inicio/final das linhas de acordo com a página e o final, e verificar se o final e maior que o total para não haver erros, depois vamos formular os links de ida e volta.

Exemplo:
<?php
$divisao = "5";
$linha  = file("arquivo.txt");
$total  = count($linha);
$paginas = ceil($total/$divisao)-1;

if (!$pagina)                  { $pagina = "0";    }
else if (!is_numeric($pagina)) { $pagina = "0";    }
else if ($pagina > $paginas)  { $pagina = "0";    }
else                          { $pagina = $pagina; }

$inicio = $pagina*$divisao;
$final  = $inicio+$divisao;
$final  = ($final > $total) ? $total : $final;

for ($i = $inicio; $i < $final; $i++){
list($dado1,$dado2,$dado3) = explode("|",$linha[$i]);
echo "Dado 1: $dado1 - Dado 2: $dado2 - Dado 3: $dado3";
echo "+ <a href=\"deletar.php?codigo=$i\">Apagar</a>-<a href=\"mudar.php?codigo=$i\">Mudar</a><br />";
}

$anterior = $pagina-1;
$proxima  = $pagina+1;
$paginass = ($paginas <= "0") ? "1" : $paginas+1;

echo "[Total <b>$total</b> Dados - Página <b>$proxima</b> de <b>$paginass</b>]<br />";
echo ($pagina == "0") ? "« Anterior" : "<a href=\"$PHP_SELF?pagina=$anterior\">« Anterior</a>";
echo "  ";
for ($i = "0"; $i < $paginass; $i++){
$atual = $i+1;
echo ($i == $pagina) ? "<b>$atual</b> " : "<a href=\"$PHP_SELF?pagina=$i\">$atual</a> ";
}
echo "  ";
echo ($pagina < $paginas) ? "<a href=\"$PHP_SELF?pagina=$proxima\">Próxima »</a>" : "Próxima »";
?>


4º Deletando Dados
Agora chegou a hora de tirar um dado do arquivo de texto.
Bem o processo é simples basta indicar a linha que você deseja tirar por qualquer meio como query string "deletar.php?codigo=7" e ele a tirara.
O Processo consiste em gravar todo o arquivo em uma variável diz-se file(), e depois limpar o arquivo o re-escrevendo totalmente sem a dita cuja linha.
É um processo chato, ruim mas fazer o que !?!?! não existe melhor jeito.
* Lembrado: Sempre que o apêndice de abertura deve ser:
w = Limpar todo o arquivo, ou 
w+ = Limpar todo o arquivo, e cria o arquivo se não existir
ou em termos mais técnicos limpa e coloca o ponteiro de gravação no inicio do arquivo.
Devo fazer mais uma observação se você usar o array_reverse() na listagem e no link o mesmo terá de usa-lo aqui também, senão ele lera as linhas de forma trocada.

PHP
Exemplo:
<?php
$arquivo
= "arquivo.txt";
$linha  = file($arquivo);
$total  = count($linha);
$fp = fopen($arquivo,"w+");
for (
$i = "0"; $i < $total; $i++){
list(
$dado1,$dado2,$dado3) = explode("|",$linha[$i]);
if (
$codigo != $i){
fwrite($fp,"$dado1|$dado2|$dado3");
}}
fclose($fp);
?>


5º Mudando Dados
E por final mudar os dados que exige 2(duas) estapas a primeita consiste em pegar os dados e segundo propriamente dita mudar os dados, a parte de pegar é simples é como a listagem só que em vez de exibir será trasformado em um Array de uso do sistema, você pode pegar a linha que queira com query string também "mudar.php?codigo=7", perceba que a novidande no caso é o "break"
para quando ele achar a linha para de listar assim consumindo menos tempo e bandhitch.
Devo fazer mais uma observação se você usar o array_reverse() na listagem e no link o mesmo terá de usa-lo aqui também, senão ele lera as linhas de forma trocada.

Exemplo:
<?php
$linha = file("arquivo.txt");
$total = count($linha);
for ($i = "0"; $i < $total; $i++){
list($dado1,$dado2,$dado3) = explode("|",$linha[$i]);
if ($codigo == $i){
$dados = array($codigo,$dado1,$dado2,$dado3);
break;
}}
echo "<form action=\"muda.php\" method=\"post\">\n".
"<input type=\"hidden\" name=\"codigo\" value=\"$dados[0]\" />\n".
"Dado 1: <input type=\"text\" name=\"dado1\" value=\"$dados[1]\" /><br />\n".
"Dado 2: <input type=\"text\" name=\"dado2\" value=\"$dados[2]\" /><br />\n".
"Dado 3: <input type=\"text\" name=\"dado3\" value=\"$dados[3]\" /><br />\n".
"<input type=\"submit\" value=\"Mudar\" /></form>";
?>


E agora da mudança propiamente dita a diferença entre mudar e deletar é minina uma vez que o processo é o mesmo apagar e recolocar tudo de novo, só que sem tirar nenhuma linha, apenas trocar
os dados delas.

PHP
<?php
$arquivo
= "arquivo.txt";
$linha  = file($arquivo);
$total  = count($linha);
$fp = fopen($arquivo,"w+");
for (
$i = "0"; $i < $total; $i++){
list(
$dado1_txt,$dado2_txt,$dado3_txt) = explode("|",$linha[$i]);
if (
$codigo == $i){
fwrite($fp,"$dado1|$dado2|$dado3\n");
} else {
fwrite($fp,"$dado1_txt|$dado2_txt|$dado3_txt");
}
}
fclose($fp);
?>


Bem isso é tudo pessoal; espero que de alguma forma ajude na construção de seus scripts.
Qualquer coisa escreve AI !!!

//Editado por motivo de erro na caixa de texto PHP do fórum.. (danificando o código)

Edição feita por: felipensp, 21/08/2004, 15:04.


#2 K-19

K-19

    Normal

  • Usuários
  • 91 posts
  • Sexo:Não informado
  • Localidade:Viseu
  • Interesses:bues deles

Posted 12/08/2004, 20:36

Seu tutorial esta excelente!
Mas só uma coisa, voçe testou ele antes de postar??
Pergunto isto pk voçe se esqueçeu de muitas \, mas tirando isso o tuto esta muito bom. Recomendo
www.Scripts.kom.pt - My WebPage

#3 Chinello Cybernético

Chinello Cybernético

    Simplesmente "Chinello"

  • Usuários
  • 1892 posts
  • Sexo:Masculino
  • Localidade:Canoas - RS

Posted 13/08/2004, 02:48

Seu tutorial esta excelente!
Mas só uma coisa, voçe testou ele antes de postar??
Pergunto isto pk voçe se esqueçeu de muitas \, mas tirando isso o tuto esta muito bom. Recomendo

Aonde ele eskeceu uma contra-barra?

O q aconteceu, é q o meu script da TAG do PHP usado aki no fórum tem um BUG q qdo é adicionado ao código mais de uma contra-barra seguida de uma aspa, ele insere o código ASCII em HTML da contra-barra..

Mas o script tá todo certinho (olhando por cima).. ;) (y)

Fui.. :P
Diego Sampaio - kroW - PHP Framework > http://chinelloweb.net/
chinello at gmail dot com

System > Athlon 64 3200+ Mobile | Kubuntu 7.04 Fesity Fawn AMD64 | Kernel 2.6.20-16
Coding @ KDE 3.5.7 | PHP 5.2.1 | Apache 2.2.3 | MySQL 5.0.38

#4 H²O

H²O

    Turista

  • Usuários
  • 41 posts
  • Sexo:Não informado

Posted 13/08/2004, 04:29

A parte de deletar, editar e a paginação não funcionou aqui.

Edição feita por: H²O, 13/08/2004, 04:48.

Se hulmides quando quiseres adquirir a sabedoria, se mais ainda quando a tiver adquirido.
H²O¹

#5 Balala

Balala

    What you want for yourself?

  • Ex-Admins
  • 3357 posts
  • Sexo:Não informado
  • Localidade:Jaraguá do Sul - SC
  • Interesses:http://forum.wmonline.com.br/index.php?showtopic=5792

Posted 13/08/2004, 08:33

A parte sobre não estar funcionando é provavel que seja pelo motivo das aspas. Excelente participação (y) Muito bom tutorial.
Balala - Admin Geral Webfórum - Retired
Twitter
Stop Spreading Lies!
Posted Image

#6 H²O

H²O

    Turista

  • Usuários
  • 41 posts
  • Sexo:Não informado

Posted 13/08/2004, 09:11

Não é isso eu arrumei as aspas, ele não retorna erro mais não altera o arquivo, o tutorial é bom porém acho que está com bug.
Se hulmides quando quiseres adquirir a sabedoria, se mais ainda quando a tiver adquirido.
H²O¹

#7 sk15

sk15

    Super Veterano

  • Usuários
  • 2071 posts
  • Sexo:Masculino
  • Localidade:SP - SP

Posted 13/08/2004, 10:53

Eu testei esses Scripst exaustivamente...
Não sei gosto de usar arquivo de texto ...
Se uma aplicação é simples so uso arquivos de textos ....
Mas nem tinha reparado o fórum relamente tá com um BUG feito que ele tá confundido os caracteres ASCII.

Exemplos:
&amp;#92; = \
$dado = str_replace("|", "|", $dado); = &amp;#124; (na segunda barra)

Quanto ao seu erro H²O deve ser seu PHP ... que deve não estár lendo os arquivo ou alguma configurações ou seuservidore que não permite o uso de arquivos de textos por segurança :wacko:

Edição feita por: sk15, 13/08/2004, 10:55.


#8 H²O

H²O

    Turista

  • Usuários
  • 41 posts
  • Sexo:Não informado

Posted 13/08/2004, 11:00

Hum, não sei, é servidor local(Apache2, PHP5), já usei arquivo TXT aqui e não deu problema, não sei então.
Justo Deletar/Editar que não sei fazer não funcionou =\.
Se hulmides quando quiseres adquirir a sabedoria, se mais ainda quando a tiver adquirido.
H²O¹

#9 X-Sites

X-Sites

    Turista

  • Usuários
  • 58 posts
  • Sexo:Não informado

Posted 21/08/2004, 14:39

aki também esta dando um erro na parte de paginação

Parse error: parse error, unexpected '<' in /home/www/pagina.php on line 19

Tentei achar o erro e nao consegui ....

Editar e deletar tb nao funcionou :unsure:

Edição feita por: X-Sites, 21/08/2004, 14:52.


#10 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 21/08/2004, 14:52

O que tem nessa pagina.php na linha 19??
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#11 X-Sites

X-Sites

    Turista

  • Usuários
  • 58 posts
  • Sexo:Não informado

Posted 21/08/2004, 14:53

Obrigado pessoal...

Ja consegui arrumar o erro (y)

Edição feita por: X-Sites, 24/08/2004, 07:49.


#12 X-Sites

X-Sites

    Turista

  • Usuários
  • 58 posts
  • Sexo:Não informado

Posted 24/08/2004, 08:00

Preciso de + 1 ajudinha

Estou fazendo o seguinte, tenho a pagina "download.php" aqui eh pra exibir a lista somente com os nome dos downloads e o link para as informações, dai ao clicar no nome abre a pagina "exibir_download.php" dai aqui ele mostra os dados do download ... tentei fazer mais não consegui =\ não sei como faço para mandar o sinal para a pagina "exibir_downlod.php" qual dos downloads listado no DB que eh para ele exibir... alguem pode ter uma ideia pra me ajudar ....

Queria saber mais uma coisa, tem como fazer exibir os dados por ordem alfabetica ?, o DADO 1 por exemplo ...

Tem como exibir somente os 5 ultimos cadastrados ? tb pelo DADO 1

Esse tutorial ficou 10 mesmo, muito bom ...

Edição feita por: X-Sites, 24/08/2004, 08:12.


#13 Hyoga de Cisne

Hyoga de Cisne

    Ativo

  • Banidos
  • PipPipPipPip
  • 359 posts
  • Sexo:Não informado
  • Interesses:Gosto muito de PHP, adoro Webdesign. Sou muito fã de ROCK! Gosto de ajudar à quem precisa, e merece...<br>Gosto de sempre estar atualizado de aprender mais a cada dia que se passa...

Posted 02/01/2005, 19:47

Tbm to com essa duvida
hyoga.de.cisne
()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
AnimeSchool.com.br - O Melhor em animes, com muitos episódios, informação e muito mais!

#14 leinad

leinad

    12 Horas

  • Usuários
  • 253 posts
  • Sexo:Não informado
  • Localidade:Gramado-Rs/ Madrid-España
  • Interesses:Puty... muita coisa! mulher! designer em geral! pixels vetores,amo photoshop! flash eh minha vida! e sem php eu morro! amu charlie brown Jr!

Posted 24/01/2005, 20:56

Oi adorei o seu codigo! fiz algumas coisas mas algumas coisas q fiz naum deu certu... voce poderia colocar u zip ae?
Brigadaum desde jah
"Programação é como sexo... um erro e você estará comprometido pelo resto de sua vida."

#15 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 25/01/2005, 09:18

Uhh esse povo tem problema!

es um TUTORIAL e não um SCRIPT COMPLETO!

assim sendo que algumas partes SÃO EXEMPLOSSSS

e com isso basta LERRR o TUTORIAL para ver o que está realmente acontecendo nos EXEMPLOSSSS

sk15 meus parabens está SHOW seu TUTORIAL !

até + !

Edição feita por: Goku Jr, 25/01/2005, 09:19.

-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq