Usando tabelas dBase com PHP

Fórum sobre outras linguagens de programação.

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Usando tabelas dBase com PHP

Mensagem por cjp »

Funcionou, meu caro. Muito obrigado.

Entretanto, ainda está dando o seguinte aviso (parece que não é erro):

Código: Selecionar todos

PHP Warning:  odbc_connect() [<a href='function.odbc-connect'>function.odbc-connect</a>]: SQL error: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified, SQL
Também gostaria de saber se existe alguma possibilidade de pesquisar dentro dos campos da base.
Inacio de Carvalho Neto
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Usando tabelas dBase com PHP

Mensagem por rochinha »

Amiguinho,

Analisando o trecho abaixo:

Código: Selecionar todos

$dsn = "DRIVER={Driver da Microsoft para o dBase (*.dbf)};DBQ=".dirname($_SERVER['SCRIPT_FILENAME']).";";
$conn= odbc_connect($dsn,"","");
Modifique para:

Código: Selecionar todos

$dsn = "DRIVER={Driver da Microsoft para o dBase (*.dbf)};DBQ=".dirname($_SERVER['SCRIPT_FILENAME']).";";
echo $dsn;
$conn= odbc_connect($dsn,"","");
echo $dsn;
echo irá mostrar o resultado, identico ao @..SAY de forma que voce veja o que realmente está passando ao PHP.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

Usando tabelas dBase com PHP

Mensagem por filizola »

alguém aí teria uma consulta ao estoque de produtos ?
"Um passo a frente, e já não estará mais no mesmo lugar..."
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Usando tabelas dBase com PHP

Mensagem por cjp »

Ok, apareceu.

E quanto à outra questão: existe uma forma de filtrar campos da base para a exibição? Ou fazer uma busca nos campos?
Inacio de Carvalho Neto
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Usando tabelas dBase com PHP

Mensagem por rochinha »

Amiguinhos,

Segue um exemplo de listagem em uma base de dados onde acontece uma fultragem(SELECT) dos dados e apresentação de conteúdo de campos selecionados:

Código: Selecionar todos

<html>
<body>

<?php
$dsn = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=".dirname($_SERVER['SCRIPT_FILENAME']).";";
$conn= odbc_connect($dsn,"","");
if(!$conn)
   { exit("conexao falhou: ".odbc_errormsg()); }
   $sql="SELECT * FROM clientes WHERE estado = 'SP'";
   $rs=odbc_exec($conn,$sql);
   if (!$rs)
      {exit("Error in SQL");}
      echo "<table><tr>";
      echo "<th>Nome</th>";
      echo "<th>Telefone</th></tr>";
      while (odbc_fetch_row($rs))
        {
        $compname=odbc_result($rs,"Nome");
        $conname=odbc_result($rs,"Telefone");
        echo "<tr><td>$compname</td>";
        echo "<td>$conname</td></tr>";
        }
      odbc_close($conn);
      echo "</table>";
?>

</body>
</html>
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Usando tabelas dBase com PHP

Mensagem por cjp »

Funcionou, meu caro. Muito obrigado.

Mas ainda me faltam duas coisas para isso ficar perfeito:

1) preciso deixar o usuário do site escolher o filtro; ou seja, preciso abrir um campo para ele digitar o filtro a ser usado;

2) ao invés de WHERE estado = 'SP', eu precisava de algo como WHERE 'SP' $ estado, para ele localizar uma parte do campo; tentei assim, mas não funcionou.

Por favor, dá uma mais ajudazinha pra terminar isso. Obrigado.
Inacio de Carvalho Neto
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Usando tabelas dBase com PHP

Mensagem por rochinha »

Amiguinho,

Não tem muito segredo, bastará voce pensar nos formulários, ou seja, assim como se cria uma tela com get voce deverá criar um form com inputs e direcionar para um script que faça a verificação e traga o resultado:

Código: Selecionar todos

<!DOCTYPE html> 
<html>
<body> 
  
        <form action="filtrar.php" method="post">

            <label>Pesquisar Estado:</label>
            <input type="text" name="txtEstado" id="txtEstado" value="Digite a UF aqui" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Digite a UF aqui';}">
            <input type="submit" id="Pesquisar" value="Pesquisar">

        </form>

</body>
</html>

Código: Selecionar todos

<?
$txtEstado = $_POST["txtEstado"];

$dsn = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=".dirname($_SERVER['SCRIPT_FILENAME']).";";
$conn= odbc_connect($dsn,"","");
if(!$conn)
   { exit("conexao falhou: ".odbc_errormsg()); }
   $sql="SELECT * FROM clientes WHERE estado = '$txtEstado'";
   $rs=odbc_exec($conn,$sql);
   if (!$rs)
      {exit("Error in SQL");}
      echo "<table><tr>";
      echo "<th>Nome</th>";
      echo "<th>Telefone</th></tr>";
      while (odbc_fetch_row($rs))
        {
        $compname=odbc_result($rs,"Nome");
        $conname=odbc_result($rs,"Telefone");
        echo "<tr><td>$compname</td>";
        echo "<td>$conname</td></tr>";
        }
      odbc_close($conn);
      echo "</table>";
?>
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Usando tabelas dBase com PHP

Mensagem por cjp »

Entendi, meu caro.

Mas eu devo estar fazendo algo errado ao adaptar pro que preciso, pois está sumindo a tela depois de clicar em Pesquisar.

Minha função ficou assim:

Código: Selecionar todos

<!DOCTYPE html> 
<html>
<body> 
 
    <form action="filtrar.php" method="post">

      <label>Pesquisar Compromisso:</label>
      <input type="text" name="Compr" id="Compr" value="Digite aqui parte do texto procurado" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Digite aqui parte do texto procurado';}">
      <input type="submit" id="Pesquisar" value="Pesquisar">

    </form>

</body>
</html>


<?
$txtEstado = $_POST["Compr"];

$dsn = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=".dirname($_SERVER['SCRIPT_FILENAME']).";";
$conn= odbc_connect($dsn,"","");
if(!$conn)
 { exit("conexao falhou: ".odbc_errormsg()); }
 $sql="SELECT * FROM agcom WHERE compr = '$txtEstado'";
 $rs=odbc_exec($conn,$sql);
 if (!$rs)
   {exit("Error in SQL");}

      echo "<table><tr>";
   echo "<th>Data     Compromisso    Campo    Hora    Vínculo</th></tr>";

   while (odbc_fetch_row($rs))
   {
      echo "<tr><td>".odbc_result($rs, "data")."</td></tr>";
      echo "<tr><td>".odbc_result($rs, "compr")."</td></tr>";
      echo "<tr><td>".odbc_result($rs, "campo")."</td></tr>";
      echo "<tr><td>".odbc_result($rs, "hora")."</td></tr>";
      echo "<tr><td>".odbc_result($rs, "vinculo")."</td></tr>";
   }
   odbc_close($conn);


   echo "</table>";
?>
Um primeiro problema é que, antes mesmo de fazer a pesquisa, já está aparecendo todos os campos da base.

Mas o pior é que, depois de clicar em Pesquisar, o site simplesmente fecha, abrindo a página inicial do browser, sem nenhuma informação.

O que eu fiz errado?
Inacio de Carvalho Neto
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Usando tabelas dBase com PHP

Mensagem por rochinha »

Amiguinho,

Esqueci de dizer que o trecho que estiver entre de "<?" e "?>" é o conteúdo de filtrar.php que deve ser salvo em separado.

Sendo o conteúdo de filtrar.php:

Código: Selecionar todos

<?php

$dns=...
...

?>
Veja que acrescentei a sigla php que para mim funcionou sem e com ela.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Usando tabelas dBase com PHP

Mensagem por cjp »

Resolveu a parte de estar aparecendo junto e também a parte do erro de fechar o site.

Mas ainda não está filtrando a base; estão aparecendo todos os campos da base, independentemente do que eu digite na pesquisa.

O que eu ainda estou fazendo errado?

Minha função está assim:

Código: Selecionar todos

<!DOCTYPE html> 
<html>
<body> 
 
    <form action="filtrar.php" method="post">

      <label>Pesquisar Compromisso:</label>
      <input type="text" name="Compr" id="Compr" value="Digite aqui parte do texto procurado" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Digite aqui parte do texto procurado';}">
      <input type="submit" id="Pesquisar" value="Pesquisar">

    </form>

</body>
</html>


E o filtrar.php está assim:

Código: Selecionar todos

<?
$txtEstado = $_POST["Compr"];

$dsn = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=".dirname($_SERVER['SCRIPT_FILENAME']).";";
$conn= odbc_connect($dsn,"","");
if(!$conn)
 { exit("conexao falhou: ".odbc_errormsg()); }
 $sql="SELECT * FROM agcom WHERE compr = '$txtEstado'";
 $rs=odbc_exec($conn,$sql);
 if (!$rs)
   {exit("Error in SQL");}

      echo "<table><tr>";
   echo "<th>Data     Compromisso    Campo    Hora    Vínculo</th></tr>";

   while (odbc_fetch_row($rs))
   {
      echo "<tr><td>".odbc_result($rs, "data")."</td></tr>";
      echo "<tr><td>".odbc_result($rs, "compr")."</td></tr>";
      echo "<tr><td>".odbc_result($rs, "campo")."</td></tr>";
      echo "<tr><td>".odbc_result($rs, "hora")."</td></tr>";
      echo "<tr><td>".odbc_result($rs, "vinculo")."</td></tr>";
   }
   odbc_close($conn);


   echo "</table>";
?>

Inacio de Carvalho Neto
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

Usando tabelas dBase com PHP

Mensagem por filizola »

name="txtEstado" id="txtEstado" e nao name="compr" id="compr"
"Um passo a frente, e já não estará mais no mesmo lugar..."
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Usando tabelas dBase com PHP

Mensagem por cjp »

Continua na mesma, meu amigo. Ainda não resolveu.

De fato eu havia alterado o exemplo, pois achei que era pra colocar o nome do campo da base, mas agora coloquei de volta como estava, e não resolveu.
Inacio de Carvalho Neto
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Usando tabelas dBase com PHP

Mensagem por Toledo »

Amigo, tenta o seguinte:

Código: Selecionar todos

$sql="SELECT * FROM agcom WHERE compr = '".$txtEstado."'";
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
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Usando tabelas dBase com PHP

Mensagem por cjp »

Ainda não resolveu. Continua aparecendo todos os campos da base após teclar em Pesquisar.
Inacio de Carvalho Neto
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Usando tabelas dBase com PHP

Mensagem por rochinha »

Amiguinho,

Quando se trata de SQL, sentenças como: SP, Sp, sP ou sp são totalmente diferentes.

Se voce tenta pesquisar em uma base conteúdo em minusculas usando critica em maiúsculas não obterá exito.

Tem sim algum erro na sentença SQL para isto na linha abaixo do $sql="SELECT * FROM agcom .../b] coloque uma linha:

Código: Selecionar todos

echo $dns;
Para visualizar o resultado do comando. Se voce está filtrando o erro acontece se nada é mostrado. Se esta aparecendo tudo é porque satisfaz o filtro.

Outra coisa que voce deve diferenciar são as nomenclaturas, campos, registros e conteúdos são coisas diferentes.

Campos são as células que possuem o conteúdo.
registros são o conjunto de campos.

Então o que voce está vendo é: Todos os registros com conteúdos dos campos data,compr,campo,hora,vinculo.

Use algum aplicativo de visualizção de .DBF como DBFViewer2000, WinDBU, DBU, ou outro e veja o conteúdo do campo do filtro se está em maiúsculas ou minúsculas e forme seu filtr a partir do que ver.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder