Jump to content

search


diokhan
 Share

Recommended Posts

boas,

sei que ultimamente ando a fazer muitas perguntas..mas pronts..procurei antes no forum e nao encontrei nada deste genero.

eu queria fazer um search no meu site, mas por exemplo, tenho uma input para introduzir o texto, e ao lado tenho uma select box para seleccionar a tabela onde pesquisar e desta escolha temos outra select box onde escolho o campo, referente a tabela escolhida, onde pesquisar, ou entao um search que faz a pesquisa em todas as tabelas ao mesmo tempo e em todos os campos. se alguem souber um script que me possa ajudar agradecia  🙂

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

  • Replies 53
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

como ja sabes a tabela e o campo so precisas de concatenar uma string ( com a devida segurança usando o mysql_real_escape_string por exemplo ) e fazes uma query do genero $var = 'SELECT '.$campo.' FROM '.$tabela.' WHERE '.$campo.' LIKE \'%'.$textoQueAPessoaPesquisou.'%\''

PS: Caso queiras uma coisa um pouco mais "politicamente correcta" e um pouco mais complicada lê: http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

"Quando eu for grande quero ser como o Celso"

Link to comment
Share on other sites

como ja sabes a tabela e o campo so precisas de concatenar uma string ( com a devida segurança usando o mysql_real_escape_string por exemplo ) e fazes uma query do genero $var = 'SELECT '.$campo.' FROM '.$tabela.' WHERE '.$campo.' LIKE \'%'.$textoQueAPessoaPesquisou.'%\''

PS: Caso queiras uma coisa um pouco mais "politicamente correcta" e um pouco mais complicada lê: http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

e como é que eu apanho as variaveis? que eu faço por uma select box

<SELECT name=project>
        	<option name=project>Project Name</option>
        	<option name=description>Description</option>
        	<option name=idplate>ID Plate</option>
</SELECT>

é pelo name da option certo?

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

Não, para isso funcionar o HTML tem que estar desta maneira

<select name="lst_project">
         <option value="project">Project Name</option>
         <option value="description">Description</option>
         <option value="idplate">ID Plate</option>
</select>

Agora no ficheiro que ira receber esses dados usas o array $_POST['lst_projecto']

Caso seja seleccionado a opçao "project" o array vai retornar o valor que esta no atributo value.

Percebido?  😉

Link to comment
Share on other sites

este é o meu codigo actual:

echo'<form method="GET" action="restrito.php?opcao=project">
      <fieldset>
        <label for="consulta">Search:</label>
        <input type="hidden" value="project" name="opcao" />
        <SELECT name=projects id=projects>
        	<option name=nameproject>Project Name</option>
        	<option name=description>Description</option>
        	<option name=idplate>ID Plate</option>
        </SELECT>
        <input type="text" id="consulta" name="consulta" maxlength="255" />
        <input type="submit" value="Search" />
      </fieldset>
    </form>';

no meu caso ficaria assim:

echo'<form method="GET" action="restrito.php?opcao=project">
      <fieldset>
        <label for="consulta">Search:</label>
        <input type="hidden" value="project" name="opcao" />
        <SELECT name=lst_project>
        	<option value=nameproject>Project Name</option>
        	<option value=description>Description</option>
        	<option value=idplate>ID Plate</option>
        </SELECT>
        <input type="text" id="consulta" name="consulta" maxlength="255" />
        <input type="submit" value="Search" />
      </fieldset>
    </form>';

e na query da pesquisa seria algo do tipo:

"SELECT * FROM project WHERE '".$_GET['lst_project']."' LIKE '%".$_GET['consulta']."%' ORDER BY ID_PROJECT ASC";

certo?

e o value das option devem ser iguais aos nomes dos campos nas tabelas?

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

tao neste caso com o POST o codigo ficaria:

echo'<form method="POST" action="restrito.php?opcao=project">
      <fieldset>
        <label for="consulta">Search:</label>
        <input type="hidden" value="project" name="opcao" />
        <input type="text" id="consulta" name="consulta" maxlength="255" />
         <SELECT name=lst_project>
        	<option value=NAME_PROJECT>Project</option>
        	<option value=DESCRIPTION>Description</option>
        	<option value=ID_PLATE>Plate</option>
        </SELECT>
        <input type="submit" value="Search" />
      </fieldset>
    </form>';

e na query:

SELECT * FROM project WHERE '".$_POST['lst_project']."' LIKE '%".$_POST['consulta']."%' ORDER BY ID_PROJECT ASC

certo? ou tenho de alterar algo?

eu pensava que por causa dos campos hidden precisava mesmo de usar o GET 😞

eu mudei do GET para o POST..mas agora sempre que faço uma pesquisa nao acontece nada 😉

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

uma ultima duvida sobre o search..eu faço o search numa boa, mas se eu clicar num dos icones da tabela, apresenta os dados abaixo e a logica seria nao perder a pesquisa, mas perco a pesquisa. eu deixo aqui o meu codigo caso alguem possa ajudar-me

<?php
require_once ('../Project Manager/admin/page.php');

echo'<form method="POST" action="restrito.php?opcao=project">
      <fieldset>
        <label for="consulta">Search:</label>
        <input type="text" id="consulta" name="consulta" maxlength="255" />
        <SELECT name=lst_project id=lst_project>
        	<option value=NAME_PROJECT>Project Name</option>
        	<option value=DESCRIPTION>Description</option>
        	<option value=ID_PLATE>ID Plate</option>
        	<option value=DATE>Date</option>
        </SELECT>
        <input type="submit" value="Search" />
      </fieldset>
    </form>';

echo'<table class="tabela" align=center>
    <tr>
        <th align=center>
    		Name Project
        </th>
        <th align=center>
        	Date
        </th>
       	<th align=center>
        	Id Plate
       	</th>
       	<th align=center>
        	View Project
       	</th>';
/* Verifica nivel de acesso do utilizador. 
        			Apenas quem tem acesso de nivel 2 consegue visualizar estas opções. */
if (isset($_SESSION['ACCESS_LEVEL'])){
if ($_SESSION['ACCESS_LEVEL']==2){
       	echo'<th  align=center>
       			Edit Project
       		</th>
       		<th  align=center>
       			Delete Project
       		</th>
       		<th  align=center>
       			View Task
       		</th>
       		</tr>';
       		}
}
       		     
	$conexao = new Conexao();
	$conexao = $conexao->conexao;

	$paginacao = new Paginacao_PDO();
	if (!isset($_POST['consulta'])) {
		$paginacao->sql = "SELECT * FROM project ORDER BY ID_PROJECT ASC";
	}
	else{
		$paginacao->sql = "SELECT * FROM project WHERE ".$_POST['lst_project']." 
									LIKE '%".$_POST['consulta']."%' ORDER BY ID_PROJECT ASC";
	}


	$res = $conexao->query($paginacao->sql());

	while($r = $res->fetch(PDO::FETCH_OBJ)) {
        echo '<tr>
        	<td>';
        		print $r->NAME_PROJECT;
        	echo'</td>
        	<td>';
        		print $r->DATE;
        	echo'</td>
        	<td  align=center>';
        		print $r->ID_PLATE;
        	echo"</td>
        	<td align=center>
       			<a href=restrito.php?opcao=project&po=view&id=$r->ID_PROJECT>
       				<img src=images/add.png border=0 align=center></a>
      		</td>";
        	
	         /* Verifica nivel de acesso do utilizador. 
        			Apenas quem tem acesso de nivel 2 consegue visualizar estas opções. */
        	if (isset($_SESSION['ACCESS_LEVEL'])){
        	if ($_SESSION['ACCESS_LEVEL']==2){
        	echo"
       			<td align=center>
       				<a href=restrito.php?opcao=project&po=edit&id=$r->ID_PROJECT>
       					<img src=images/pencil.png border=0 align=center></a>
      			</td>
       			<td align=center>
       				<a href=restrito.php?opcao=project&po=delete&id=$r->ID_PROJECT>
       					<img src=images/cross.png border=0 align=center></a>
       			</td>
       			<td align=center>
       				<a href=restrito.php?opcao=project&po=task&id=$r->ID_PROJECT>
       					<img src=images/clipboard_text.png border=0 align=center></a>
       			</td>";
        	}
        	}
		echo'</tr>';
	}
        
echo "</table>";
$paginacao->imprimeBarraNavegacao(); 

if ( isset ($_GET['po'])){
	echo"<table align=center>";
		if ($_GET['po']=='edit'){
			include('admin/edit/edit_project.php');
		}elseif($_GET['po']=='delete'){
			include('admin/edit/delete_project.php');
		}elseif($_GET['po']=='task'){
			include('admin/viewtask.php');
		}elseif($_GET['po']=='view'){
			include('admin/viewproject.php');
		}
	echo "</table>";
}
?>

eu pensei em fazer um ciclo while dentro do:

else{
		//o while seria aqui
$paginacao->sql = "SELECT * FROM project WHERE ".$_POST['lst_project']."  LIKE '%".$_POST['consulta']."%' ORDER BY ID_PROJECT ASC";

	}

com a condiçao de fazer o ciclo ate sair da pagina..é possivel?

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

por exemplo..eu faço uma pesquisa e nos resultados faço editar um projecto, aparece a ediçao em baixo, mas ao clicar em editar eu perco a pesquisa, mas gostaria que a pesquisa continuasse, que estivesse sempre a funcionar a pesquisa, e pensei em fazer algum ciclo antes da query da pesquisa para obrigar a manter a variavel activa. nao sei se a ideia que tenho é a mais correcta

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

PHP é interpretado e no fim é lançado o resultado para o browser. A partir da altura em que fazem um request, deixas de ter qualquer php sequer, ficas só com o html, css, javascript, etc, como se fosse estático. Se pusesses isso em execução com um cliclo, o que aconteceria é que o php ia ficar eternamente a pensar e não chegavas a receber o resultado estático da pagina por completo, era até o php chegar ao limite de execução ou dar algum erro.

Tens 2 soluções :

1. ir passando o valor da pesquisa (string) através das páginas, através de um input oculto (implica teres sempre um formulario que é executado) ou pelo url (ambas pouco usuais)

2. colocares na variável de sessão, cookie ou base de dados com uso de um dos outros 2 como referência, o valor da pesquisa, e assim em cada página é só procurares esse valor e correr novamente a query.

Link to comment
Share on other sites

mas vai ser pouca informação, é só mesmo o valor da pesquisa  que preciso de guardar, e como faço para manter a pesquisa activa por assim dizer? guardo o valor da pesquisa na variável de sessão e depois como a chamo para continuar a mesma pesquisa? que o meu problema é que sempre que clico em algum botão na mesma pagina, para editar ou apagar um registo da tabela eu perco a pesquisa, espero ter-me feito perceber ?

PS: eu penso que ja sei o que tenho errado..reparei no link que obtenho

antes de clicar em qualquer opçao, editar apagar ou assim tenho o link:

http://localhost/Project%20Manager/restrito.php?pag=2&opcao=project

depois de escolher uma opçao tenho o link:

http://localhost/Project%20Manager/restrito.php?opcao=project&po=edit&id=79

basicamente, reparei que perco a variavel "pag=2", o que faz com que volte atras na paginaçao, o que eu nao queria, tenho a paginaçao feita numa classe num ficheiro a parte, é possivel buscar esta variavel pag de dentro da classe para o php? que assim eu colocava a variavel, "pag=$variavel", no:

<a href=restrito.php?pag=$variavel&opcao=project&po=view&id=$r->ID_PROJECT>

não sei se a ideia esta bem elaborada.

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

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
 Share

×
×
  • 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.