Jump to content

[Ajuda] Pesquisa definida


Rurru
 Share

Recommended Posts

Boas.

Estou a criar um site e tenho uma pesquisa interna em q ele pesquisa por localidades pre colocadas la.

Do género:

No site estão defenidadas as localidades Lisboa, Porto, Faro. Eu pesquiso por Braga, dá-me um erro a dizer q não existe. Mas se pesquisar por um das localidades ja existentes ele diz-me q existe.

Isto é capaz de ser simples, o problema é q eu n pesco nada de php... Se alguém me pudesse dar uma ajuda agradecia.

Link to comment
Share on other sites

Antes de alguém te ajudar, convém sempre mostrares algum empenho da tua parte em tentar descortinar como fazer isso, e depois vir aqui, caso seja necessário, com dúvidas.

Daí eu ter referido que não pescava nada de php... Agora eu n vou descortinar nada, pq n sei onde começa a cortina. Preciso que me digam por onde começar, n q me venham dizer q n mostro empenho... É o primeiro site em php q faço ja montei o include, ja tenho o formulário a chamar uma pagina php agr so n sei o q ponho lá.

Link to comment
Share on other sites

<form id="serachform" name="serachform" method="post" action="search.php">
<label>
<input name="areasearch" type="text" class="searchbox" id="areasearch" size="25" />
<input style="cursor:pointer;" name="search" type="submit" class="searchbox" id="search" value="Procurar" />
</label>
</form>

APARTE: Usa Geshi, fica o post mais legível. 🙂

Link to comment
Share on other sites

Pois é isso, eu ponho um if else, ou uma carrada deles, no search.php?

So q se isso der eu acho q fica mt palha no codigo...

Ou seja, não tens definidas ainda. Mysql é o melhor e mais fácil a usar. O que é que é suposto o resultado do formulário apresentar?

Link to comment
Share on other sites

Nesse caso não precisas de base de dados (se for só isso). Crias um array em php e percorres todos os elementos à procura da string da pesquisa. Depois usas o preg_match() ou substr() para procurar o nome que queres. Exemplo :

$string = $_POST['string_que_vem_do_formulario_de_pesquisa']
$zonas = array('Lisboa', 'Leiria', 'Braga', 'Beja', 'Santarém');
foreach ($zonas as $z) {
   if (preg_match("/\b".$string."\b/i", $z)) {
      echo 'encontrou!';
   }
}
Link to comment
Share on other sites

Não há necessidade de usar expressões regulares para um caso tão simples, qualquer coisa deste género funciona (além de ser mais rápido):

//strtolower para procuras não "case-sensitive"
$string = strtolower($_POST['string_que_vem_do_formulario_de_pesquisa'])
//elementos do array em minúsculas (devido ao uso de strtolower())
$zonas = array('lisboa', 'leiria', 'braga', 'beja', 'santarém');
if (in_array($string, $zonas))
echo 'encontrou';

"Pensa positivo: tudo pode piorar"

Link to comment
Share on other sites

@jreis, a função in_array, para alem de nao ser case-insensitive, nao funciona se puseres só parte do nome.

Bem visto, assumi que o campo de pesquisa seria uma select box ou algo do género, em que os valores já estariam preenchidos, por assim dizer. Mesmo assim, acho que o recurso a uma expressão regular simplesmente para fazer uma pesquisa "simples" de valor é demasiado complexa. Algo assim poderia dar conta do recado, a menos que me tenha escapado outra subtileza:

$string = $_POST['string_que_vem_do_formulario_de_pesquisa']
$zonas = array('Lisboa', 'Leiria', 'Braga', 'Beja', 'Santarém');
foreach ($zonas as $z)
    if (stripos($z, $string) !== false)
    {
        echo 'encontrou';
        break;
    }

para apenas obter correspondências em substrings que ocorroram no início da zona em causa (por exemplo para que uma pesquisa por "Bra" apenas devolva Braga, e não Coimbra), basta alterar a condição do if:

if (stripos($z, $string) === 0)

Mas pronto, o assunto está resolvido, que é o que interessa!

"Pensa positivo: tudo pode piorar"

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.