Consulta interativa Ajax
01/11/2017
0
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
Posts
01/11/2017
Bot47
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!
01/11/2017
Daniel Lancellotti
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
03/11/2017
Bot47
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.
03/11/2017
Daniel Lancellotti
nesse caso eu faço com que essa função seja chamada pelo botão já na página direto, certo?
vou testar.
03/11/2017
Bot47
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 :)
Clique aqui para fazer login e interagir na Comunidade :)