• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Rurru

[Ajuda] Pesquisa definida

20 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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á.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se usas MySql, fazes uma query. Pesquisas no Google e encontras muitos tutoriais.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podias ter referido que já tinhas feito algo em php, ninguém adivinha se dizes que não percebes nada (que até indica o contrário). Boa comunicação ajuda sempre.

Deixa aqui o código do formulário sff.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se usas MySql, fazes uma query. Pesquisas no Google e encontras muitos tutoriais.

E se não usar mysql? Qual é a outra forma?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Onde é que estão definidas essa localidades?

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Apresentar se a localização esta na lista ou não.

Mas apresentar o quê? Páginas estáticas?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fazes a pesquisa, carregas em pesquisar e depois abre uma nova página a dizer se a localidade existe ou não.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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!';
   }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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';

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hum.. array.

n tinha pensado nisso, eu ainda n conheço mt de php, n sei o q tem e o q n tem.

obrigado pela a ajuda :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela a ajuda, entretanto ja dei uns ajustes ao codigo.

Acrescentei substring por causa de mandar para lower e depois recolocar a primeira letra em maiúsculo novamente.

Pus a validação a funcionar bem, talvez um pouco extensa, mas mais vale ir aos poucos tentando e melhorando.

:)  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora