Ir para conteúdo

POWERED BY:

Arquivado

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

rocketcass

Filtros de Busca com Ajax em tempo real

Recommended Posts

Olá pessoal, tudo bem?
Estou iniciando meu caminho pelo mundo da programação, acabei de iniciar o curso de Analise e Desenvolvimento de Sistemas, na facu estudamos C# mas estou estudando por fora PHP a uns 6 meses. Aqui na empresa, ainda sou um estagiário, mas daqueles que é sempre o culpado de tudo (até qnd deixam a pia da cozinha suja), como quero crescer e dependo do emprego para pagar a facu, fico na minha calado, pois sei que sou uma pessoa de caráter e profissional.
Conversei com meu supervisor, e como está para vencer meu estágio, ele disse que se eu me dedicasse mais na área de T.I, conseguiria me efetivar e aumentar meu salário, então comecei a desenvolver um sistema interno para ajudar o pessoa das vendas, que trabalha com planilhas XLS na base do "Ctrl C + Ctrl".
Eu queria fazer uma busca parecida com essa:

http://www.hanoff.com.br/banconegocios.php

Dei uma pesquisada e vi que em ajax retorna o resultado sem precisar de refresh na página, gostaria da ajuda de vocês, para que se possível alguém tiver um tutorialzinho disso ou souber algum na web que possa me ajudar e que esteja bem explicativo.

Eu já dei um start no projeto, consegui fazer um drop dow trazer do banco o resultado relacionado a seu ID, mas gostaria de um tutorial para me ajudar nisso.

Muito obrigado a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Marcos, tudo bem meu amigo?
Não precisa ser com ajax não, eu só pensei que ficaria mais legal e me daria mais pontos aqui na empresa :)
Sim, tenho conhecimento em DB e já fiz um mapeamento, acho que precisarei dessas tabelas (baseado no exemplo do site que passei, prefiro pensar assim, pois se não eu me enrolo todo, ainda sou iniciante):


Banco: DB_Busca
Tabelas:

- segmento (id_segmento, titulo_segmento);
- estado (id_uf, uf);

- cidade (id_cidade, cidade);

- valor (id_valor, faixa_valor);

- negócios (id_negócios, segmento, uf, cidade, valor);


Seria mais ou menos nessa linha?
Muito obrigado pela resposta rápida!


Compartilhar este post


Link para o post
Compartilhar em outros sites

Numa rápida análise seria isso ae.

Naquele site notei uma mancada que não pode rss. O correto seria listar apenas os municípios do Estado escolhido e

não é o que ocorre.

Recomendo montar o html primeiro e depois ir incrementando PHP+database+CSS

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal, tudo bem?
Fiquei fora e não dei notícias no fórum, pois estive no hospital... acabei sofrendo um acidente e fiquei um bom tempo de molho de cama, pois quebrei o braço e a perna ( um babaca me atropelou na calçada, bota fé?).
Mas agora está tudo bem, retomei os estudos, aproveitei para ler sobre PHP e melhorar meus conhecimentos enquanto estava de repouso.
Peguei esse tutorial que vc passou WDuarte e ele é muito bom (muito obrigado pela dica!), mas fiquei perdido de mais, pois ainda não entendo muito de JS e Ajax e nisso acabei preferindo deixar essa implementação mais para frente e tentar primeiro trazer os resultados do banco.

Acabei criando as funções de filtro de busca só no php, onde eu consegui popular ele conectando direto pelo banco de dados (dei uma estudade em DB tbm).

O meu código parece estar certo, não apresenta erros mas não me retorna o resultado da busca utilizando os combos...
Vejam meu código, e se puderem me ajudar ficaria muito grato =)

Meu banco de dados (caso encontrem alguma inconsistência de informação, por favor me explique e me mostre a forma correta, se não for incomodo, pois ainda sou novato e toda informação será muito bem vinda):

-- -----------------------------------------------------
-- Criando o banco `negocio`
-- -----------------------------------------------------
CREATE DATABASE negocio; 

