Etiqueta Posted May 28, 2012 at 02:17 PM Report #458529 Posted May 28, 2012 at 02:17 PM (edited) Boa tarde, estou a desenvolver uma pesquisa. O utilizador pode pesquisar inserindo a palavra num campo ou pode pesquisar só seleccionando um item da dropdown ou pelas duas (campo + dropdown). Mas está-me a surgir uns erros. Aqui fica o código que tenho: <form action="" method="post" name="f_cidade" id="f_cidade"> <input name="texto" type="text" id="texto" /> <br /> <!-- INICIO DROPDOWN DISTRITOS --> <select scrolling="no" name="cidade" id="cidade"> <option value="0" selected="selected">Seleccione o distrito</option> <?php include '../conexao.php'; session_start(); $selCats = "SELECT * FROM cidade ORDER BY Distrito ASC"; $qrCats = mysql_query($selCats); while ($linhaCat = mysql_fetch_array($qrCats)) { ?> <option value="<?php echo $linhaCat['ID_Localizacao']; ?>"><?php echo $linhaCat['Distrito']; ?></option><br/> <?php } ?> </select> <!-- FIM DROPDOWN DISTRITOS --> <br /> <div id="botao_proc"> <input type="submit" name="btn_procurarCidade" id="btn_procurarCidade" value=" " /></div> <input type="hidden" name="accao" value="pesquisar" /> </form> <?php include '../conexao.php'; if (isset($_POST['accao']) && $_POST['accao'] == 'pesquisar') { $texto = strip_tags(trim($_POST['texto'])); $ID_Localizacao = $_POST['Distrito']; if ($texto != '0') { $pesq = "SELECT * FROM oferta WHERE Funcao LIKE '%$texto%' GROUP BY oferta.Funcao"; } if ($ID_Localizacao != '0') { //'%$texto%' AND $pesq = "SELECT * FROM oferta WHERE ID_Localizacao LIKE '%$ID_Localizacao%' GROUP BY oferta.Funcao"; } if ($texto != '0' && $ID_Localizacao != '0') { $pesq = "SELECT * FROM oferta WHERE Funcao LIKE '%$texto%' AND ID_Localizacao = '$ID_Localizacao' GROUP BY oferta.Funcao"; } $pesq = $_SESSION['pesq']; //echo "pesq: " .$pesq; $iqrPesquisa = mysql_query($pesq); $registos_count = mysql_num_rows($iqrPesquisa); $_SESSION['nreg'] = $registos_count; if (mysql_num_rows($iqrPesquisa) == '0') { echo "<br><br>"; echo "<p id='pa1' align='center'>" . 'Não foram encontrados registos!' . "</p>"; echo "<br><br>"; echo "<br><br>"; } else { $contador = 0; while ($linhaPesquisa = mysql_fetch_assoc($iqrPesquisa)) { $ID_Oferta = $linhaPesquisa['ID_Oferta']; $Data = $linhaPesquisa['ID_Oferta']; $Empresa = $linhaPesquisa['Empresa']; $Funcao = $linhaPesquisa['Funcao']; $Local = $linhaPesquisa['Local']; $contador++; if ($contador > $per_page) break; ?> <?php echo "<p align='center'><div class='imgsmarcapesq'><a id='acolor' href='marca1.php?id=$id&id_video=$v' target='_self' class='mais_border'><img id='imgmrc' width='105' height='95' src='admin/img/Marcas/" . $linhaPesquisa['ID_Oferta'] . "' alt='' /> " . "</p>"; echo "<p id='pmrc' align='center'>" . $linhaPesquisa['Empresa'] . "</p>"; echo "<p id='pmrc' align='center'>" . $linhaPesquisa['Funcao'] . "</p>"; echo "<p id='pmrc' align='center'>" . $linhaPesquisa['Local'] . "</p></div>"; ?> <?php } } } ?> não está a fazer pesquisa nenhuma. Aparece: SELECT * FROM oferta WHERE Funcao = '' Não foram encontrados registos! Obrigada desde já pela ajuda Edited May 28, 2012 at 02:18 PM by Etiqueta Facebook: https://www.facebook.com/DeArteaZ Blog: http://arte-a-z.blogspot.com
johnmaia Posted May 28, 2012 at 03:10 PM Report #458559 Posted May 28, 2012 at 03:10 PM (edited) if ($texto != 0 && $ID_Localizacao != 0) $pesq = "SELECT * FROM oferta WHERE Funcao LIKE '".$texto."' AND ID_Localizacao = '".$ID_Localizacao."' GROUP BY oferta.Funcao"; else if ($texto != 0) $pesq = "SELECT * FROM oferta WHERE Funcao LIKE '".$texto."' GROUP BY oferta.Funcao"; else if ($ID_Localizacao != 0) $pesq = "SELECT * FROM oferta WHERE ID_Localizacao LIKE '".$ID_Localizacao."' GROUP BY oferta.Funcao"; Tenta assim. Edited May 28, 2012 at 03:14 PM by johnmaia
Etiqueta Posted May 28, 2012 at 03:29 PM Author Report #458562 Posted May 28, 2012 at 03:29 PM não deu. fiz um echo : pesq: SELECT * FROM oferta WHERE Funcao LIKE '%%' AND ID_Localizacao = '' GROUP BY oferta.Funcao não está a ir buscar os valores inseridos Facebook: https://www.facebook.com/DeArteaZ Blog: http://arte-a-z.blogspot.com
johnmaia Posted May 28, 2012 at 03:34 PM Report #458567 Posted May 28, 2012 at 03:34 PM (edited) Vê então o que está a ser recebido nas variaveis que vêm pelo POST. Reparei que estavas a fazer POST a "Distrito" e o nome correcto é "cidade". $texto = strip_tags(trim($_POST['texto'])); $ID_Localizacao = $_POST['cidade']; echo "TEXTO[original]: ".$_POST['texto']."<br/>"; echo "TEXTO[modificado]: ".$texto."<br/>"; echo "LOCALIZACAO: ".$_POST['cidade']."<br/>"; Altera também o teu Select para: <?php include '../conexao.php'; session_start(); $selCats = "SELECT * FROM cidade ORDER BY Distrito ASC"; $qrCats = mysql_query($selCats); ?> <select name="cidade" id="cidade"> <option value="0" selected="selected">Seleccione o distrito</option> <? while ($linhaCat = mysql_fetch_array($qrCats)) echo '<option value="'.$linhaCat['ID_Localizacao'].'" selected="selected">'.$linhaCat['Distrito'].'</option>'; ?> </select> E dado que caso não seja escrito nada na a tua variável "texto", o valor dela não será 0, mas sim Null. Então as condições já serão diferentes: if ($texto != Null && $ID_Localizacao != 0) $pesq = "SELECT * FROM oferta WHERE Funcao LIKE '".$texto."' AND ID_Localizacao = '".$ID_Localizacao."' GROUP BY oferta.Funcao"; else if ($texto != Null) $pesq = "SELECT * FROM oferta WHERE Funcao LIKE '".$texto."' GROUP BY oferta.Funcao"; else if ($ID_Localizacao != Null) $pesq = "SELECT * FROM oferta WHERE ID_Localizacao LIKE '".$ID_Localizacao."' GROUP BY oferta.Funcao"; Experimenta usar o Texto sem o strip_tag: Coloca só mysql_real_escape_string para evitar MySql Injections. $texto = mysql_real_escape_string($$_POST['texto']); $ID_Localizacao = mysql_real_escape_string($$_POST['cidade']); Edited May 28, 2012 at 04:03 PM by johnmaia
Etiqueta Posted May 28, 2012 at 04:19 PM Author Report #458580 Posted May 28, 2012 at 04:19 PM isso do MySql Injections é importante. Esse "truque" não sabia. obrigada fiz como indicas-te ele está a passar sim os campos. mas na query não, não sei porquê- TEXTO[original]: pedreiro LOCALIZACAO: 6 pesq: SELECT * FROM oferta WHERE Funcao LIKE '%%' AND ID_Localizacao = '' GROUP BY oferta.Funcao eu pus a dropdown como sugeriste mas não apresentou os dados correctamente. Deixei como tinha porque essa parte estava-me a dar bem Facebook: https://www.facebook.com/DeArteaZ Blog: http://arte-a-z.blogspot.com
brunoais Posted May 28, 2012 at 04:32 PM Report #458586 Posted May 28, 2012 at 04:32 PM $texto = mysql_real_escape_string($$_POST['texto']); $ID_Localizacao = mysql_real_escape_string($$_POST['cidade']); A maneira correta é assim: $texto = mysql_real_escape_string($_POST['texto']); $ID_Localizacao = mysql_real_escape_string($_POST['cidade']); "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
Etiqueta Posted May 28, 2012 at 04:38 PM Author Report #458587 Posted May 28, 2012 at 04:38 PM obrigada brunoais. isso são dados para ver se estava a receber os valores inseridos nos campos. sabes porque não estou a conseguir fazer a pesquisa correctamente? Facebook: https://www.facebook.com/DeArteaZ Blog: http://arte-a-z.blogspot.com
HappyHippyHippo Posted May 28, 2012 at 04:44 PM Report #458589 Posted May 28, 2012 at 04:44 PM como os elementos não estão a ser preenchidos no SQL faz só este teste : print_r($_POST); e diz o resultado IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Etiqueta Posted May 28, 2012 at 04:48 PM Author Report #458592 Posted May 28, 2012 at 04:48 PM o resultado: TEXTO: pedreiro LOCALIZACAO: 6 Array ( [texto] => pedreiro [cidade] => 6 [btn_procurarCidade] => [accao] => pesquisar ) pesq: SELECT * FROM oferta WHERE Funcao LIKE '%%' AND ID_Localizacao = '' GROUP BY oferta.Funcao não está a correr os ifs criados. Facebook: https://www.facebook.com/DeArteaZ Blog: http://arte-a-z.blogspot.com
johnmaia Posted May 28, 2012 at 06:07 PM Report #458617 Posted May 28, 2012 at 06:07 PM Correr está, pois a variavel $pesq não está vazia quando é imprimida. Tenta assim: if ($texto != Null && $ID_Localizacao != 0) $pesq = "SELECT * FROM `oferta` WHERE `Funcao` LIKE '".$texto."' AND `ID_Localizacao` = '".$ID_Localizacao."' GROUP BY `Funcao`"; else if ($texto != Null) $pesq = "SELECT * FROM `oferta` WHERE `Funcao` LIKE '".$texto."' GROUP BY `Funcao`"; else if ($ID_Localizacao != Null) $pesq = "SELECT * FROM `oferta` WHERE `ID_Localizacao` LIKE '".$ID_Localizacao."' GROUP BY `Funcao`";
Etiqueta Posted May 29, 2012 at 10:11 AM Author Report #458796 Posted May 29, 2012 at 10:11 AM (edited) continua sem dar. tenho o código assim: <form action="" method="post" name="f_cidade" id="f_cidade"> <input name="texto" type="text" id="texto" /> <br /> <!-- INICIO DROPDOWN DISTRITOS --> <select scrolling="no" name="cidade" id="cidade"> <option value="0" selected="selected">Seleccione o distrito</option> <?php session_start(); include_once '../conexao.php'; $selCats = "SELECT * FROM cidade ORDER BY Distrito ASC"; $qrCats = mysql_query($selCats); while($linhaCat = mysql_fetch_array($qrCats)){ ?> <option value="<?php echo $linhaCat['ID_Localizacao'];?>"><?php echo $linhaCat['Distrito'];?></option><br/> <?php } ?> </select> <!-- FIM DROPDOWN DISTRITOS --> <br /> <div id="botao_proc"> <input type="submit" name="btn_procurarCidade" id="btn_procurarCidade" value=" " /></div> <input type="hidden" name="accao" value="pesquisar" /> </form> <?php if(isset($_POST['accao']) && $_POST['accao'] == 'pesquisar'){ $texto = mysql_real_escape_string(trim($_POST['texto'])); $ID_Localizacao = mysql_real_escape_string($_POST['cidade']); echo "TEXTO: ".$texto."<br/>"; echo "LOCALIZACAO: ".$ID_Localizacao."<br/>"; if ($texto != Null && $ID_Localizacao != 0) { $pesq = "SELECT * FROM `oferta` WHERE `Funcao` LIKE '".$texto."' AND `ID_Localizacao` = '".$ID_Localizacao."' GROUP BY `Funcao`"; } else if ($texto != Null) { $pesq = "SELECT * FROM `oferta` WHERE `Funcao` LIKE '".$texto."' GROUP BY `Funcao`"; } else if ($ID_Localizacao != Null) { $pesq = "SELECT * FROM `oferta` WHERE `ID_Localizacao` LIKE '".$ID_Localizacao."' GROUP BY `Funcao`"; } print_r($_POST); $pesq = $_SESSION['pesq']; echo "pesq: " .$pesq; $iqrPesquisa = mysql_query($pesq); $registos_count = mysql_num_rows($iqrPesquisa); $_SESSION['nreg']=$registos_count; if(mysql_num_rows($iqrPesquisa) == 0){ echo "<br><br>"; echo "<p id='pa1' align='center'>".'Não foram encontrados registos!'."</p>"; echo "<br><br>"; echo "<br><br>"; }else{ $contador=0; while($linhaPesquisa = mysql_fetch_assoc($iqrPesquisa)){ $ID_Oferta = $linhaPesquisa['ID_Oferta']; $Data = $linhaPesquisa['ID_Oferta']; $Empresa = $linhaPesquisa['Empresa']; $Funcao = $linhaPesquisa['Funcao']; $Local = $linhaPesquisa['Local']; $contador++; if($contador>$per_page)break; ?> <?php echo "<p id='pmrc' align='center'>".$linhaPesquisa['ID_Oferta']."</p>"; echo "<p id='pmrc' align='center'>".$linhaPesquisa['Empresa']."</p>"; echo "<p id='pmrc' align='center'>".$linhaPesquisa['Funcao']."</p>"; echo "<p id='pmrc' align='center'>".$linhaPesquisa['Local']."</p></div>"; ?> <?php } } } ?> e está a apresentar: TEXTO: pedreiro LOCALIZACAO: 17 Array ( [texto] => pedreiro [cidade] => 17 [btn_procurarCidade] => [accao] => pesquisar ) pesq: Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\NSEmprega\website\ofertas.php on line 163 Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\NSEmprega\website\ofertas.php on line 166 Não foram encontrados registos! e mais a baixo apresenta: SELECT * FROM oferta WHERE Funcao = '' Não foram encontrados registos! Edited May 29, 2012 at 10:08 AM by Etiqueta Facebook: https://www.facebook.com/DeArteaZ Blog: http://arte-a-z.blogspot.com
johnmaia Posted May 29, 2012 at 10:45 AM Report #458822 Posted May 29, 2012 at 10:45 AM Comenta esta linha do teu código. $pesq = $_SESSION['pesq'];
Etiqueta Posted May 29, 2012 at 11:00 AM Author Report #458831 Posted May 29, 2012 at 11:00 AM já está a passar bem as variaveis para a query mas continua a aparecer TEXTO: Contabilista LOCALIZACAO: 6 Array ( [texto] => Contabilista [cidade] => 6 [btn_procurarCidade] => [accao] => pesquisar ) pesq: SELECT * FROM `oferta` WHERE `Funcao` LIKE 'Contabilista' AND `ID_Localizacao` = '6' GROUP BY `Funcao` Não foram encontrados registos! aparece os dados todos e em baixo aparece outra vez: SELECT * FROM oferta WHERE Funcao = '' Não foram encontrados registos! Facebook: https://www.facebook.com/DeArteaZ Blog: http://arte-a-z.blogspot.com
johnmaia Posted May 29, 2012 at 11:18 AM Report #458839 Posted May 29, 2012 at 11:18 AM (edited) já está a passar bem as variaveis para a query mas continua a aparecer TEXTO: Contabilista LOCALIZACAO: 6 Array ( [texto] => Contabilista [cidade] => 6 [btn_procurarCidade] => [accao] => pesquisar ) pesq: SELECT * FROM `oferta` WHERE `Funcao` LIKE 'Contabilista' AND `ID_Localizacao` = '6' GROUP BY `Funcao` Não foram encontrados registos! aparece os dados todos e em baixo aparece outra vez: SELECT * FROM oferta WHERE Funcao = '' Não foram encontrados registos! Aparecem Resultados correctos da Query? Fiquei sem perceber. Edited May 29, 2012 at 11:19 AM by johnmaia
Etiqueta Posted May 29, 2012 at 11:34 AM Author Report #458848 Posted May 29, 2012 at 11:34 AM aparece assim: http://alojaimagens.com/viewer.php?file=w91kaqfgb3lzapx1dmhh.png e depois isto http://alojaimagens.com/viewer.php?file=knyhnbozucv1sk0rqkh.png Facebook: https://www.facebook.com/DeArteaZ Blog: http://arte-a-z.blogspot.com
johnmaia Posted May 29, 2012 at 11:47 AM Report #458852 Posted May 29, 2012 at 11:47 AM (edited) Tenta listar com este código. $registos_count = mysql_num_rows($iqrPesquisa); $_SESSION['nreg'] = $registos_count; if($registos_count == 0) { echo "<br><br>"; echo "<p id='pa1' align='center'>".'Não foram encontrados registos!'."</p>"; echo "<br><br>"; echo "<br><br>"; } else { $contador=0; while($linhaPesquisa = mysql_fetch_assoc($iqrPesquisa)) { echo "<p id='pmrc' align='center'>".$linhaPesquisa['ID_Oferta']."</p>"; echo "<p id='pmrc' align='center'>".$linhaPesquisa['Empresa']."</p>"; echo "<p id='pmrc' align='center'>".$linhaPesquisa['Funcao']."</p>"; echo "<p id='pmrc' align='center'>".$linhaPesquisa['Local']."</p></div>"; $contador++; if($contador>$per_page)break; } } Pode ser melhorizado, tira aquele if dentro do while: $registos_count = mysql_num_rows($iqrPesquisa); $_SESSION['nreg'] = $registos_count; if($registos_count == 0) { echo "<br><br>"; echo "<p id='pa1' align='center'>".'Não foram encontrados registos!'."</p>"; echo "<br><br>"; echo "<br><br>"; } else { $contador=0; while(($linhaPesquisa = mysql_fetch_assoc($iqrPesquisa)) && ($contador<=$per_page)) { echo "<p id='pmrc' align='center'>".$linhaPesquisa['ID_Oferta']."</p>"; echo "<p id='pmrc' align='center'>".$linhaPesquisa['Empresa']."</p>"; echo "<p id='pmrc' align='center'>".$linhaPesquisa['Funcao']."</p>"; echo "<p id='pmrc' align='center'>".$linhaPesquisa['Local']."</p></div>"; $contador++; } } E se a tua intenção era gravar a query na session, tinhas o codigo ao contrario. A maneira correcta era assim: $_SESSION['pesq'] = $pesq; Edited May 29, 2012 at 01:30 PM by johnmaia 2x post junto
Etiqueta Posted May 29, 2012 at 01:44 PM Author Report #458874 Posted May 29, 2012 at 01:44 PM já apresenta a pesquisa mas quando tenho 3 registo só me aparece um dos registo. pesquisei na dropdown por Lisboa e só apareceu um dos 3 registo existentes e deveriam aparecer todos os existentes. Está dentro do while e tudo... 😕 Obrigada pela ajuda. Facebook: https://www.facebook.com/DeArteaZ Blog: http://arte-a-z.blogspot.com
johnmaia Posted May 29, 2012 at 01:51 PM Report #458878 Posted May 29, 2012 at 01:51 PM já apresenta a pesquisa mas quando tenho 3 registo só me aparece um dos registo. pesquisei na dropdown por Lisboa e só apareceu um dos 3 registo existentes e deveriam aparecer todos os existentes. Está dentro do while e tudo... 😕 Obrigada pela ajuda. Não será porque os resultados estão agrupados pelo campo Funcao?
Etiqueta Posted May 29, 2012 at 02:01 PM Author Report #458888 Posted May 29, 2012 at 02:01 PM mesmo sem agrupar plo campo Funcao continua a apresentar só um dos 3 resultados existentes Facebook: https://www.facebook.com/DeArteaZ Blog: http://arte-a-z.blogspot.com
johnmaia Posted May 29, 2012 at 02:09 PM Report #458893 Posted May 29, 2012 at 02:09 PM (edited) Tenta assim: if ($texto != Null && $ID_Localizacao != 0) $pesq = "SELECT * FROM `oferta` WHERE `Funcao` LIKE '%".$texto."%' AND `ID_Localizacao` = '".$ID_Localizacao."' GROUP BY `Funcao`"; else if ($texto != Null) $pesq = "SELECT * FROM `oferta` WHERE `Funcao` LIKE '%".$texto."%' GROUP BY `Funcao`"; else if ($ID_Localizacao != Null) $pesq = "SELECT * FROM `oferta` WHERE `ID_Localizacao` = '".$ID_Localizacao."' GROUP BY `Funcao`"; E se assim não funcionar, experimenta o mesmo códgio, mas sem "GROUP BY `Funcao`". Edited May 29, 2012 at 02:15 PM by johnmaia
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now