Jump to content
Fórum Script Brasil
  • 0

Problema com busca interna PHP \ MySQL


l_ucasprado

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

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

Edited by mJi
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...