-- -----------------------------------------------------
-- Tabela `negocio`.`estado`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `negocio`.`estado` (
  `est_id` INT NOT NULL AUTO_INCREMENT,
  `est_nome` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
  `est_sigla` VARCHAR(2) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
  PRIMARY KEY (`est_id`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Tabela `negocio`.`cidade`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `negocio`.`cidade` (
  `cid_id` INT NOT NULL AUTO_INCREMENT,
  `cid_nome` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
  `est_id` INT NOT NULL,
  PRIMARY KEY (`cid_id`),
  INDEX `fk_cidades_estados_idx` (`est_id` ASC),
  CONSTRAINT `fk_cidades_estados`
    FOREIGN KEY (`est_id`)
    REFERENCES `negocio`.`estado` (`est_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Tabela `negocio`.`valor`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `negocio`.`valor` (
  `valor_id` INT NOT NULL AUTO_INCREMENT,
  `faixa_valor` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
  PRIMARY KEY (`valor_id`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Tabela `negocio`.`segmento`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `negocio`.`segmento` (
  `id_segmento` INT NOT NULL,
  `segmento_nome` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
  PRIMARY KEY (`id_segmento`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `negocio`.`negocio`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `negocio`.`negocio` (
  `id_negocio` INT NOT NULL AUTO_INCREMENT,
  `img_negocio` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
  `titulo_negocio` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
  `descr_negocio` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
  `valor_id` INT NOT NULL,
  `id_segmento` INT NOT NULL,
  `est_id` INT NOT NULL,
  `cid_id` INT NOT NULL,
  PRIMARY KEY (`id_negocio`),
  INDEX `fk_negocio_valor_idx` (`valor_id` ASC),
  INDEX `fk_negocio_segmento_idx` (`id_segmento` ASC),
  INDEX `fk_negocio_est_idx` (`est_id` ASC),
  INDEX `fk_negocio_cid_idx` (`cid_id` ASC),
  CONSTRAINT `fk_negocio_valor`
    FOREIGN KEY (`valor_id`)
    REFERENCES `negocio`.`valor` (`valor_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_negocio_segmento`
    FOREIGN KEY (`id_segmento`)
    REFERENCES `negocio`.`segmento` (`id_segmento`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_negocio_est`
    FOREIGN KEY (`est_id`)
    REFERENCES `negocio`.`estado` (`est_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_negocio_cid`
    FOREIGN KEY (`cid_id`)
    REFERENCES `negocio`.`cidade` (`cid_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;


Fiz um arquivo de conexao que deixo pronto para facilitar o desenvolvimento e incluo ele no cabeçalho:

<?php
//incluindo a conexao
include('conexao.php');
?>


Aqui meu arquivo index.php que contém toda a estrutura do código (fiz apenas 2 arquivos, conexao e o index.php)

<!-- GERAL -->
    <div id="geral">

      <!-- FILTROS DE BUSCA -->      
      <div style="width:30%;float:right;">
        <form action="" method="post" enctype="multipart/form-data">
            <ul id="alinha">
                <!-- ESTADO -->
                <li>
                    <select name="comboEstado">
                      <option value="0" selected="selected">» Selecione o Estado</option>
                      <?php 
                        $selEstado = "SELECT * FROM estado ORDER BY est_id DESC";
                        $qrEstado = mysql_query($selEstado);
                        while ($linhaEstado = mysql_fetch_array($qrEstado)){
                      ?>
                        <option value="<?php echo $linhaEstado['est_id'] ?>">
                            <?php echo $linhaEstado['est_nome'] ?>
                        </option>
                      <?php } ?>
                    </select>
                </li>

                <!-- CIDADE -->
                <li>
                    <select name="comboCidade">
                      <option value="0" selected="selected">» Selecione a Cidade</option>
                      <?php 
                        $selCidade = "SELECT * FROM cidade ORDER BY cid_id DESC";
                        $qrCidade = mysql_query($selCidade);
                        while ($linhaCidade = mysql_fetch_array($qrCidade)){
                      ?>
                        <option value="<?php echo $linhaCidade['cid_id'] ?>">
                            <?php echo $linhaCidade['cid_nome'] ?>
                        </option>
                      <?php } ?>
                    </select>
                </li>
                <!-- VALOR -->
                <li>
                    <select name="comboValor">
                      <option value="0" selected="selected">» Selecione o Valor</option>
                      <?php 
                        $selValor = "SELECT * FROM valor ORDER BY valor_id DESC";
                        $qrValor = mysql_query($selValor);
                        while ($linhaValor = mysql_fetch_array($qrValor)){
                      ?>
                          <option value="<?php echo $linhaValor['valor_id'] ?>">
                              <?php echo $linhaValor['nome_valor'] ?>
                          </option>
                      <?php } ?>
                    </select>
                </li>

                <!-- SEGMENTO -->
                <li>
                    <select name="comboSegmento">
                      <option value="0" selected="selected">» Selecione o Segmento</option>
                      <?php 
                        $selSegmento = "SELECT * FROM segmento ORDER BY id_segmento DESC";
                        $qrSegmento = mysql_query($selSegmento);
                        while ($linhaSegmento = mysql_fetch_array($qrSegmento)){
                      ?>
                          <option value="<?php echo $linhaSegmento['id_segmento'] ?>">
                              <?php echo $linhaSegmento['segmento_nome'] ?>
                          </option>
                      <?php } ?>
                    </select>
                </li>
                <li>
                    <input type="hidden" name="acao" value="buscar" />
                <li>

                <li>
                    <input type="submit" value="Buscar" />
                <li>
            </ul>
        </form>
      </div>
      <!-- //FILTROS DE BUSCA -->

      <!-- RETORNO DA BUSCA -->
      <div style="width:70%;float:right;">
      <?php 
        if(isset($_POST['acao']) && $_POST['acao'] == 'buscar'){
          $cmbEstado = $_POST['comboEstado'];
          $cmbCidade = $_POST['comboCidade'];
          $cmbValor = $_POST['comboValor'];
          $cmbSegmento = $_POST['comboSegmento'];

          $retorno = "SELECT * FROM negocio WHERE est_id ='cmbEstado' AND cid_id ='cmbCidade' AND  valor_id ='cmbValor' AND id_segmento ='cmbSegmento'";
          $qrRetorno = mysql_query($retorno);

          if(mysql_num_rows($qrRetorno)=='0'){
            echo 'Não foram encontrados registros.';
          } else {
          while($linhaRetorno == mysql_fetch_array($qrRetorno)){
      ?>
      <div style="width:100%;">
        <div style="width:30%;float:right;">
          <p><?php echo $linhaRetorno['img_negocio'];?></p>
        </div>
        
        <div style="width:70%;float:right;">
          <h3><?php echo $linhaRetorno['titulo_negocio'];?></h3>
          <p><?php echo $linhaRetorno['descr_negocio'];?></p>
          <div style="float:right;width:100%;">
            <?php echo $linhaRetorno['faixa_valor'];?>
          </div>  
        </div>
      </div>
      <?php 
            }//while
         }//else
      }//if
      ?>
    </div>
    <!-- //RETORNO DA BUSCA -->  
  </div>
  <!-- //Geral -->

 

Coloquei alguns valore preenchendo as tuplas do meu banco para testes, mas apesar de ele não exibir erros, o código não me retorna resultado nenhum.
Não estou conseguindo saber o que estou fazendo de errado....

Quem puder me dar uma forcinha e me ensinar onde errei, me ajudaria muito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize mysql_error para dar debug sua query

 

Ex.:

$qrRetorno = mysql_query($retorno) or die('Invalid query: '.  mysql_error() );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, achei o erro, era coisa simples e acho que eu e a galera não prestou a atenção no código... isso é meio chato, pois foi uma coisa bem básica e passou despercebido por caras que mandam bem. Não to querendo ser chato, mas as vezes só ficar falando "pede para exibir erros", "leia o manual", "procure direito no fórum"... essas coisas as vezes não ajudam mesmo, desculpa se estou sendo folgado ou chato, não quero julgar ninguém e muito menos criar inimigos, mas uma simples olhada no código daria para ver o erro.

Linha de código errada:

$retorno = "SELECT * FROM negocio WHERE est_id ='cmbEstado' AND cid_id ='cmbCidade' AND valor_id ='cmbValor' AND id_segmento ='cmbSegmento'";


Linha de código corrigida:

$retorno = "SELECT * FROM negocio
                 INNER JOIN cidade ON negocio.cid_id = cidade.cid_id
                 INNER JOIN estado ON cidade.est_id = estado.est_id
                 INNER JOIN ON negocio.valor_id = valor.valor_id
                 INNER JOIN segmento ON negocio.id_segmento = segmento.id_segmento
           WHERE estado.est_id ='$cmbEstado'
                 AND cidade.cid_id ='$cmbCidade'
                 AND valor.valor_id ='$cmbValor'
                 AND segmento.id_segmento ='$cmbSegmento'";


Deu para ver que o código com erro estava realmente com erros bobos, onde as variáveis estavam com suas chamadas erradas, fora que o tratamento não estava adequado.

Ainda estou com problema no código mas acho que não vamos evoluir muito, visto este ultimo apontamento.
Agradeço bastante a ajuda galera, abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Concordo com você @rocketcass.

Porém nem sempre dispomos de tempo pra pegar todo o código e mais o banco de dados para testar. A exibição de erros deve sempre estar habilitada no seu php, pois estando assim, problemas desse tipo exibirá na tela para você:

 

 

undefined index nomedavariavel  .... in line ....

 

Ainda estou com problema no código mas acho que não vamos evoluir muito, visto este ultimo apontamento.
Agradeço bastante a ajuda galera, abraço!

 

Discordo.

Aprendi muito nesse fórum, seja contribuindo ou com as próprias dúvidas dos outros users. Falar mal do fórum e reclamar que não te ajudaram não é legal, a galera só tentou ajudar você através de um metódo que costumo chamar de método lógico de resolução de problemas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

#10

Seu problema passou a ser modelagem e não php. Se souber diferenciar fórum de helpdesk, já é um grande passo a independência. :flores:

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.