Consulta interativa Ajax

01/11/2017

0

Prezados,

Eu tenho um sistema de criação propria para empresa em que eu trabalho, montado em PHP OO, porém até então eu não havia pensado em colocar nenhum tipo de busca nas tabelas que possuo neste sistema.
Agora que fui tentar implementar uma busca com requisições ajax me deparei com um impasse.
Vou tentar postar tudo detalhado pra ver se consigo com que me ajudem.
Vamos lá.

Pela função hist_agenda() eu retorno o histórico de entradas na agenda do cliente, pela variavel GET 'hist_nconsulta'
public function hist_agenda()
		{
		
        $query_hist = "SELECT cd_emp, mensagem, visita_data, emp, cnpj
                FROM ag_clientes
				where cd_emp = :cd_emp";
        $stmt = $this->db1->prepare($query_hist);
        $stmt->bindValue(':cd_emp', $_GET['hist_nconsulta']);
		$stmt->execute();
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
		include ('hist_agenda.php');
		}


Após esse select no sql, pelo form html+php eu consigo montar a tabela com todos os dados conforme abaixo:

<thead class="thead-inverse">
			<tr>
				<th align="center" bgcolor="white">Código</th>
				<th align="center" bgcolor="white">Nome da empresa</th>
				<th class="th" bgcolor="white">CNPJ</th>
				<th align="center" bgcolor="white">Data da visita</th>
				<th align="center" bgcolor="white">Mensagem</th>
			</tr>
			</thead>

			<?php
			foreach($result as $select_linha)
			{
				echo '<tr>';
				echo '<td align="center" bgcolor="white">' . $select_linha['cd_emp'] . '</td>';
				echo '<td align="center" bgcolor="white">' . $select_linha['emp'] . '</td>';
				echo '<td align="center" bgcolor="white">' . $select_linha['cnpj'] . '</td>';
				echo '<td align="center" bgcolor="white">' . $select_linha['visita_data'] . '</td>';
				echo '<td align="center" bgcolor="white">' . $select_linha['mensagem'] . '</td>';
				echo '</tr>';

			}


O problema que me vem a mente.. para eu fazer uma consulta interativa via ajax eu teria que fazer uma "PESQUISA DA PESQUISA" e não consigo arrumar em minha cabeça a lógica para isso.. alguém conseguiria me ajudar?

Ah!
Eu utilizo o campo abaixo como input text e input submit:

<div id="divBusca">
	  <img src="imagens/search3.png" alt="Buscar..."	/>
	  <input type="text" id="txtBusca" placeholder="Buscar..."/>
	  <input type="submit" id="btnBusca" value="Buscar" onclick="window.refresh()">
	</div>
Daniel Lancellotti

Daniel Lancellotti

Responder

Posts

01/11/2017

Bot47

E aí tudo certo?
Vou tentar descrever um passo a passo de como eu faria:

1. ao clicar no #btnBusca chamar um jQuery para pegar o valor do #txtBusca e montar a requisição Ajax
2. no PHP fazer mais uma função que receba por parâmetro o valor do #txtBusca e retorne de acordo. Ou ainda, alterar a hist_agenda() para receber um parâmetro que diz se retorna tudo ou se filtra e de novo o valor do #txtBusca como parâmetro da busca
3. utilizar a função success de callback do jQuery.ajax() para substituir o conteúdo da tabela caso a requisição tenha tido sucesso.

Ou...

Continuar com o PHP trazendo todos os dados e montar a tabela como o pluglin DataTables para fazer a filtragem dos dados sem novas requisições.

Espero que eu tenho explicado de uma forma que você entenda.
Qualquer dúvida estou a disposição.
Vlws Flws!
Responder

01/11/2017

Daniel Lancellotti

Da primeira opção eu não entendi muita coisa, sendo sincero.
Da segunda, entendi, mas qual a melhor forma de implementar isso direto no php? lembrando que os meus resultados já vem de uma consulta sql
Responder

02/11/2017

Daniel Lancellotti

Alguém?
Responder

03/11/2017

Bot47

Então, na primeira forma eu tentei dizer para você fazer uma consulta via Ajax com a opção de filtragem. Isso não seria bem um filtro pq estaria substituindo todo o conteúdo da tabela.

Quanto a forma de fazer no PHP eu geralmente tenho uma função para listar que traz todo os registros da tabela e uma para buscar um registro específico. Mas como a situação parece um pouco diferente, talvez você possa adicionar parâmetros opcionais um para filtrar.

Se eu entendi corretamente, algo como isto pode ser feito:

public function hist_agenda($filtro = null, $valor = null){

$query_hist = "SELECT cd_emp, mensagem, visita_data, emp, cnpj
FROM ag_clientes
where cd_emp = :cd_emp";
if(!$filtro){
$query_hist .= "AND" . $filtro . " = " . $valor;
}

$stmt = $this->db1->prepare($query_hist);
$stmt->bindValue(':cd_emp', $_GET['hist_nconsulta']);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
include ('hist_agenda.php');
}


Onde $filtro é o nome do campo que vc vai usar para filtrar e $valor é o valor desejado.
Responder

03/11/2017

Daniel Lancellotti

e $filtro eu pego por post?
nesse caso eu faço com que essa função seja chamada pelo botão já na página direto, certo?
vou testar.
Responder

03/11/2017

Bot47

Acredito que POST sempre seja mais recomendado até para não fazer aquelas URLs monstro.

Sim, seria chamada pelo botão. Aí se não quiser recarregar a página inteira vc pode utilizar JavaScript e fazer uma requisição Ajax.

Se der, poste a solução que vc chegou aqui :)
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar