Clipper On Line • Ver Tópico - Usando tabelas dBase com PHP

Usando tabelas dBase com PHP

Discussão sobre outras linguagens de programação.

Moderador: Moderadores

 

Usando tabelas dBase com PHP

Mensagempor Zombie » 08 Abr 2014 22:56

Galera, tudo bom? sei que o post é antigo e tal, mas to com uma duvida cruel aqui e faz tempo que to quebrando a cabeça pra resolver e nada, sou iniciante ainda nao manjo muito, bom vou explicar,

meu sisteminha php lê um arquivo dbf e mostro ele na tela, porem eu preciso alterar alguns dados exemplo

* meus campos tem

nome, sobre nome, idade, endereço, cidade, etc

e são varios registro, dai quero localizar um atraves do que mostro na tela, e alterar ou incluir algum dado que esta faltando.

como posso fazer isso no php? inserir dados no dbf usando php?

obrigado de coração desde já

abs
Zombie
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 6
Data de registro: 08 Abr 2014 22:31
Cidade/Estado: Bragança Pta
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Usando tabelas dBase com PHP

Mensagempor rochinha » 09 Abr 2014 18:00

Amiguinho,

Parece que voce já entrou no trem na penúltima estação. Mas o trem vai volta e portanto pegue carona no primeiro post do tópico para ver alguns exemplos de manuseio dos comandos.

Se voce já lista, abre a tabela etc é porque já tem configurado o módulo em seu servidor web local.

Veja a lista de comandos existentes neste módulo:
dbase_add_record -- Adiciona um registro a um banco de dados dBase
dbase_close -- Fecha um banco de dados dBase
dbase_create -- Cria um banco de dados dBase
dbase_delete_record -- Exclui um registro de um banco de dados dBase
dbase_get_header_info -- Retorna informações do cabeçalho de um banco de dados
dbase_get_record_with_names --  Obtem um registro apartir de um banco de dados dBase em uma matriz associativa
dbase_get_record -- Obtem um registro apartir de um banco de dados dBase
dbase_numfields --  Retorna quantos campos existem em um banco de dados dBase
dbase_numrecords --  Retorna quantos registros existem em um banco de dados dBase
dbase_open -- Abre um banco de dados dBase
dbase_pack -- Apaga permanentemente os registros do banco de dados dBase
dbase_replace_record -- Substitui um registro em um banco de dados dBase


Como voce pode ver não tem um comando Seek ou Locate mas voce pode usar o comando dbase_get_record() onde voce define o numero do registro fisico do mesmo.

Em sua lista, inclua uma coluna contendo o numero do registro ou sequencial. Esta informação numérica deverá ficar em formato de link, onde o link executará o comando dbase_get_record(..., numeroDoRegistro ) e depois capturar todos os dados para então preencher os campos que irão receber manutenção.

Pela existencia de poucos comandos voce deve avaliar o uso pesado, pois o .ASP e o .PHP são poderosos o bastante para manipular qualquer base de dados. Mas convenhamos que quebra um galho.

Graças a Deus o tópico permite falar do uso de tabelas dBase por PHP usando não só os comandos nativos como por ODBC.

Analise todos os posts, tire conclusões e dê sugestões.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4313
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 565 vezes
Mens.Curtidas: 191 vezes

Usando tabelas dBase com PHP

Mensagempor Zombie » 09 Abr 2014 18:39

Amigo, agradeço pela resposta desde já!!! :)) :))

bom meu codigo segue abaixo para você ter uma ideia do que to fazendo, não entendi muito bem a forma que vou pegar esse registro do dbf,
estou lendo os post novamente e fazendo uns testes aqui para ver se consigo, até agora nao consegui nada ainda... :'(

pelo que entendi, eu tenho que criar no dbf um campo em formato de link esse campo tem que ser sequencial (numerico) isso? nao me xinga que sou novo ainda nisso, rs :%

Meu codigo

//Arquivo DBF
$dbname = "teste.dbf";

//Abre o banco de dados Dbase - 0 – somente leitura, 1 – somente escrita, 2 – leitura/escrita
$con = dbase_open($dbname,2) or die("Erro na Conexão com o arquivo DBF");

//Retorna quantos registros tem no banco de dados
$rows = dbase_numrecords($con);

//Lista os dados da Tabela
for($i=1;$i<=$rows;$i++) {
  $registro = dbase_get_record($con,$i);

print $registro[0]; // codigo unico exemplo 0120145, os numeros não se repetem.
print $registro[17]; //nome
print $registro[18]; //idade
print $registro[19]; //cidade

}
Zombie
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 6
Data de registro: 08 Abr 2014 22:31
Cidade/Estado: Bragança Pta
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Usando tabelas dBase com PHP

Mensagempor rochinha » 10 Abr 2014 01:28

Amiguinho,

tem que ser sequencial (numerico) isso?


