Forum Pplware

Versão Completa: Pesquisa interna php/mysql
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
OlaSmile
Comecei a trabalhar há pouco com php e estou a precisar de uma ajudinha...
Tenho de criar um sistema de pesquisa interno para um site, que pesquise na base de dados (mysql).
Tudo o que encontrei até agora na internet foi um sistema simples que apenas compara uma palavra exacta:

Código PHP:
$sql “SELECT FROM tabela WHERE campo LIKE ‘%.$palavra.%’”

Mas precisava de mais, entao fui pesquisando e criando um sistema que funciona como quero:

Código PHP:
//palavra ou frase inserida
$palavra=$_GET['palavra'];
//sem acentos
$palavranova strtr($palavra"áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ""aaaaeeiooouucAAAAEEIOOOUUC");

    
//vai buscar à base de dados todos os nomes para comparar com a palavra inserida
    
$sql="SELECT*FROM tabela ";
    
$query=mysql_query ($sql); 
    
$num mysql_num_rows($query);
    for(
$i 0$i $num$i++){
    
$nome=@mysql_result($query$i"nome");
    
    
//tira os acentos 
    
$nomenovo strtr($nome"áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ""aaaaeeiooouucAAAAEEIOOOUUC");
    
//percentagem de digitos iguais no nome
    
$caracteresiguaissimilar_text($nomenovo$palavranova);
    
$numerocaracteresstrlen ($nomenovo);
    
$divisao$caracteresiguais/$numerocaracteres;
    
$percentagem$divisao "100";
    
    
//verifica se alguma das palavras está incluida
    
$pos=stristr($nomenovo$palavranova);

    
//escolhe os resultados 
    
if ($percentagem "60") {
    print 
$nome;
    }else if (
$pos){
    Print 
$nome;
    }    
    } 

O problema é que com este código eu não consigo incluir paginação, que como são muitos registos é necessária.
Se alguém me poder ajudar com a paginação ou se tiverem outra ideia para o código, agradeçoSmile
Boas,

Antes de mais, "limpa" (sanitize) as variáveis antes de as utilizares em queries, por exemplo:

$sql = “SELECT * FROM tabela WHERE campo LIKE ‘%”.mysql_real_escape_string($palavra).”%’”;

Segundo, para o que precisas, acho que o seguinte bastava:

$sql = "SELECT * FROM tabela WHERE MATCH (campo1,campo2) AGAINST ('".mysql_real_escape_string($palavra)."' IN NATURAL LANGUAGE MODE";

E não precisavas de andar a tirar acentos nem a comparar o nível de semelhança.

Para saberes o número de registos, utilizas o mysql_num_rows($query); como já fazes mais em cima.

Se preferires continuar a utilizar o teu código, basta utilizares um contador para saberes o número de resultados totais e depois mostras apenas os necessários para a tua página, mas isso não é muito optimizado.
Vou utilizar a primeira opção, não conhecia e realmente torna tudo muito mais simples.

ObrigadaSmile
URL's de Referência