Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Elton Ésqui

[Resolvido] Sistema de busca

Recommended Posts

Amigos

 

Tenho o sistema de busca conforme abaixo:

if (!isset($_GET['consulta'])) {
header("Location: http://localhost/contatos/notfound.php");
exit;
}
// Se houve busca, continue o script:

// Salva o que foi buscado em uma variável
$busca = $_GET['consulta'];

// Usa a função mysql_real_escape_string() para evitar erros no MySQL
$busca = mysql_real_escape_string($busca);

// ============================================

// Monta outra consulta MySQL para a busca
$sql = "SELECT * FROM contatos WHERE empresa LIKE '%".$busca."%'";

// Executa a consulta
$query = mysql_query($sql);

// ============================================

// Começa a exibição dos resultados
while ($resultado = mysql_fetch_assoc($query)) {
$id = $resultado['idcontatos'];
$empresa = $resultado['empresa'];
$contato = $resultado['contato'];
$tel1 = $resultado['tel1'];
$tel2 = $resultado['tel2'];
$obs = $resultado['obs'];
$email = $resultado['email'];
$celular = $resultado['celular'];
}

O meu problema é o seguinte:

Quando no banco existem dois nomes parecidos, ele busca somente o último!

Como posso fazer para exibir na tela todos os resultado sque tenham aquela palavra.

 

*Exemplo.

 

Se tenho no banco

 

empresa

PHP Produções

 

empresa

PHP Scripts

 

Se eu buscar por PHP, ele só exibe o último, no caso, PHP Scripts.

 

* É só uma ilustração!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao meu ver esta correto seu source ate mesmo peguei sua query e fim um teste:

mysql> select user_login, user_sess from tb_user where user_login LIKE "%invest%";
+--------------------+----------------------------+
| user_login         | user_sess                  |
+--------------------+----------------------------+
| invest1            | 34k707dc8gj20ee27t2l6nvk12 |
| invest1rwerwer     | NULL                       |
| invest1sdfsdfsdfsd | NULL                       |
| invest1gdfgdfgdfg  | NULL                       |
+--------------------+----------------------------+
4 rows in set (0.00 sec)

mysql>

A unica coisa que trocaria é o mysql_fetch_assoc para mysql_fetch_array.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para exibir todos os dados encontrados, você tem que colocar o código para a exibição dentro do laço while, porque este código

while ($resultado = mysql_fetch_assoc($query)) {
$id = $resultado['idcontatos'];
$empresa = $resultado['empresa'];
$contato = $resultado['contato'];
$tel1 = $resultado['tel1'];
$tel2 = $resultado['tel2'];
$obs = $resultado['obs'];
$email = $resultado['email'];
$celular = $resultado['celular'];
}
Além de ser inútil esta atribuição, na próxima iteração do laço as variáveis são substituídas.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Matias...

 

Não entendi mto bem o que quis dizer...

 

Eu até tentei utilizar

<?php do { ?>
<?php } while ($resultado = mysql_fetch_assoc($query)); ?>
Entre o echo dos resultados que está um table...mas não rolou...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu quis dizer foi o seguinte. Quando você faz o while($resultado...), dentro deste while, que é um laço de repetição, a cada iteração deste laço a $resultado receberá uma das linhas retornadas da consulta.

 

Agora, o que acontece. Como você atribui ($id = $resultado['idcontatos']), na primeira iteração, $id vai ter o idcontatos da primeira linha. Na segunda iteração, vai ter o idcontatos da segunda linha. Então, após o while, você só terá o resultado da última linha retornada da consulta.

 

Então, o que você tem que fazer. Pegar o código que exibe os dados na tela (este que você tentou colocar dentro do do-while) e colocar dentro deste while.

 

Outra coisa, como eu disse, esta atribuição ($id = $resultado['idcontatos'];) é totalmente inútil. Você só faz ocupar 2 espaços na memória com o mesmo valor ($id e $resultado['idcontatos']). Então, utilize direto $resultado['idcontatos'] na hora de fazer a exibição dos dados.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu estava acostumado a fazer assim:

 

<?php do { ?>
<html></html> //Aqui fica a tabela HTML com o resultado em PHP
<?php } while ($resultado = mysql_fetch_assoc($query)); ?>

Para resolver basta fecha } após o código da tabela

 

<?php
while ($resultado = mysql_fetch_assoc($query)) {
$id = $resultado['idcontatos'];
$empresa = $resultado['empresa'];
$contato = $resultado['contato'];
$tel1 = $resultado['tel1'];
$tel2 = $resultado['tel2'];
$obs = $resultado['obs'];
$email = $resultado['email'];
$celular = $resultado['celular'];
?>
<html></html>
<?php } ?>

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade não, pois $resultados recebe a consulta SQL.

cada textfield receberá o valor da variável conforme a consulta. Por isso não posso usar $resultado['idcontatos'], pois assim $resultados receberia o valor de idcontatos e não da consulta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por isso não posso usar $resultado['idcontatos'], pois assim $resultados receberia o valor de idcontatos e não da consulta.

 

???? Não entendi nada que você falou.

 

Poste o código completo desta página. Vou tentar te mostrar que fazer $id = $resultado['idcontatos'] é totalmente desnecessário.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Carlos...o código tá no primeiro post.

 

Então!

 

Pelo que entendi funciona assim:

$sql = "SELECT * FROM contatos WHERE empresa LIKE '%".$busca."%'"; // $sql faz a seleção, mostra a consulta
$query = mysql_query($sql);// Exibe a consulta
$resultado = mysql_fetch_assoc($query) //$resultado recebe a $query
Logo, $resultado está com o SELECT armazenado...

Então eu entendi que se eu quiser exibir o valor de cada campo da tabela deveria fazer conforme abaixo:

while ($resultado = mysql_fetch_assoc($query)) {
$id = $resultado['idcontatos'];
$empresa = $resultado['empresa'];
$contato = $resultado['contato'];
$tel1 = $resultado['tel1'];
$tel2 = $resultado['tel2'];
$obs = $resultado['obs'];
$email = $resultado['email'];
$celular = $resultado['celular'];
}
Onde cada variável receberá o echo.

 

Desculpa aí se não entendi, é que ainda sou iniciante...mas agradeço muito a ajuda....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você está exibindo, cadê o echo? Faça o seguinte.

 

Coloque este código e execute no navegador.

$i = 0;
while ($resultado = mysql_fetch_assoc($query)) {
echo 'Resultado de número '.$i++;
echo '<br/>a $resultado[\'idcontatos\'] nesta iteração tem o valor de ',$resultado['idcontados'];
echo '<br/>a $resultado[\'empresa\'] nesta iteração tem o valor de ',$resultado['empresa'];
echo '<br/>a $resultado[\'contato\'] nesta iteração tem o valor de ',$resultado['contato'];
echo '<br/>a $resultado[\'tel1\'] nesta iteração tem o valor de ',$resultado['tel1'];
echo '<br/>a $resultado[\'tel2\'] nesta iteração tem o valor de ',$resultado['tel2'];
echo '<br/>a $resultado[\'obs\'] nesta iteração tem o valor de ',$resultado['obs'];
echo '<br/>a $resultado[\'email\'] nesta iteração tem o valor de ',$resultado['email'];
echo '<br/>a $resultado[\'celular\'] nesta iteração tem o valor de ',$resultado['celular'];
echo '<br/>Agora acabou esta iteração do while e vai começar a outra, ou seja, vai começar tudo de novo.<br/><br/>';
}

Execute e veja o resultado. Tente compreender o que foi feito, analisando o código e o resultado que foi obtido.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

O echo está numa tabela html.

Quando fechei o while depois do html deu certo.

É que não pode fazer como eu estava tentando:

<?php
while {
<html></html>
 } ?>
O correto é:

<?php
while {
?>
<html></html>

<?php } ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah...e realmente não preciso mais fazer assim:

$id = $resultado['idcontato'];
:D:D:D

 

Basta colocar no echo do jeito que você fez....valeu mesmo...o código fica mais limpo assim...hehehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.