Jump to content

Recommended Posts

Posted (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 by Etiqueta
Posted (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 by johnmaia
Posted (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 by johnmaia
Posted

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

Posted

$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%.

Posted

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`";
Posted (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 by Etiqueta
Posted

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!

Posted (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 by johnmaia
Posted (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 by johnmaia
2x post junto
Posted

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?

Posted (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 by johnmaia

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.