Página 5 de 7

Usando tabelas dBase com PHP

Enviado: 08 Abr 2014 22:56
por Zombie
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

Usando tabelas dBase com PHP

Enviado: 09 Abr 2014 18:00
por rochinha
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:

Código: Selecionar todos

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.

Usando tabelas dBase com PHP

Enviado: 09 Abr 2014 18:39
por Zombie
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

Código: Selecionar todos

//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

}

Usando tabelas dBase com PHP

Enviado: 10 Abr 2014 01:28
por rochinha
Amiguinho,

Código: Selecionar todos

tem que ser sequencial (numerico) isso?
Esse é o praxe. Este numero sequencial deverá ser usado como link para a busca do registro, estilo:

Código: Selecionar todos

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
}

Usando tabelas dBase com PHP

Enviado: 10 Abr 2014 09:27
por Zombie
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

Código: Selecionar todos

$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

Usando tabelas dBase com PHP

Enviado: 10 Abr 2014 10:20
por rochinha
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:

Código: Selecionar todos

echo "<FORM ..."
for($i=1;$i<=$rows;$i++) {
	     $registro = dbase_get_record($con,$i);
	 
	     echo "    <input value=" . $registro[0] . ">\n";
	}
echo "</FORM>

Usando tabelas dBase com PHP

Enviado: 10 Abr 2014 10:45
por Zombie
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?

Usando tabelas dBase com PHP

Enviado: 10 Abr 2014 11:17
por rochinha
Amiguinho:

Faça mais ou menos assim:

Código: Selecionar todos

$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.

Usando tabelas dBase com PHP

Enviado: 10 Abr 2014 11:40
por Zombie
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

Usando tabelas dBase com PHP

Enviado: 22 Abr 2014 11:50
por Zombie
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

Usando tabelas dBase com PHP

Enviado: 22 Abr 2014 15:29
por rochinha
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.

Usando tabelas dBase com PHP

Enviado: 17 Mai 2014 11:53
por cjp
Amigos,

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

Código: Selecionar todos

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:

Código: Selecionar todos

<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?

Usando tabelas dBase com PHP

Enviado: 17 Mai 2014 18:05
por Toledo
cjp escreveu:Será que estou fazendo algo errado?

Código: Selecionar todos

$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,

Usando tabelas dBase com PHP

Enviado: 17 Mai 2014 19:04
por cjp
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?

Usando tabelas dBase com PHP

Enviado: 21 Mai 2014 01:51
por cjp
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:

Código: Selecionar todos

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:

Código: Selecionar todos

<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:

Código: Selecionar todos

 dbase_add_record("tarefas/marina/".$nmbase, $registro);
E na linha 31, que é esta:

Código: Selecionar todos

 dbase_close($nmbase);
Tem algo errado no meu código?