Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 407
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca avançada com paginação

19-08-2014 15:10

Boa tarde.
Tenho um script de paginação que funciona perfeitamente, no entanto to querendo adapta-lo a uma busca avançada, e não to conseguindo.

if( $_SERVER['REQUEST_METHOD']=='POST' )     {                  $per_page = 2;                   $where = Array();           $cat = $_POST['cat'];         $tipo = $_POST['tipo'];         $uf = $_POST['uf'];         $cidade = $_POST['cidade'];           if( $cat ){ $where[] = " 'cat' = '{$cat}'"; }         if( $tipo ){ $where[] = " 'tipo' = '{$tipo}'"; }         if( $uf ){ $where[] = " 'uf' = '{$uf}'"; }         if( $cidade ){ $where[] = " 'cidade' = '{$cidade}'"; }           $sql = "SELECT * FROM imv ";         if( sizeof( $where ) )             $sql .= ' WHERE '.implode( ' AND ',$where );           $rs = mysql_query( $sql ) or die(mysql_error());         $count = mysql_num_rows( $rs );                  $pages = ceil( $count / $per_page );                  $max = 4;                  $page = isset( $_GET[ 'page' ] ) ? $_GET[ 'page' ] : 0 ;                  $start = ( $page - 1 ) * $per_page;                  $curpag = ( $start == 0 ) ? 1 : ( $start / $per_page ) + 1 ;                   $links_laterais = ceil($max / 2);         $inicio = $curpag - $links_laterais;         $limite = $curpag + $links_laterais;                  $sql1 = "SELECT * FROM imv INNER JOIN cat on id_cat = cat_i INNER JOIN tipo ON id_tipo = tipo_i INNER JOIN  est ON id_est = est_i INNER JOIN dados ON id_mov = id_i INNER JOIN imagens ON id_imovel = id_i ";         if( sizeof( $where ) )         $sql1 .= ' WHERE '.implode( ' AND ',$where ). 'ORDER BY  id_i  LIMIT ' .$start. ',' .$per_page;         $rs1 = mysql_query( $sql1 ) or die(mysql_error());                  echo "<div class='property-grid'><ul class='grid-holder col-3'>";         while( $row = mysql_fetch_array( $rs1 )) aqui mostraria os dados ......         { 

erro 1
se eu der um echo $count no primeiro sql, este é igual a 0;
se eu der um echo $sql , mostra a query normal;
como esta dando 0 no count, logo no segundo sql me da erro :

You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near '-2,2' at line 1  

no while deste .....

ja tentei várias coisas e nada ainda ......

MOVIDO PARA PHP
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17662
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca avançada com paginação

19-08-2014 15:15

Se é para obter a quantidade de linhas na primeira consulta, tem que fazer assim

$sql = mysql_query("SELECT * FROM imv"); $quantos = mysql_num_rows($sql); 

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 407
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca avançada com paginação

19-08-2014 15:26

Sim, mas , e as variáveis do where ?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17662
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca avançada com paginação

19-08-2014 15:35

Pelo que entendi o $where vem de um array criado antes do array. Ai para contar quantos elementos há no array usa o count().
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 407
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca avançada com paginação

19-08-2014 16:33

Fiz uma pequena modificação para teste, mudou o erro ...

if($cat || $tipo || $uf || $cidade) {            $sql = "SELECT * FROM imv WHERE";            if($cat) { $sql .= " cat_i='$cat' AND"; }            if($tipo) { $sql .= " tipo_i='$tipo' AND"; }            if($uf) { $sql .= " uf='$uf' AND"; }            if($cidade) { $sql .= " cidade='$cidade' ";}         $rs = mysql_query( $sql ) or die(mysql_error());         $tot = mysql_num_rows($rs);         echo $tot;         echo $sql;         } 

erro

You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near '' at line 1

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17662
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca avançada com paginação

19-08-2014 16:43

Creio que o problema esteja no WHERE.

Se possível, coloca um valor para o WHERE fixo, tipo

$sql = "SELECT * FROM imv WHERE campo=1"; 

Nas linhas da SQL vai seguir essa base

if($cat) { $sql .= " AND cat_i='$cat' "; } 

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 407
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca avançada com paginação

20-08-2014 07:26

Boa, deu certo.
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 407
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca avançada com paginação

21-08-2014 16:31

Retornando para encontrar o erro .....

o script ta assim ....

$cat_i = $_POST['cat_i']; $tipo_i = $_POST['tipo_i']; $uf = $_POST['uf']; $cidade = $_POST['cidade']; echo $cat_i; echo $tipo_i; echo $uf; echo $cidade;            $per_page = 6;         $sql = "SELECT * FROM imv WHERE tipo_i='$tipo_i' ";         if($cat_i != '') { $sql .= " AND cat_i='$cat_i'"; }         if($uf != '') { $sql .= " AND uf='$uf'"; }         if($cidade != '') { $sql .= " AND cidade='$cidade' ";}         $rs = mysql_query( $sql ) or die(mysql_error());         $count = mysql_num_rows($rs);          echo $count;         $pages = ceil( $count / $per_page );         echo $pages;         $max = 4;         $page = isset( $_GET[ 'page' ] ) ? $_GET[ 'page' ] : 0 ;         $start = ( $page - 1 ) * $per_page;         $curpag = ( $start == 0 ) ? 1 : ( $start / $per_page ) + 1 ;          $links_laterais = ceil($max / 2);         $inicio = $curpag - $links_laterais;         $limite = $curpag + $links_laterais;                  $sql1 = "SELECT * FROM imv --- dados diversos --- WHERE tipo_i='$tipo_i' ";         if($cat_i != '') { $sql .= " AND cat_i='$cat_i'"; }         if($uf != '') { $sql1 .= " AND uf='$uf'"; }         if($cidade != '') { $sql1 .= " AND cidade='$cidade' ";}         $sql1 .= "ORDER BY id_i LIMIT $start,$per_page";         $rs1 = mysql_query( $sql1 ) or die(mysql_error()); 

os echo que envio nesta é para verificar o recebimento dos dados, todos sendo recebidos e aparece este erro :

You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near '-6,6' at line 1


com certeza vindo do sql1.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17662
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca avançada com paginação

21-08-2014 16:39

O que são esses traços no $sql1?

Aparentemente esse erro de -6,6 estão vindo de $start,$per_page, por $start estar vindo negativo deve gerar o problema.
Verifica se passou $_GET[ 'page' ]
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 407
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca avançada com paginação

21-08-2014 18:13

dei um echo e não veio resposta, o codigo de paginação é chamado externamente ;

$( document ).ready(function() {                                 //Display Loading Image - Animated Gif         function display_anim( )         {                 $( '.loading' ).fadeIn( 200,0 );                 $( '.loading' ).html( '<img src="images/ajax-loader.gif" />' );           }                 //Hide Loading Image         function hide_anim( )         {                 $( '.loading').fadeOut( 'slow' );         };                 //initialise the table at the first run         display_anim( );         $( '.conte' ).load( "pagbusc.php?page=1", hide_anim( ) );           //Page navigation Click         $( document ).on( 'click', '#pages li',  function( ) {                                         display_anim( );                                 //get the id of clicked li                 var pageNum = $(this ).attr('id');                                 //Loading Data                 $( ".conte" ).load( "pagbusc.php?page=" + pageNum, function( ) {                                                         //display the table with fadeIn effect.                                 $( this ).hide( ).fadeIn( 500 );                                                                 hide_anim( );                                                 });                 });                         });

o estranho é que esta mesma configuração funciona em outra página, onde seleciono no menu apenas um item e envio a página por get , onde este vira uma session para a página de paginação dela.
No entanto uma não interfere com a outra pois são chamadas distintas.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17662
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca avançada com paginação

21-08-2014 19:09

Provavelmente o problema está aqui

  //get the id of clicked li                 var pageNum = $(this ).attr('id');

Do modo que apresenta o erro, o pageNum não está sendo passado. Talvez da forma que está testando, tem que usar outra forma de capturar o id a ser enviado.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 407
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca avançada com paginação

22-08-2014 11:16

To fazendo algumas alterações, tipo:

$where = Array();         if( $_POST['cat_i'] ){ $where[] = " 'cat_i' = '{$cat_i}'"; }         if( $_POST['tipo_i'] ){ $where[] = " 'tipo_i' = '{$tipo_i}'"; }         if( $_POST['uf'] ){ $where[] = " 'uf' = '{$uf}'"; }         if( $_POST['cidade'] ){ $where[] = " 'cidade' = '{$cidade}'"; }           $sql = "SELECT * FROM imv ";         if( sizeof( $where ) )             $sql .= ' WHERE '.implode( ' AND ',$where );           $rs = mysql_query( $sql ) or die(mysql_error());         $tot = mysql_num_rows($rs);         echo $tot;         echo $sql; 

se eu escolher cat_i e tipo_i o echo do sql retorna:

SELECT * FROM imv WHERE 'cat_i' = '1' AND 'tipo_i' = '2' 

mas o echo $tot retorna 0.
dai acontece o erro.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17662
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca avançada com paginação

22-08-2014 12:28

Creio que não deve usar aspas para nome da coluna

..e[] = " cat_i = '{$cat_i}'"; }

E a concatenação é sem espaço

$sql.= ' WHERE '.implode( ' AND ',$where );

Dependendo do seu sistema, talvez fosse necessário fazer com que quando um ou outro valor não for enviado, definir o $tot como 1, ou algo do tipo.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 407
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca avançada com paginação

22-08-2014 13:00

com certeza tratava-se de conflito de passagem do post, pois eliminei o jquery e trabalhei com session e ta tudo 100%
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17662
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca avançada com paginação

22-08-2014 13:15

blz.
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado