Problema com busca interna PHP \ MySQL

Enviada por Lucas 
Lucas
Problema com busca interna PHP \ MySQL
24 de January de 2012 às 06:53AM
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>
Jayme A. C. Gimenez
Re: Problema com busca interna PHP \ MySQL
24 de January de 2012 às 07:22AM
Se está difícil achar o erro de lógica, o que eu costumo fazer é o seguinte: tiro tudo o que é estrutura de controle (aqueles ifs para testar se a variável está setada, se a variável está vazia, etc) e deixo só a query. E testo.

Se beleza nesse ponto, reintroduzo uma única estrutura de controle. Testo.

Se beleza, coloco a próxima. Testo. E assim por diante.

Desse jeito, costuma não ter erro: o bug é implacavelmete caçado e eliminado!
Lucas
Re: Problema com busca interna PHP \ MySQL
24 de January de 2012 às 07:33AM
Então, fiz esse processo que você recomendou Jayme, mas ele continua me exibindo registros repetidos :/
Diego R. Mengarda
Re: Problema com busca interna PHP \ MySQL
24 de January de 2012 às 07:50AM
troque

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

por

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

ou

$sql = "SELECT * FROM diretor WHERE nomeDiretor like '%".addslashes($pesquisa)."%' GROUP BY nomeDiretor";
Jayme A. C. Gimenez
Re: Problema com busca interna PHP \ MySQL
24 de January de 2012 às 07:58AM
Bom, se vc já usou o processo assassino de bugs que eu sugeri, vc sabe qual pedaço do código introduz o erro (por exemplo, se com a query isolada o problema já aparece, o problema está na query; se o problema, no entanto, só aparece quando vc reintroduz uma estrutura de controle específica, o bug deve estar nessa estrutura de controle específica).

Se assim o é, porque vc não nos conta, então, qual o pedaço do código que seu processo caça-bugs revelou como problemático? Acredite, isso nos ajudaria muito na tentativa de ajudar vc.
Lucas
Re: Problema com busca interna PHP \ MySQL
24 de January de 2012 às 08:13AM
Fiz também o processo que o Diego recomendou, mais não deu certo, continua me exibindo linhas repetidas ...

Então Jayme, retirando todas as estruturas de controle ele continuou funcionando normalmente entende, ele não acusa erro algum, só exibe várias linhas repetidas ... Fiz exatamente como recomendou, testei tirando e recolocando cada estrutura, testando todas as combinações, mas não obtive sucesso "/

Obrigado pela atenção ...
Jayme A. C. Gimenez
Re: Problema com busca interna PHP \ MySQL
24 de January de 2012 às 08:30AM
Então, grandes progressos: se vc retirou todas as estruturas de controle, só deixou a query, e, já aí, os resultados apareceram repetidos, o problema está na query, certo?

Mas nos deixe totalmente seguros de que vc retirou, mesmo, todas as estruturas de controle: mostre-nos o código que vc usou para testar a query, sem as estruturas adicionais de controle.
Lucas
Re: Problema com busca interna PHP \ MySQL
24 de January de 2012 às 08:33AM
Olha só,

<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);

$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'];

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>


Parece ser simples, mas ja revirei a internet em busca de um código de busca simples, mas é muito dificil ...
Lucas
Re: Problema com busca interna PHP \ MySQL
24 de January de 2012 às 08:35AM
Olha só como é me exibido os resultados ...

Sua busca retornou : 8 resultado(s).
nomeDiretor enderecoDiretor bairroDiretor cepDiretor foneDiretor1 Funções
MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 PQ. RES. ITAPEVA 18406191 1535224451
MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 PQ. RES. ITAPEVA 18406191 1535224451
MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 PQ. RES. ITAPEVA 18406191 1535224451
MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 PQ. RES. ITAPEVA 18406191 1535224451
MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 PQ. RES. ITAPEVA 18406191 1535224451
MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 PQ. RES. ITAPEVA 18406191 1535224451
MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 PQ. RES. ITAPEVA 18406191 1535224451
MARCIA MARIA MATTOS DE LIMA SATURNINO B. SOLZA, 159 PQ. RES. ITAPEVA 18406191 1535224451
Lucas Tiago de Moraes
Re: Problema com busca interna PHP \ MySQL
24 de January de 2012 às 10:08AM
Cara veja se isso funciona:

<?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(!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{
?>

<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
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'];
?>
<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 } ?>
</table>
<?php
}
}
}
?>
</div>



Falou.
Lucas
Re: Problema com busca interna PHP \ MySQL
25 de January de 2012 às 03:55AM
Infelizmente não adiantou lucas, continua acontecendo o mesmo problema "/
Jayme A. C. Gimenez
Re: Problema com busca interna PHP \ MySQL
25 de January de 2012 às 12:13PM
Bom, vc diz que fez o que eu sugeri. Mas não mostrou o código que usou para testar a query sem as estruturas de controle e outras maquiagens.

TEste isso e diga no que deu:

<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

$con = mysql_connect('localhost','admin','adminsei') or die(mysql_error());
$banco = mysql_select_db('sei') or die (mysql_error());
$pesquisa = $_GET["pesquisa"];

$sql = "SELECT * FROM diretor WHERE nomeDiretor like '%".addslashes($pesquisa)."%'";
$query = mysql_query($sql) or die (mysql_error());

while($mostrar = mysql_fetch_array($query)){
$titulo =$mostrar['nomeDiretor'];
$postagem = $mostrar['enderecoDiretor'];
$a = $mostrar['bairroDiretor'];
$b = $mostrar['cepDiretor'];
$c = $mostrar['foneDiretor1'];

echo $titulo." - ".$postagem." - ".$a." - ".$b." - ".$c;
echo "<br />";

}
?>

Fiz direto aqui; portanto pode ter erros de sintaxe. Mas a ideia da operação caça-bugs da qual lhe falei é essa. Se esse trecho "pelado" de código funcionar direito, partimos para os próximos, um a um.
Lucas
Re: Problema com busca interna PHP \ MySQL
26 de January de 2012 às 04:20AM
Bom, o que aconteceu agora foi o seguinte, logo ao abrir a página ele ja exibe TODOS os registros cadastrados, sem que eu digite nada ... "/

Olha só ..

Notice: Undefined index: pesquisa in /opt/lampp/htdocs/sei/modulos/busca.php on line 15
CLAUDIA VALERIA CAMARGO FERREIRA - R GREGORIO DE OLIVEIRA, 139 - JARDIM PAULISTA - 18405340 - 35220942
ELIZETE CAVALCANTI VASCONCELLOS - R JOSE FERRARI, 110 - VILA APARECIDA - 18401020 - 35242718
ADRIANA AP. BRISOLA VIEIRA DZENKAUSKAS - RUA: HOLANDA, 33 - JD. EUROPA - 18406480 - 1535223310
MARCIA MARIA MATTOS DE LIMA - SATURNINO B. SOLZA, 159 - PQ. RES. ITAPEVA - 18406191 - 1535224451
CELIA REGINA COSTA GALVANI PINHEIRO - RUA: ITAPETININGA, 132 - VL. BOM JESUS - 18400670 - 1535221341
PATRICIA APARECIDA FELICIO MATOS - RUA: ITALIA, 32 - JD. EUROPA - 18406420 - 1535212332
RITA DE CASSITA NEVES - RUA: WALTER ANTONIO MUZEL GONÇALVES, 152 - JD. MORADA DO SOL - 18408651 - 1535220735
Jayme A. C. Gimenez
Re: Problema com busca interna PHP \ MySQL
26 de January de 2012 às 06:44AM
Parece muito bom isso...

E o que vc nos diz agora sobre os dados listados: estão sendo listados sem aquela repetição misteriosa que originou seu post?

De qualquer maneira, vamos aproveitar para tentar entender um errinho adicional:
Notice: Undefined index: pesquisa in /opt/lampp/htdocs/sei/modulos/busca.php on line 15

Qual é a linha 15?
Lucas
Re: Problema com busca interna PHP \ MySQL
26 de January de 2012 às 07:45AM
Ele parou de exibir repetido, porém esta exibindo tudo agora, sem que eu digite nada. No momento em que eu entro na página ja estão listados todos os registros do banco ..

A Linha 15 é a seguinte ...

$pesquisa = $_GET["pesquisa"];