Esse é o praxe. Este numero sequencial deverá ser usado como link para a busca do registro, estilo:
for($i=1;$i<=$rows;$i++) {
     $registro = dbase_get_record($con,$i);

     echo "    <a href=AlteraRegistro.php?registro=" . $registro[0] . ">" . $registro[0] . "</a>\n";

     print $registro[17]; //nome
     print $registro[18]; //idade
     print $registro[19]; //cidade
}
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4313
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 565 vezes
Mens.Curtidas: 191 vezes

Usando tabelas dBase com PHP

Mensagempor Zombie » 10 Abr 2014 09:27

rs, agora entendi o que você quis dizer "em formato de link" rs.

bom no meu dbf eu criei uma tabela sequencial, agora eu dou um print nela junto com os outros campos....

preciso saber todas as colunas que tenho no dbf, ou posso alterar somente uma coluna do DBF, exemplo altero somente o nome ?

esse "AlteraRegistro.php" eu vou mandar pra pagina o numero do registro.

dentro dessa pagina "AlteraRegistro.php eu pego

$registro = $_GET ['registro'];

$db = dbase_open('teste.dbf', '2');

... como funciona essa parte ?

if (!dbase_replace_record($db, ???, ???)) {
  print 'Não foi possível alterar registro no banco de dados';
}
dbase_close($db);


obrigado desde já pela atenção :)Pos
Zombie
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 6
Data de registro: 08 Abr 2014 22:31
Cidade/Estado: Bragança Pta
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Usando tabelas dBase com PHP

Mensagempor rochinha » 10 Abr 2014 10:20

Amiguinho,

Veja o funcionamento do passo 10 do primeiro post.

Voce devera criar um form e dentro dele colocar os input para cada campo que deseja pegar informações e o conteudo de cada campo jogar no parametro value.

Algo como:
echo "<FORM ..."
for($i=1;$i<=$rows;$i++) {
        $registro = dbase_get_record($con,$i);
   
        echo "    <input value=" . $registro[0] . ">\n";
   }
echo "</FORM>
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4313
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 565 vezes
Mens.Curtidas: 191 vezes

Usando tabelas dBase com PHP

Mensagempor Zombie » 10 Abr 2014 10:45

Então, até ai eu entendi, eu crio um form, pego os dados, e mando eles para a pagina de alteração, e la na pagina pego todos os dados que quero alterar, o que não to conseguindo fazer é nessa pagina de alteração, como vou alterar? como fica essa pagina?

outra duvida é se altero somente o nome, o restante dos dados permanecem no dbf normal? para o registro alterado?
Zombie
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 6
Data de registro: 08 Abr 2014 22:31
Cidade/Estado: Bragança Pta
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Usando tabelas dBase com PHP

Mensagempor rochinha » 10 Abr 2014 11:17

Amiguinho:

Faça mais ou menos assim:
$registro = dbase_get_record($con,$i);
echo "<FORM action=SalvarRegistro.php ..."
echo "           <input value=" . $registro[8] . ">\n";
echo "           <input value=" . $registro[3] . ">\n";
echo "           <input value=" . $registro[4] . ">\n";
echo "           <input value=" . $registro[9] . ">\n";
echo "</FORM>


No SalvaRegistro.php voce salva somente os registros apresentados no FORM.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4313
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 565 vezes
Mens.Curtidas: 191 vezes

Usando tabelas dBase com PHP

Mensagempor Zombie » 10 Abr 2014 11:40

Amigo, deu certo aqui, AGRADEÇO E MUITO PELA PACIÊNCIA E AJUDA, vlwwww mesmo :{ :)Pos :)Pos :-Y :-Y

se alguem precisar chama ai que o que puder ajudar, to aqui.

abssss
Zombie
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 6
Data de registro: 08 Abr 2014 22:31
Cidade/Estado: Bragança Pta
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Usando tabelas dBase com PHP

Mensagempor Zombie » 22 Abr 2014 11:50

rochinha ficou com saudades? rs

brincadeira, kra me tira uma duvida, após alterar um registro no dbf, eu consigo atualizar ele? exemplo alterar e logo após atualizar?

eu consigo alterar tudo certinho porem depois quando abro no pelo FoxPro ele da um erro de codificação e erro de índice dai quando eu organizo eu perco o que eu alterei.

vlwwww
Zombie
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 6
Data de registro: 08 Abr 2014 22:31
Cidade/Estado: Bragança Pta
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Usando tabelas dBase com PHP

Mensagempor rochinha » 22 Abr 2014 15:29

Amiguinho,

O tratamento de .DBF pelo .PHP não leva em consideração arquivos de indice. Portanto se voce deseja visualizar o arquivo alterado por .PHP no FoxPro deverá reindexar.

Para uma melhor performance ou tratamento de indices voce deverá utilizar abertura de .DBF por meio de ODBC, pois os comandos dBase para .PHP são básicos demais e não oferecem maior estrutura.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4313
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 565 vezes
Mens.Curtidas: 191 vezes

Usando tabelas dBase com PHP

Mensagempor cjp » 17 Mai 2014 11:53

Amigos,

Estou precisando de ajuda novamente nesta questão: estou tentando criar uma tabela dBase em PHP, mas está dando o seguinte erro:

