Menegat 0 Denunciar post Postado Julho 23, 2009 Ola pessoal...... so novo em php...e o meu primeiro projeto foi o site de uma imobiliaria.... q mão neh.... mas tudo beim com uma ajuda aqui outra ali consegui fazer o sistema..... mas dai ela quis acrescentar mais campos..e meu sitema de busca por filtro jah estava enorme e todo confuso.....aew resolvi fazer outro...o codigo é esse.. $x = "SELECT produtos.Id, produtos.Categoria, produtos.produtos.situ, produtos.produtos_dorm, produtos.produtos_box, produtos.produtos_faixa, produtos.produtos_bairro FROM produtos WHERE produtos.Id != '0' "; if ($_GET['campo_tipo'] != "01"){ $x .= " AND produtos.Categoria ='" . $_GET['tipo'] . "'"; } if ($_GET['campo_situ'] !="01"){ $x .= " AND produtos.produtos_situ ='" . $_GET['tipo'] . "'"; } if ($_GET['campo_dorm'] != "01"){ $x .= " AND produtos.produtos_dorm=" . $_GET['campo_dorm']; } if ($_GET['campo_box'] !="01"){ $x .= " AND produtos.produtos_box='" . $_GET['campo_box'] . "'"; } if ($_GET['campo_faixa'] != "01"){ $x .= " AND produtos.produtos_faixa='" . $_GET['campo_faixa'] . "'"; } if ($_GET['campo_bairro'] != "01"){ $x .= " AND produtos.produtos_bairro='" . $_GET['campo_bairro'] . "'"; } $x .= " ORDER BY Id DESC LIMIT 5"; $sql5 = mysql_query($x); dae aparece o seguinte erro na tela: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\servidor\dallas\busca.php on line 224 a parte do codigo q apresenta erro é essa: <?php while($row5 = mysql_fetch_array($sql5)){ $link = $row5["Id"]; //linha 224 echo '<img src="ff.gif" width="4" height="7"><span class="style5">_</span>' . '<span class="fonte_data">' . '<a href="produtos_detalhe.php?id='.$link.'">' . '<span class="fonte_data">' . $row5["produtos_nome"] . '</a>' .'<br><br>'; $foto++; } ?> alguem sabe oq pode ser..?? agradeço a ajuda desde jah.... Compartilhar este post Link para o post Compartilhar em outros sites
Red FeniX 4 Denunciar post Postado Julho 23, 2009 Que isso amigo??? Pra que tanto if e mais if e mais if?? Uma coisa tão simples que pode ser usada são estruturas ternárias: $tipo = $_GET["tipo"); $complete = ""; $complete .= (isset($tipo)) ? " AND produtos.Categoria ='$tipo'"; " : ""; Ae tu continua e depois de fazer todas as verificações, acrescenta a $complete na tua query: $sql = "SELECT * FROM tabela WHERE campo='$id' $complete"; Falo Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 23, 2009 Este erro ocorre quando os dados passados para o mysql_fetch_array estão incorretos... O problema é anterior. Vamos lá... $sql5 = mysql_query($x) or die('A query ficou assim - '.$x.'<br/>'.mysql_error());// vai exibir o erro do mysql e a query Analise o que for impresso e corrija os possíveis erro... Agora vamos ao restante do seu código. Indico que troque mysql_fetch_array por mysql_fetch_assoc http://br.php.net/mysql_fetch_assoc. É mais rápido, porque o fetch_array gera um índice numérico e um associativo, enquanto que o fetch_assoc gera só o associativo (que é o que você usa). Estude sobre Sql Injection. Não jogue o valor direto do GET para a consulta. Leia este tópico que vai te dar uma boa idéia do que estou falando. http://forum.imasters.com.br/index.php?/topic/276729-seguranca-em-php/ Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Menegat 0 Denunciar post Postado Julho 23, 2009 Que isso amigo??? Pra que tanto if e mais if e mais if?? Uma coisa tão simples que pode ser usada são estruturas ternárias: $tipo = $_GET["tipo"); $complete = ""; $complete .= (isset($tipo)) ? " AND produtos.Categoria ='$tipo'"; " : ""; Ae tu continua e depois de fazer todas as verificações, acrescenta a $complete na tua query: $sql = "SELECT * FROM tabela WHERE campo='$id' $complete"; Falo Red Fenix....não entendi direito a forma como você colocou que eu deveria fazer as consultas..... como disse sou novo em php...e mta coisa ainda n entendo....como você mxm disse... pra que tanto if....se você visse o meu outro codigo de filtro.. xD.... mas n entendi de que forma eu posso filtrar os dados apartir do seu codigo... =/// (noob) xD e carlos....darei uma olhada no topico q me passou.....Vou mudar a passagem de parametro para post... brigadão ae gentee Compartilhar este post Link para o post Compartilhar em outros sites
Red FeniX 4 Denunciar post Postado Julho 23, 2009 Ae lek, muito simples. Primeiro você define as variáveis com cada dado, isso é, se preferir. Assim: $tipo = $_GET["tipo"]; $dorm = $_GET["campo_dorm"]; // Continua.... Agora você utiliza estruturas ternárias para verificar o conteúdo de cada variável. Estruturas ternárias são estruturas de controle reduzidas, bem simples de entender: $var = (condicao) ? VALOR_VERDADEIRO : VALOR_FALSO; Monta assim: $complete = ""; $complete .= (isset($tipo) && $tipo != "01") " AND produtos.Categoria ='$tipo'" : ""; $complete .= (isset($dorm) && $dorm != "01") " AND produtos.produtos_dorm='$dorm'" : ""; // Continua aqui... Feito isso, você insere a variável $complete na sua query sql: $sql = "SELECT * FROM tabela WHERE id='$id'$complete"; Ae supondo que o $tipo = "02", sua query ficaria assim: $sql = "SELECT * FROM tabela WHERE id='$id' AND produtos.Categoria ='02'"; Entendeu? Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Menegat 0 Denunciar post Postado Julho 23, 2009 Red Fenix..... agora entendi sim.... vou fazer as alterações..... e logo no inicio da tarde posto os resultados, pois tenho q sair agora.....xD..... por hora agradeço a ajuda...... te mais... Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 23, 2009 Vou mudar a passagem de parametro para post...Não é necessário mudar para post. Pode deixar como GET mesmo. Só que faça alguma validação antes. Se os códigos que vierem forem sempre números, use is_int. Um exemplo. $campo_tipo = (is_int($_GET['campo_tipo']) && !empty($_GET['campo_tipo'])) ? $_GET['campo_tipo'] : ''; Aqui vai validar se é um inteiro e se não está vazia. Caso não seja sempre valor inteiro (venha string), veja o que está naquele post. Não vejo necessidade de testar com if ternário. Pode ser if simples mesmo, já que não vai ter else. if(!empty($campo_tipo) && $campo_tipo != "01") $complete.= " AND produtos.Categoria ='$campo_tipo'"; Outra coisa. O if ternário do Red Fenix tem um defeito de sintaxe, caso queira usar. Falta um ?. $complete .= (isset($tipo) && $tipo != "01") " AND produtos.Categoria ='$tipo'" : "";// errado $complete .= (isset($tipo) && $tipo != "01") ? " AND produtos.Categoria ='$tipo'" : "";// correto Mais ou menos isto. O meu primeiro projeto também foi de uma imobiliária. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Red FeniX 4 Denunciar post Postado Julho 23, 2009 Opa matias, valeu cara! Nem percebi o meu erro de digitação. Foi na pressa, tava indo malhar. Mas eu acho que com if ternário fica melhor porque fica menor o código e até mais limpo. Mas ele que sabe. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Julho 23, 2009 Primeiro você define as variáveis com cada dado, isso é, se preferir. Assim: $tipo = $_GET["tipo"]; $dorm = $_GET["campo_dorm"]; // Continua.... $complete .= (isset($tipo) && $tipo != "01") " AND produtos.Categoria ='$tipo'" : ""; Só para esclarecer, quando você definiu (set) logo acima a variável $tipo, o isset passou a ser inútil. Se você quer verificar se o usuário realmente enviou a informação você deve utilizar o isset na hora de resgatar o offset do GET/POST: $tipo = $_GET["tipo"]; //aqui poderá gerar um warning se o usuário não enviar a informação "tipo" $t = isset( $tipo ); //lógico, sempre será verdadeiro, você acabou de definir $tipo ai em cima. Agora, a forma correta seria: $tipo = isset( $_GET[ "tipo" ] ) ? $_GET[ "tipo" ] : null; Compartilhar este post Link para o post Compartilhar em outros sites
Menegat 0 Denunciar post Postado Julho 23, 2009 Red Fenix seguinte...usei o seu codigo..fatava um '?' mas consertei... logo fiz o teste em uma pesquisa..... e então..... ele da esse erro: Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\servidor\dallas\busca.php on line 240 bom tentei ver oq era e nada de eu descobrir.... então resolvi mostra oq tem na variavel $sql...]e so aparece isso: Resource id #5 o codigo ficou assim: $id = "select Id from produtos"; $complete = " "; $complete .= (isset($tipo) && $tipo != "01") ? " AND produtos.Categoria ='$tipo'" : ""; $complete .= (isset($dorm) && $dorm != "01") ? " AND produtos.produtos_dorm='$dorm'" : " "; $complete .= (isset($box) && $box != "01") ? " AND produtos.produtos_box ='$box'" : " "; $complete .= (isset($dorm) && $situ != "01") ? " AND produtos.produtos_situ='$situ'" : " "; $complete .= (isset($tipo) && $faixa != "01") ? " AND produtos.produtos_faixa ='$faixa'" : " "; $complete .= (isset($bairro) && $bairro != "01") ? " AND produtos.produtos_bairro='$bairro'" : " "; $sql = mysql_query("SELECT * FROM produtos WHERE id='$id'$complete"); echo $sql; =[[ Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 23, 2009 Releia o post #3. Faça como está escrito lá. Coloque o select em uma variável e jogue dentro do mysql_query. Veja. $complete = "SELECT produtos.Id, produtos.Categoria, produtos.produtos.situ, produtos.produtos_dorm, produtos.produtos_box, produtos.produtos_faixa, produtos.produtos_bairro FROM produtos WHERE produtos.Id != '0' "; $complete .= (isset($tipo) && $tipo != "01") ? " AND produtos.Categoria ='$tipo'" : ""; $complete .= (isset($dorm) && $dorm != "01") ? " AND produtos.produtos_dorm='$dorm'" : " "; $complete .= (isset($box) && $box != "01") ? " AND produtos.produtos_box ='$box'" : " "; $complete .= (isset($dorm) && $situ != "01") ? " AND produtos.produtos_situ='$situ'" : " "; $complete .= (isset($tipo) && $faixa != "01") ? " AND produtos.produtos_faixa ='$faixa'" : " "; $complete .= (isset($bairro) && $bairro != "01") ? " AND produtos.produtos_bairro='$bairro'" : " "; $sql = mysql_query($complete) or die('Erro na consulta - '.$complete.'<br/>'.mysql_error()); Se existir algum erro, vai imprimir ele na tela. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Menegat 0 Denunciar post Postado Julho 24, 2009 Releia o post #3. Faça como está escrito lá. Coloque o select em uma variável e jogue dentro do mysql_query. Veja. $complete = "SELECT produtos.Id, produtos.Categoria, produtos.produtos.situ, produtos.produtos_dorm, produtos.produtos_box, produtos.produtos_faixa, produtos.produtos_bairro FROM produtos WHERE produtos.Id != '0' "; $complete .= (isset($tipo) && $tipo != "01") ? " AND produtos.Categoria ='$tipo'" : ""; $complete .= (isset($dorm) && $dorm != "01") ? " AND produtos.produtos_dorm='$dorm'" : " "; $complete .= (isset($box) && $box != "01") ? " AND produtos.produtos_box ='$box'" : " "; $complete .= (isset($dorm) && $situ != "01") ? " AND produtos.produtos_situ='$situ'" : " "; $complete .= (isset($tipo) && $faixa != "01") ? " AND produtos.produtos_faixa ='$faixa'" : " "; $complete .= (isset($bairro) && $bairro != "01") ? " AND produtos.produtos_bairro='$bairro'" : " "; $sql = mysql_query($complete) or die('Erro na consulta - '.$complete.'<br/>'.mysql_error()); Se existir algum erro, vai imprimir ele na tela. Carlos Eduardo Ola carlos... Não pude fazer como no post #3 pois eu não conseguia vizualizaer o tag do code... refiz como voce postou ai...ele n apresenta erros..... ai coloquei um echo na variavel $sql e e ele retorna apenas isso: Resource id #5 agradeço as ajudas Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 24, 2009 Não pude fazer como no post #3 pois eu não conseguia vizualizaer o tag do code... Como assim? Não dá pra ver? Qual navegador está usando? Sobre o problema do tópico, se não apresenta erros é para funcionar. Como está seu código no momento? O que ocorreu? você diz que não apareceu nenhuma mensagem de erro, mas como se comportou? O que era para exibir e o que exibiu? Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Menegat 0 Denunciar post Postado Julho 24, 2009 Carlos eu uso IE 7... bom meu codigo esta atualmente assim: //recebimeno dos valores que o usuario informou na busca $campo = $_GET["campo_Tipo"]; $dormitorios = $_GET["campo_Dorm"]; $bairro = $_GET["campo_Bairro"]; $faixa = $_GET["campo_Faixa"]; $box = $_GET["campo_box"]; $situ = $_GET["campo_situ"]; $pagina = 1; if($campo == "01"){ $msg = "Campo Imovel Invalido!"; }//fecha primeiro if else{ $complete = "SELECT produtos.Id, produtos.Categoria, produtos.produtos_situ, produtos.produtos_dorm, produtos.produtos_box, produtos.produtos_faixa, produtos.produtos_bairro FROM produtos WHERE produtos.Id != '0' "; $complete .= (isset($tipo) && $tipo != "01") ? "AND produtos.Categoria ='$tipo'" : ""; $complete .= (isset($dorm) && $dorm != "01") ? " AND produtos.produtos_dorm='$dorm'" : ""; $complete .= (isset($box) && $box != "01") ? " AND produtos.produtos_box ='$box'" : ""; $complete .= (isset($situ) && $situ != "01") ? " AND produtos.produtos_situ='$situ'" : ""; $complete .= (isset($tipo) && $faixa != "01") ? " AND produtos.produtos_faixa ='$faixa'" : ""; $complete .= (isset($bairro) && $bairro != "01") ? " AND produtos.produtos_bairro='$bairro'" : ""; $sql = mysql_query($complete) or die('Erro na consulta - '.$complete.'<br/>'.mysql_error()); echo $sql; $sql5 = mysql_query($sql); $num = mysql_num_rows($sql5); if($num == "0"){ $msg = "Nenhum imóvel cadastrado com estas informações."; } }//fecha primero else //Mostra o resultado da busca na tela <?php while($row5 = @mysql_fetch_assoc($sql5)){ ?> <?php $link = $row5["Id"]; ?> <?php echo '<img src="ff.gif" width="4" height="7"><span class="style5">_</span>' . '<span class="fonte_data">' . '<a href="produtos_detalhe.php?id='.$link.'">' . '<span class="fonte_data">' . $row5["produtos_nome"] . '</a>' .'<br><br>'; ?> <?php $foto++; ?> <?php } ?> Bom o codigo deveria mostras os imoveis filtrados de acordo com os dados que o ussuario definiu mas na tela ele não mostra nada, nem a mensagem de não haver os produtos nem mensagem de erros das querys. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 24, 2009 Vamos debugar o código... Ative todas as mensagens de erro... error_reporting(E_ALL); Coloque isto no início do código para imprimir o que vem do GET. echo '<pre>'; print_r($_GET); Vai exibir um monte de erros. Achei vários... Tente entender o que está escrito em cada um deles e tente corrigir. São todos simples e provavelmente serão todos iguais. Confira os nomes de variáveis que vem do GET e o nome das variáveis que você está usando... Vou dar um exemplo... $dormitorios = $_GET["campo_Dorm"];// confira se vem como campo_Dorm mesmo... é diferente de CAMPO_DORM. $complete .= (isset($dorm) && $dorm != "01") ? " AND produtos.produtos_dorm='$dorm'" : "";/ aqui você usa $dorm e ali em cima você setou $dormitorios Qualquer coisa posta novamente. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Menegat 0 Denunciar post Postado Julho 24, 2009 Carlos assim.....nem tinha notado a variavel $dormitoris e dpois $dorm.. fiz os ajustes nas variaveis..era so essa q estava diferete... ele apresentas isso no $_GET: Array ( [campo_Tipo] => 15 [campo_situ] => 01 [campo_Dorm] => 01 [campo_box] => 01 [campo_Faixa] => 01 [campo_Bairro] => 01 [submit] => Procurar ) e não aparece msg de erro....não referente ao codigo de filtro...... que são esses: Notice: Undefined index: categorias_id in C:\servidor\dallas\busca.php on line 136 Notice: Undefined index: categorias_id in C:\servidor\dallas\busca.php on line 139 //pega o produto e coloca no display. $sql8 = mysql_query("select * from produtos where Categoria='".$_REQUEST["categorias_id"]."' "); //pega por get as informações para qual a categoria o cara clicou. $sql9 = mysql_query("select * from categorias where Id='".$_REQUEST["categorias_id"]."' order by Id desc"); $row9 = mysql_fetch_array($sql9); Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 25, 2009 Tá, mas e não está funcionando? o que está ocorrendo? Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Menegat 0 Denunciar post Postado Julho 27, 2009 Tá, mas e não está funcionando? o que está ocorrendo? Carlos Eduardo Carlos, sim esta funcionando... antes ele não mostrava os produtos encontrados, pq coloquei para ele aparecer o nome do produtos, e na seleção da query eu não selecionava o nome..... mas agora esta funcionando tudo certinho como deveria... agradeço a todos q ajudaram e me mostraram mais algumas peculiaridades de PHP q eu não conhecia.... um abraço a todos... Compartilhar este post Link para o post Compartilhar em outros sites