Ta ocorrendo esse erro quando é tirada essa linha antes do '$con': if(isset($_GET['pesquisa' ])){

A variavel pesquisa recebe o que é digitado no campo busca, se for retirado o if ele não captura nada .. :/
Lucas
Re: Problema com busca interna PHP \ MySQL
26 de January de 2012 às 07:47AM
Opa, quando eu digito algo, ele não repete mais, me exibe certinho !!
.. o unico problema agora é ele me listar todos os registros do banco logo que eu entro na página sem que eu peça. :/
Mas ja foi um avança gigantesco.
Trambulhao
Re: Problema com busca interna PHP \ MySQL
26 de January de 2012 às 08:07AM
Lucas, tenta sempre separar o código PHP (lógica) do HTML (visão). O código fica mais nítido e facilita o controle do script.

testa assim:

<?php
// requisição (resgata o valor passado pelo GET)
$pesquisa = (isset($_GET['pesquisa'])) ? $_GET['pesquisa'] : null;

if (!is_null($pesquisa) and isset($_GET['enviar'])) {
$pesquisa = str_replace('/[^a-zA-Z0-9]/', '', $pesquisa);

// conexão database
$con = mysql_connect('localhost', 'admin', 'adminsei') or die(mysql_error());
$banco = mysql_select_db('sei', $con) or die(mysql_error());

// Consulta
$sql = "SELECT * FROM diretor WHERE nomeDiretor LIKE '%" . $pesquisa . "%'";
$query = mysql_query($sql) or die(mysql_error());

// Número de linhas
$num_dados = mysql_num_rows($query);

// Array do valores da consulta
$resultados = array();
while($fetch = mysql_fetch_assoc($query)) $resultados[] = $fetch;
}
?>

<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['enviar'])):
if ($num_dados < 1):
echo 'Nenhum resultado foi encontrado para: <b>' . $pesquisa . '</b><br>';
else:
?>
<p>Sua busca retornou: <b><?php echo $num_dados; ?></b> resultado(s). </p>

<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 foreach ($resultados as $mostrar): ?>

<tr>
<td align="left" style="padding: 4px;"><?php echo $mostrar['nomeDiretor']; ?></td>
<td align="center" style="padding: 4px;"><?php echo $mostrar['enderecoDiretor']; ?></td>
<td align="center" style="padding: 4px;"><?php echo $mostrar['bairroDiretor']; ?></td>
<td align="center" style="padding: 4px;"><?php echo $mostrar['cepDiretor']; ?></td>
<td align="center" style="padding: 4px;"><?php echo $mostrar['foneDiretor1']; ?></td>
</tr>

<?php
endforeach;
endif;
endif;
?>
Lucas
Re: Problema com busca interna PHP \ MySQL
26 de January de 2012 às 08:11AM
OMG, funcionou redondinho, MUUUUUITO obrigado ! ;)
Agradeço ao Jayme pela atenção e pela ajuda.

Valeu mesmo Trambulhao, tava a tempos quebrando a cabeça com isso, valeu !
Lucas Tiago de Moraes
Re: Problema com busca interna PHP \ MySQL
26 de January de 2012 às 08:40AM
Agora pude entender a sua cagada, a questão que a busca estava buscando todos registro e estava imprimindo um só, mas também com um código desse:

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 }

você usou do-while sem saber para que server. outro erro, um loop dentro do outros.

Estuda mais cara.
Jayme A. C. Gimenez
Re: Problema com busca interna PHP \ MySQL
26 de January de 2012 às 08:59AM
Não há de que...

Vc estava indo bem, e ia aprender bastante sobre programação à medida que fôssemos melhorando, pouco a pouco, o seu código.

Mas, certamente, não faltarão oportunidades! Continue estudando que uma hora as coisas começam a andar bem.

E, qualquer coisa, grite!
Trambulhao
Re: Problema com busca interna PHP \ MySQL
26 de January de 2012 às 10:50AM
Lucas, reparei num probleminha.. muda o nome da função str_replace() para preg_replace().

Caso queira letras acentuadas e espaços é só acrescentar no grupo, assim:
preg_replace("/[^a-zA-Z0-9àáâãèéêìíïòóôõùúûç ]/i", '', $pesquisa)

:P
Anderson
Re: Problema com busca interna PHP \ MySQL
02 de July de 2012 às 07:06PM
ae to querendo um codigo para pesquisa de empresas nais quais coloquei em html, como posso fazer? tenho a lista em html pórem tenho que passar pro mysql e php mais n sei como fazer, pode me ajudarw?? agradecido
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.