PHP Warning:  dbase_create() [<a href='function.dbase-create'>function.dbase-create</a>]: Unable to create database (13): Permission denied in C:\Inetpub\Wwwroot\inaciobr\criarec.php on line 28


Minha função está assim:

<html>
<head>
  <title>Criando recado</title>
</head>
<body>
<?php
$dsn = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=".dirname($_SERVER['SCRIPT_FILENAME'])."/meusarq/agenda/;";
echo $dsn;
$conn= odbc_connect($dsn,"","");
echo $dsn;
if(!$conn)
{ exit("conexao falhou: ".odbc_errormsg()); }
else
echo "Conectado";

sleep(5);
// definindo a estrutura
$estruct = array(
  array("recado", "C", 240),
  array("resposta", "C", 240),
  array("data", "D"),
  array("hora", "C", 8),
);
$nmbase = "rec"+date("H:i");
echo $nmbase;

// criando o banco de dados
if (!dbase_create($nmbase, $estruct)) {
  print "O banco de dados não pode ser criado.";
}

?>


Será que estou fazendo algo errado?
Inacio de Carvalho Neto
cjp
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1161
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 6 vezes
Mens.Curtidas: 12 vezes

Usando tabelas dBase com PHP

Mensagempor Toledo » 17 Mai 2014 18:05

cjp escreveu:Será que estou fazendo algo errado?

$nmbase = "rec"+date("H:i");
echo $nmbase;

No código acima você está mostrando qual será o nome do arquivo. Qual é o nome do arquivo?

Lembrando, que no nome do arquivo não pode conter caracteres especiais, apenas letras e números são permitidos. E também a pasta onde será criado o arquivo tem que ter permissão para gravação, então verifique com o suporte do seu servidor qual o procedimento para dar permissão de gravação para a pasta.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3075
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 251 vezes
Mens.Curtidas: 254 vezes

Usando tabelas dBase com PHP

Mensagempor cjp » 17 Mai 2014 19:04

Na verdade esse nome da base era apenas um teste que eu estava fazendo. Quero arrumar um jeito em que o nome da base varie em cada caso, por isso pensei em usar a hora atual como complemento do nome da base a ser criada, para diferenciá-la de outras.

Mas mesmo usando um nome fixo (recado), não está funcionando. Ainda está dando "Permission denied". Então, deve ser a outra questão que vc citou: falta de permissão para gravar na pasta. O estranho é que eu consigo salvar arquivos nessa mesma pasta (/meusarq/agenda) sem problema, tanto pelo FTP do Windows quanto pelo DOS ou pelo Harbour. Será que precisa de uma autorização especial para criar arquivos da forma como estou fazendo aqui?
Inacio de Carvalho Neto
cjp
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1161
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 6 vezes
Mens.Curtidas: 12 vezes

Usando tabelas dBase com PHP

Mensagempor cjp » 21 Mai 2014 01:51

Caros colegas,

Resolvi a questão no provedor e funcionou a criação da base.

Agora estou tentando adicionar um campo à base criada, mas está dando o seguinte erro:

PHP Warning:  dbase_add_record() [<a href='function.dbase-add-record'>function.dbase-add-record</a>]: Unable to find database for identifier 0 in C:\Inetpub\Wwwroot\inaciobr\criarec.php on line 29
PHP Warning:  dbase_close() [<a href='function.dbase-close'>function.dbase-close</a>]: Unable to find database for identifier 0 in C:\Inetpub\Wwwroot\inaciobr\criarec.php on line 31


A minha função está assim:

<html>
<head>
  <title>Criando recado</title>
</head>
<body>
<?php
$dsn = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=".dirname($_SERVER['SCRIPT_FILENAME'])."/meusarq/agenda/;";
$conn= odbc_connect($dsn,"","");
if(!$conn)
{ exit("conexao falhou: ".odbc_errormsg()); }
else
//echo "Conectado";

// definindo a estrutura
$estruct = array(
  array("recado", "C", 240),
  array("resposta", "C", 240),
  array("data", "D"),
  array("hora", "C", 8),
);
$nmbase = "recU".date("i").date("s").".dbf"; //+date("H:i");

echo '<br>';

// criando o banco de dados
dbase_create("tarefas/marina/".$nmbase, $estruct);
dbase_open("tarefas/marina/".$nmbase, 2);
$registro = array("testando 1 2 3", "   ", date("d/m/y"), date("H:i:s"));
dbase_add_record("tarefas/marina/".$nmbase, $registro);
echo "Recado criado com sucesso";
dbase_close($nmbase);

?>


O erro está dando na linha 29, que é esta:

 dbase_add_record("tarefas/marina/".$nmbase, $registro);


E na linha 31, que é esta:

 dbase_close($nmbase);


Tem algo errado no meu código?
Inacio de Carvalho Neto
cjp
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1161
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 6 vezes
Mens.Curtidas: 12 vezes

Anterior Próximo



Retornar para Outras linguagens de programação

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro