Ir para conteúdo

Arquivado

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

Silvio Alencar

[Resolvido] Usando o wpdb do Wordpress

Recommended Posts

Fala, pessoal,

 

Tô precisando muito da ajuda do pessoal do Fórum.

 

Estou criando um site em Wordpress e meu cliente precisa que em uma das páginas haja uma consulta ao Banco de Dados. O usuário entra com o nome de seu município e o sistema diz se o município dele é atendido pelo projeto.

 

Já até criei a tabela:

 

t_cidades

 

campos:

 

municipio, estado, populacao, situacao

 

Então precisava criar o formulário e o seu handler para poder fazer as consultas e colocar o resultado na página, que basicamente seria:

 

Ex:

 

Busca: São Paulo

 

Resultado: Município: São Paulo | Estado: SP | População: 10.000.000 | Situação: Não Habilitado

 

 

 

Como faço isso no Wordpress?

 

Fiz alguma pesquisa e achei a classe wpdb (para usar tabelas diferentes das padrões do Wordpress) e também o uso de templates para colocar a página no lugar certo.

 

Mas não sei como fazer essas coisas, sou muito padawan em php e mysql. Alguém pode me ajudar, por favor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que na realidade isso seria puro php. A tabela sendo ou não do Wordpress, funcionaria havendo uma conexao ao DB, a página seria inserida com itens Wordpress onde você escolher. Como você mesmo disse a tabela já foi criada agora é só programar o php e estilizar os campos de consulta. Essa variável global do Wordpress que você citou é fundamental para facilitar, no Codex você encontra a explicação dela bem detalhada. Acesse esse link traduzido, sobre a variável $wpdb

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que na realidade isso seria puro php. A tabela sendo ou não do Wordpress, funcionaria havendo uma conexao ao DB, a página seria inserida com itens Wordpress onde você escolher. Como você mesmo disse a tabela já foi criada agora é só programar o php e estilizar os campos de consulta. Essa variável global do Wordpress que você citou é fundamental para facilitar, no Codex você encontra a explicação dela bem detalhada. Acesse esse link traduzido, sobre a variável $wpdb

 

Abraço.

 

Ei Narciso, obrigado por responder.

 

Como disse sou muito padawan em php. E agora descobri que sou em Wordpress tb. ehhehe.

 

Tentei de bicão fazer, mas não deu certo. Deu um erro aqui de página não encontrada.

 

Você pode me ajudar mais uma vez?

 

Obrigado.

 

 

 

Inseri na functions.php o seguinte código (tudo de bicão):

 

 

function cidade()
{
  global $wpdb, $cidade, $post;

 $cidade = $wpdb->get_results("SELECT estado, municipio, populacao, situacao FROM {$wpdb->t_cidades} WHERE municipio = {$_POST['municipio']}");
 foreach($resultados as $resultado);
  { print "<p>Municipio: {$resultado->municipio} - {$resultado->estado}</p><p>Populacao: {$resultado->populacao} - Situação: {$resultado->situacao} </p>";
   }
};

e depois criei o formulário em uma página do wordpress:

 

<div>
  <h1>Veja se o seu Município tem até 20 mil habitantes</h1>
  <form action="<?php cidade(); ?>" method="post" name="busca_cidades" lang="pt">
    <label>Município</label>
    <input name="municipio" type="text" lang="pt" size="50" alt="Apenas o nome do Municipio, sem o Estado."/>
    <input name="submit" type="submit" value="Enviar"/>             
  </form>
</div>

O que estou fazendo de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ops...

 

código certo

function cidade()
{
  global $wpdb, $cidade, $_POST;

 $cidade = $wpdb->get_results("SELECT estado, municipio, populacao, situacao FROM {$wpdb->t_cidades} WHERE municipio = {$_POST['municipio']}");
 
 foreach($cidade as $resultado);
  { print "<p>Municipio: {$resultado->municipio} - {$resultado->estado}</p><p>Populacao: {$resultado->populacao} - Situacao: {$resultado->situacao} </p>"; 
  
  }
 
	
};

O que tá faltando?

 

Ele não tá achando os dados...

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela t_cidades tem prefixo, como as tabelas do wordpress? (wp_t_cidades) Você usa prefixo nas tabelas?

 

Se não tiver com prefixo, tente fazer a busca sem o $wpdb, assim:

... populacao, situacao FROM t_cidades WHERE ...
O $wpdb, no nome da tabela, vai adicionar, se necessário, o prefixo. Então ele busca as informações na tabela prefixo_t_cidade e não na t_cidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela t_cidades tem prefixo, como as tabelas do wordpress? (wp_t_cidades) Você usa prefixo nas tabelas?

 

Se não tiver com prefixo, tente fazer a busca sem o $wpdb, assim:

... populacao, situacao FROM t_cidades WHERE ...
O $wpdb, no nome da tabela, vai adicionar, se necessário, o prefixo. Então ele busca as informações na tabela prefixo_t_cidade e não na t_cidade.

 

Opa,

 

Eu uso prefixo sim. Tentei como sugeriu, mas tá dando o seguinte erro (inclusive se renomeio o tabela para wp_t_cidades).

 

Ele diz que não encontrou a página e coloca o seguinte endereço no navegador:

 

http://oendereçodomeudomínio.com.br/<p>Municipio: - </p><p>Populacao: - Situacao: </p>

 

Isso acontece tanto para a tablela com ou sem prefixo.

 

Vou postar novamente os códigos para manter atualizado:

 

Página functions.php

 

function cidade()
{
  global $wpdb, $cidade, $_POST;

 $cidade = $wpdb->get_results("SELECT estado, municipio, populacao, situacao FROM {$wpdb->t_cidades} WHERE municipio = {$_POST['municipio']}");
 
 foreach($cidade as $resultado);
  { print "<p>Municipio: {$resultado->municipio} - {$resultado->estado}</p><p>Populacao: {$resultado->populacao} - Situacao: {$resultado->situacao} </p>"; 
  
  }
 
	
};

Página buscacidade.php

 

<div>
               		<h1>Veja se o seu Município tem até 20 mil habitantes</h1>
                 <form action="<?php cidade(); ?>" method="post" name="busca_cidades" lang="pt">
                   <label>Município (sem o Estado)</label>
                   <br />
                   <input name="municipio" type="text" lang="pt" size="50" alt="Apenas o nome do Municipio, sem o Estado."/>
                   <input name="submit" type="submit" value="Enviar"/>
                   
                   </form> 
              </div>

Obrigado pela ajuda de vcs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora que reparei a parte do formulário. Você está chamando a função cidade(), que retorna a lista completa, no action do formulário. Desse jeito o action ficará com a lista: form action="<p>Município...".

 

Faça um teste só para ver se a busca no banco de dados está retornando alguma cidade. Tire o formulário e adicione apenas <?php cidade(); ?>, e na function.php, tire a parte do where, ficando assim:

function cidade()
{
  global $wpdb, $cidade, $_POST;

 $cidade = $wpdb->get_results("SELECT estado, municipio, populacao, situacao FROM {$wpdb->t_cidades}");
 
 foreach($cidade as $resultado);
  { print "<p>Municipio: {$resultado->municipio} - {$resultado->estado}</p><p>Populacao: {$resultado->populacao} - Situacao: {$resultado->situacao} </p>"; 
  
  }    
}
Agora vê se as cidades serão exibidas como você quer. Se o retorno for positivo, agora é só criar uma condicional para que essa função seja chamada só quando o formulário for enviado. Para fazer isso, deixe a acation do form 'apontada' para a mesma página, a buscacidade.php. Depois é só chamar a função, na mesma página, quando o formulário for enviado:

<?php
if ( getenv("REQUEST_METHOD") == "POST" )
{
	// eviado, chama função
	cidade();
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora que reparei a parte do formulário. Você está chamando a função cidade(), que retorna a lista completa, no action do formulário. Desse jeito o action ficará com a lista: form action="<p>Município...".

 

Faça um teste só para ver se a busca no banco de dados está retornando alguma cidade. Tire o formulário e adicione apenas <?php cidade(); ?>, e na function.php, tire a parte do where, ficando assim:

function cidade()
{
  global $wpdb, $cidade, $_POST;

 $cidade = $wpdb->get_results("SELECT estado, municipio, populacao, situacao FROM {$wpdb->t_cidades}");
 
 foreach($cidade as $resultado);
  { print "<p>Municipio: {$resultado->municipio} - {$resultado->estado}</p><p>Populacao: {$resultado->populacao} - Situacao: {$resultado->situacao} </p>"; 
  
  }    
}
Agora vê se as cidades serão exibidas como você quer. Se o retorno for positivo, agora é só criar uma condicional para que essa função seja chamada só quando o formulário for enviado. Para fazer isso, deixe a acation do form 'apontada' para a mesma página, a buscacidade.php. Depois é só chamar a função, na mesma página, quando o formulário for enviado:

<?php
if ( getenv("REQUEST_METHOD") == "POST" )
{
	// eviado, chama função
	cidade();
}
?>

Ei, Lex,

 

Você acertou na mosca. Agora ele tá escrevendo direitinho na página.

 

Fiz a primeira etapa, que você disse. Só que ele só colocou os dados de São Paulo, nenhum outro município.

 

Então fui para a etapa seguinte, para ver se dava certo. Só que ele não pega as informações enviadas pelo formulário:

 

Olha o código:

 

busca_cidades.php

 

<div>
               	<h1>Veja se o seu Município tem até 20 mil habitantes</h1>
                <form action="http://meudomínio.com.br/inscricao" method="post" name="busca_cidades" lang="pt">
                   <label>Município (sem o Estado)</label>
                   <br />
                   <input name="municipio" type="text" lang="pt" size="50" alt="Apenas o nome do Municipio, sem o Estado."/>
                   <input name="submit" type="submit" value="Enviar"/>
                   
                </form> 
				  <?php
					if ( getenv("REQUEST_METHOD") == "POST" )
					{
							// eviado, chama função
							cidade();
					}
		            ?>
              </div>

functions.php

 

function cidade()
{
  global $wpdb, $cidade, $_POST;

 $cidade = $wpdb->get_results("SELECT estado, municipio, populacao, situacao FROM wp_t_cidades WHERE municipio = {$_POST['municipio']}");
 
 foreach($cidade as $resultado);
  { print "<p>Municipio: {$resultado->municipio} - {$resultado->estado}</p><p>Populacao: {$resultado->populacao} - Situacao: {$resultado->situacao} </p>"; 
  
  }    
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troque a linha do get_results por essa:

$cidade = $wpdb->get_results("SELECT estado, municipio, populacao, situacao FROM wp_t_cidades WHERE municipio = '".$_POST['municipio']."'");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troque a linha do get_results por essa:

$cidade = $wpdb->get_results("SELECT estado, municipio, populacao, situacao FROM wp_t_cidades WHERE municipio = '".$_POST['municipio']."'");

Lex,

 

Você é o cara!!!! Ficou certinho.

 

Brigadão!

 

Só uma perguntinha. Como faço para fazer uma mensagem, caso não encontre nada na busca? É complicado?

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.