Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com busca interna PHP \ MySQL


l_ucasprado

Pergunta

Tenho o código, porém ele me exibe registros repetidos, sendo que não há nada repetido no banco.

Exemplo: Pesquiso por "Maria", ele me exibe 8 resultados para "Maria", sendo os 8 iguais.

Como resolver? :/

Abaixo o código.

<div id="busca">

<form id="form1" name="form1" method="get" action="">

<label for="pesquisa"></label>

<input type="text" name="pesquisa" id="pesquisa" maxlength="18" placeholder="Pesquisar" />

<label for="enviar"></label>

<input type="submit" name="enviar" id="enviar" value="Buscar" />

</form>

</div>

<?php

if(isset($_GET['pesquisa' ])){

$con = mysql_connect('localhost','admin','adminsei') or die(mysql_error());

$banco = mysql_select_db('sei') or die (mysql_error());

$pesquisa = $_GET["pesquisa"];

$pesquisa = mysql_real_escape_string($pesquisa);

if(empty($pesquisa)|| !preg_match("/[a-zA-Z0-9]/", $pesquisa)) { echo "Nenhum resultado para a palavra : <b>\"$pesquisa\"</b><br> Certifique -se de não terfeito uma busca vazia , e tente novamente !!!" ;}

else {

$sql = "SELECT * FROM diretor WHERE nomeDiretor like '%".addslashes($pesquisa)."%'";

$query = mysql_query($sql) or die (mysql_error());

$num_dados = mysql_num_rows($query);

$palavra = $_GET['pesquisa'];

if(empty($num_dados)){

echo "nenhum resultado para a palavra : \"<b>$palavra</b>\" ";

}else

{

echo "Sua busca retornou : <b> $num_dados resultado(s).</b>";

while($mostrar = mysql_fetch_array($query)){

$titulo =$mostrar['nomeDiretor'];

$postagem = $mostrar['enderecoDiretor'];

$a = $mostrar['bairroDiretor'];

$b = $mostrar['cepDiretor'];

$c = $mostrar['foneDiretor1'];

?>

<table style="margin-left: 40px;" class="borda">

<tr>

<td align="center" style="padding: 4px;"><b>nomeDiretor</b></td>

<td align="center" style="padding: 4px;"><b>enderecoDiretor</b></td>

<td align="center" style="padding: 4px;"><b>bairroDiretor</b></td>

<td align="center" style="padding: 4px;"><b>cepDiretor</b></td>

<td align="center" style="padding: 4px;"><b>foneDiretor1</b></td>

<td colspan="3" align="center" style="padding: 4px;"><b>Funções</b></td>

</tr>

<?php do{ ?>

<tr>

<td align="left" style="padding: 4px;"><?php echo htmlentities($titulo); ?></td>

<td align="center" style="padding: 4px;"><?php echo htmlentities($postagem); ?></td>

<td align="center" style="padding: 4px;"><?php echo htmlentities($a); ?></td>

<td align="center" style="padding: 4px;"><?php echo htmlentities($b); ?></td>

<td align="center" style="padding: 4px;"><?php echo htmlentities($c); ?></td>

</tr>

<?php } while( $linha = mysql_fetch_assoc($query) ); ?>

</table>

<?php }

}

}

}

?>

</div>

Quando pesquiso por um nome me é exibido da seguinte maneira:

Sua busca retornou : 8 resultado(s).

nomeDiretor enderecoDiretor bairroDiretor cepDiretor foneDiretor1 Funções

MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 porque. RES. ITAPEVA 18406191 1535224451

MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 porque. RES. ITAPEVA 18406191 1535224451

MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 porque. RES. ITAPEVA 18406191 1535224451

MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 porque. RES. ITAPEVA 18406191 1535224451

MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 porque. RES. ITAPEVA 18406191 1535224451

MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 porque. RES. ITAPEVA 18406191 1535224451

MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 porque. RES. ITAPEVA 18406191 1535224451

MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 porque. RES. ITAPEVA 18406191 1535224451

Obrigado ...

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Se mysql_num_rows() está retornando 8 nesta query, a única explicação seria que há 8 entradas que atentem á cláusula 'LIKE'.

Pelo seu código, com certeza há 8 'Marias'. O que ocorre é que quando você dá o fetch, você atribui vai atribuindo as informações ás mesmas variáveis, ou seja, um resultado vai sobreescrevendo outro, e quando o laço while() acaba, as variáveis ficam com as informações da última 'Maria' do banco de dados. Obviamente, no laço do-while() apenas as informações da última maria serão exibidos.

A solução é exibir os dados no momento do fetch (ou passar tudo para um array bidimensional, mas é mais trabalhoso).

Dei uma mexida:

<div id="busca">
<form id="form1" name="form1" method="get" action="">
<label for="pesquisa"></label>
<input type="text" name="pesquisa" id="pesquisa" maxlength="18" placeholder="Pesquisar" />
<label for="enviar"></label>
<input type="submit" name="enviar" id="enviar" value="Buscar" />
</form>
</div>


<?php
if(isset($_GET['pesquisa' ])){
    $con = mysql_connect('localhost','admin','adminsei') or die(mysql_error());
    $banco = mysql_select_db('sei') or die (mysql_error());
    $pesquisa = mysql_real_escape_string($_GET["pesquisa"]);
    
    if(empty($pesquisa)|| !preg_match("/[a-zA-Z0-9]/", $pesquisa)){
        echo "Nenhum resultado para a palavra : <b>\"$pesquisa\"</b><br> Certifique -se de não terfeito uma busca vazia , e tente novamente !!!";
        }else{
        $sql = "SELECT * FROM diretor WHERE nomeDiretor like '%".addslashes($pesquisa)."%'";
        $query = mysql_query($sql) or die (mysql_error());
        $num_dados = mysql_num_rows($query);
        if(empty($num_dados)){
            echo "nenhum resultado para a palavra : \"<b>$palavra</b>\" ";
        }else{
            echo "Sua busca retornou : <b> $num_dados resultado(s).</b>";
?>
<table style="margin-left: 40px;" class="borda">
<tr>
<td align="center" style="padding: 4px;"><b>nomeDiretor</b></td>
<td align="center" style="padding: 4px;"><b>enderecoDiretor</b></td>
<td align="center" style="padding: 4px;"><b>bairroDiretor</b></td>
<td align="center" style="padding: 4px;"><b>cepDiretor</b></td>
<td align="center" style="padding: 4px;"><b>foneDiretor1</b></td>
<td colspan="3" align="center" style="padding: 4px;"><b>Funções</b></td>
</tr>
<?php
            while($mostrar = mysql_fetch_array($query)){
                echo "<tr>
                    <td align=\"left\" style=\"padding: 4px;\">". htmlentities($mostrar['nomeDiretor'])."</td>
                        <td align=\"center\" style=\"padding: 4px;\">". htmlentities($mostrar['enderecoDiretor'])."</td>
                        <td align=\"center\" style=\"padding: 4px;\">". htmlentities($mostrar['bairroDiretor'])."</td>
                        <td align=\"center\" style=\"padding: 4px;\">". htmlentities($mostrar['cepDiretor'])."</td>
                        <td align=\"center\" style=\"padding: 4px;\">". htmlentities($mostrar['foneDiretor1'])."</td>
                    </tr>";
                }
?>
</table>

<?php     
        }
    }
}
?>
</div>

Editado por mJi
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...