[Ajuda]Pesquisar em php.

malta231

Power Member
Boas,

Fiz um pesquisa para o meu site (loja de artigos informáticos) e meti um pesquisa para procurar os artigos.

Só que, se a palavra inserida no $pesquisa não for igual aos Registos da BD ele apresenta a mensagem: Nenhum artigo foi encontrado com a palavra ".$pesquisa."";
Mas se eu inserir uma palavra que seja igual a BD ele mostra na mesma a mensagem e os artigos. Mas não devia, deveria só mostrar os artigos.

Alguem me pode ajudar?

Deixo aqui o Código completo em baixo. O código que está a vermelhor é o que esté acontecer isto.


Código:
<?php
// Recuperamos a ação enviada pelo formulário
$a = $_GET['menu'];

// Verificamos se a ação é de busca
if ($a == "inserepesquisa") {

// Pegamos a palavra
$pesquisa = trim($_POST['pesquisa']);

// Verificamos no banco de dados produtos equivalente a palavra digitada
$sql = mysql_query("SELECT * FROM artigos WHERE NomeArtigo LIKE '%".$palavra."%' ORDER BY NomeArtigo");

// Descobrimos o total de registos encontrados
$numRegistos = mysql_num_rows($sql);

// Se houver pelo menos um registo, exibe-o
if (empty($pesquisa)) {
//header('Location: '.$_SERVER['HTTP_REFERER']);
     echo "Por favor inserira uma palavra para efectuar uma pesquisa de artigos";
}else {


[COLOR=#b22222][B]// Se não houver registos
if ($pesquisa != $numRegistos) {
echo "Nenhum artigo foi encontrado com a palavra ".$pesquisa."";
//echo $numRegistros;
}[/B][/COLOR]


// Exibe os produtos e seus respectivos preços
$sql=mysql_query("SELECT  a.idArtigos, a.NomeArtigo, a.Descricao, a.ValorUnit, f.Imagem FROM  artigos a INNER JOIN fotosartigos f ON a.idArtigos = f.ID_Artigos WHERE  f.tipo=1 and a.NomeArtigo like '%$pesquisa%'");
while ($reg=mysql_fetch_row($sql)){
echo '<div style="margin-top:-15px;">';
echo '<table class="sample" CELLPADDING=2 >';
echo '<tr>';
echo '<td align="left" colspan=4 class="ert">';
echo "<a href='index.php?menu=produto&prod=".$reg[0]."' style='text-decoration:none'>";
echo $reg[1];
echo '</a>';
echo '</td>';
echo '<td align="right" class="ert"> ';
echo $reg[3].'&nbsp;€';
echo '</tr>';
echo '<tr>';
echo '<td rowspan="4" width="100">';
echo "<img src='img/$reg[4]' style='min-width:136px; max-width:136px; max-height:130px; -moz-border-radius:1px'>";
echo '</td>';
echo '</tr>';
echo '<tr>';
echo '<td align="justify" colspan=3 rowspan="3" class="errt" width="280">';
echo $reg[2];
echo '</td>';
echo '</tr>';
echo '<tr>';
echo  "<td align='center'><a  href='index.php?menu=artigos&subcat=".$_GET['subcat']."&flag=1&id_pro=".$reg[0]."'><img  src='images/comprar.jpg'></a></td>";
echo '</tr>';
echo '<tr>';
echo  "<td align='center'><a  href='index.php?menu=produto&prod=".$reg[0]."'  style='text-decoration:none'><img  src='images/ver_mais.jpg'></a></td>";
echo '</tr>';
echo '</table>';
echo '</div>';
}
}
}
?>
 
Última edição:
Tenta mudar

if ($pesquisa != $numRegistos)

para

if ($numRegistos == '0')

Que neste caso mostra a mensagem caso não encontre matches.

Podes colocar um else para a parte a vermelho caso encontre mais do que 0 registos ou em vez de um else no
if (empty($pesquisa))
podes fazer

if (empty($pesquisa)) {
// campo de pesquisa vazio
}
elseif ($numRegistos = '0') {
// mensagem que não encontrou
}
elseif ($numRegistos > '0') {
// codigo para mostrar resultados
}

E sim, tens de filtrar o GET porque senão é fácil de fazer SQL Injection

Penso que não me enganei/esqueci de alguma coisa.
 
Última edição:
Qual é o problema que estás a ter?

edit: nem tinha visto que havia mas coisas abaixo do cod. vermelho :P

Hmmm revendo isso em princípio mudando para
if ($numRegistos == '0')
devia dar
 
Última edição:
Já fizeste echo ao $numRegistos para ver qual é o valor dele (quando encontra qualquer coisa com a pesquisa)? Assim à primeira não estou a ver qual seja o problema :\
 
o ereg ja não funciona foi substituído pelo preg_match.

if ($pesquisa != $numRegistos)

estas a comprar a palavra de pesquisa, com o numero de registos.
isso vai dar sempre false.


att. que a função like não é optimizada para fazer o que pretendes, e quando tiveres uma quantidade de artigos considerável, isso vai encravar o SQL, e tu estas a usar duas vezes para fazer a mesma coisa.

entre a falta de protecção básica para SQLinject, uso de GET´s (dois erros graves apenas numa pag. de pesquisa), não te aconselho a usar esse site em ambiente de produção e procurar ajuda de quem saiba o que esta a fazer..
 
Quanto ao anterior concordo mas porquê não usar GET nas pesquisas?
O próprio google o faz tal como muitos sites... A não ser que nessa pesquisa sejam usados dados sensíveis não vejo porque não usar GET
 
Sabes quantas pessoas se suicidam por ano.. secalhar devíamos nos suicidar também..

o mal que tem neste caso, www.abc. ....... SELECT * / DROP TABLE / ETC ..........

o uso do GET não tem mal nenhum, se o souberem usar..
 
if (!$numRegistos) {
echo "Nenhum artigo foi encontrado com a palavra ".$pesquisa."";
}

ou então

if ($numRegistos==0) {
echo "Nenhum artigo foi encontrado com a palavra ".$pesquisa."";
}
 
"não te aconselho a usar esse site em ambiente de produção e procurar ajuda de quem saiba o que esta a fazer.."

vai a diferença entre saber onde se pode usar e onde não se deve usar.
 
Back
Topo