Ir para conteúdo

POWERED BY:

Arquivado

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

cardozo

Consulta com php

Recommended Posts

Pessoal

 

tenho uma consulta que faz assim

$texto = "Antônio José"

 

SELECT * FROM bd WHERE campo like '%$texto%' ORDER BY -Numero

 

ele seleciona palavras assim

Antônio José, Antonio Jose, antonio jose antônio josé

 

e na verdade queria que selecionasse registros apenas como digitado

 

tem alguam forma de se fazer issu neste mesmo sql?

 

agradecido

Compartilhar este post


Link para o post
Compartilhar em outros sites

Haz campo = '$texto' so quando for numero

 

-Numero ? é um campo ?

seguinte

campo = é um campo de texto no BD com aplavras acentuadas ou não, então numa frase pode ter palavras de todos os tipo então a variavel tem ques er exatamente = no campo

nesta instrução sql tem alguma forma de conseguir fazer issu

 

texto = "José Antônio Nogueira";

 

SELECT * FROM bd WHERE campo like '%$texto%'

 

quero q lista apenas onde tiver essa frase no campo

Compartilhar este post


Link para o post
Compartilhar em outros sites

colocando latin1_general_cs deu certo mesmo

 

 

SELECT * FROM BD WHERE campo like '%$texto%'

 

 

mas agora ocorreu outra coisa se eu colocar uma frase assim

texto = "apagar das luzes de ribalta"

 

da certim, mas se tiver uma palavra acentuada neste meio ele nao acha

texto = "apagar das lézes dê ribalta"

 

nao encontra nada

 

agradeço a ajuda de todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

no banco de dados nao aceita acentuação

ai você teria que usar o md5 para fazer busca desse tipo exemplo

$texto = md5("o que você quer procurar");

mais na hora de mandar pro banco de dados tem que mandar em md5 tbm

exemplo

$nome = md5($_POST['nome']);

pra quando fazer a busca vim com acento

Compartilhar este post


Link para o post
Compartilhar em outros sites

PUTS! MD5 ?

 

texto = "apagar das lézes dê ribalta"

 

Só uma pergunta: você escreveu Lézes na hora de fazer a consulta ?

usuahsha

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Amigo gugoan já te deu a dica do banco "Latin1 e collation: latin1_general_ci"

Quanto a acentuação o latin1 aceita sim acentos normalmente amigo CrY.

 

O que deve estar dando errado são os parametros enviados pelo PHP.

 

Experimente fazer a consulta diretamente no phpMyAdmin ou no console do mysql.

Se funcionar verifique os dados enviados via POST.

 

Provavelmente vai precisar de usar um utf8_decode ou definir o charset de sua pagina

para ISO-8859-1.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum entendi nao sei muito sobre os tipos de codificação mais sei um pouco de php eu faria com a função MD5()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compreendo amigo CrY. So temos de tomar cuidado para não dar a orientação errada aos amigos

do fórum sobre algo que não temos tanto conhecimento. Nem toda solução paleativa é a forma correta

de se trabalhar. Procure pesquisar mais sobre Banco de Dados e charsets e você verá que existem soluções

bem melhores doque md5 cuja a função é criptografar o código de forma que NUNCA MAIS você o recupere.

Deixando então uma informação inutilizada no banco de dados uma vez que você pode precisar saber o nome

do cliente. md5 é útil para criptografar senhas por exemplo, cujo a intenção é que realmente ninguém saiba a senha do cliente.

 

Mas é assim mesmo, vivendo e aprendendo. :joia:

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

deixe-me explicar melhor

 

tenho texto html formatado dentro de um campo long text no banco de dados, a função funcionava perfeitamente quando era php4, apos migrarem pro php5 tive q fazer algumas atualizações, e essa consulta foi uma delas

$texto = "Rua José João da Silva" // pego de um form de pesquisa campo input

se eu digitar apenas José João ele pega mas se digitar completo nao pega

 

isntrução sql

$id_query = mysql_query("SELECT * FROM Bd WHERE campo like '%$texto%' ORDER BY -Numero");

 

acho q fui claro agora

 

to usando no relatorio de pesquisa assim

rel_pesquisa.php

 

<?php
session_start();
$pesq_texto = "";
?>

<html>
<head>
<title>Documento sem título</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?
$_SESSION["pesq_texto"] = isset($_POST["texto"])?$_POST["texto"]:"";  
$texto = isset($_SESSION["pesq_texto"])?$_SESSION["pesq_texto"]:""; 
print "<b>Texto procurado:</b> <i>$texto</i><p></p>";
if(empty($texto)){
   echo("Registro não encontrado");
 }else{ 
 include '../conexao.php';
 $id_query = mysql_query("SELECT * FROM Bd WHERE campo like '%$texto%' ORDER BY -Numero");
 if (!mysql_num_rows($id_query)) {
   echo('Nenhum registro localizado.');
 }else{
 echo("<table border=\"1\" width=\"100%\" bgcolor=\"#C0C0C0\" bordercolor=\"#FFFFFF\" cellspacing=\"0\" cellspacing=\"2\">");
 echo("<tr>");
 echo("<td width=\"5%\"><font face=\"Arial\" size=\"2\"><b>Nº</b></font></td>");
 echo("<td width=\"8%\"><font face=\"Arial\" size=\"2\"><b>Data</b></font></td>");
 echo("<td width=\"82%\"><font face=\"Arial\" size=\"2\"><b>Indice</b></font></td>");
 echo("</tr>");
 while ($arr = mysql_fetch_array($id_query)) {
   $ddata = $arr['Dialei'].'/'.$arr['Meslei'].'/'.$arr['Anolei'];
   echo("<tr>");
   echo("<td valign=\"top\"><font face=\"Arial\" size=\"2\"><a href=\"mostrar.php?cd={$arr['Numero']}\">");
   echo($arr['Numero']);
   echo("</a></td>");
   echo("<td valign=\"top\"><font face=\"Arial\" size=\"2\">");
   echo($ddata);
   echo("</td>");
   echo("<td valign=\"top\"><font face=\"Arial\" size=\"2\">");
   echo(str_replace($texto, "<b>".$texto."</b>", $arr['Indice']));
   echo("</td>");
   echo("</tr>");
 }
}
}

print "</table><p></p>";
print "<h1 align=\"center\"><a href=\"javascript:history.go(-1)\" target=\"_self\"><img
src=\"imagens/voltar.gif\" width=\"30\" height=\"28\" border=\"0\"></a></h1>
";
?>

</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo cardozo desconheço uma forma de pegar via banco de dados dentro de um campo longtext um trecho específico.

Nunca manipulei Expressão Regular via Banco de Dados então não posso afirmar ou orienta-lo a fazer isto via banco de dados.

 

O que você pode fazer é manter as %% porque é a unica forma (que conheço pelo menos) dele trazer todos os valores desejados.

Porém entendo seu problema que é o fato dele trazer tudo que tenha rua, da, silva, José e adendos ao invés de trazer somente

os endereços identicos.

 

O que poderia ser feito é uma busca dentro do while ex:

 

$array = array();

while ($row=mysql_fetch_assoc($query)) {
    if (strstr($row['endereco'], 'Rua José da Silva')) $array[] = $row;
}

//Abaixo vai o debug
echo '<pre>';
print_r($array);

Desta forma você vai ter os arrays cujo o endereço bate.

 

Pegou a idéia?

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim amigo, peguei, mas deixa eu citar como tá dentro do bancod e dados gravado e verás

 

na vizualização é assim

Art. 1º. Fica proibida a comercialização de qualuqer bebida alcolica na Rua José João da Silva, cabendo a polícia reprimir, até prender as pessoas q descumprimirem essa Lei.

 

so que gravado no banco de dados assim

 

<body>

<p><strong>Art. 1º.</strong> Fica proibida a comercialização de qualuqer bebida
alcolica na Rua José João da Silva, cabendo a polícia reprimir, até prender as pessoas
q descumprimirem essa Lei.</p>
</body>

a pesquisa se faz para encontrar determinadas leis que tratam de organização da cidade.

 

a pesquisa funciona se eu digitar somente duas palavras de pesquisa acentuada, e se forem sem acento, ele pega a instrução corretamente, nesta mesma pesquisa se eu procurar pela clausula

$texto = prender as pessoas q descumprimirem essa Lei

 

ele pega corretamente.

 

o que me sugere agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que ficaria assim

<?php
session_start();
$pesq_texto = "";
?>

<html>
<head>
<title>Documento sem título</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?
$_SESSION["pesq_texto"] = isset($_POST["texto"])?$_POST["texto"]:"";  
$texto = isset($_SESSION["pesq_texto"])?$_SESSION["pesq_texto"]:""; 
print "<b>Texto procurado:</b> <i>'.$texto.'</i><p></p>"; #concatena '.variavel.'
if(empty($texto)){
   echo("Registro não encontrado");
 }else{ 
 include '../conexao.php';
 $id_query = mysql_query("SELECT * FROM Bd WHERE campo = "'.$texto.'" ORDER BY -Numero"); #concatena denovo aqui e olha esse -numero ta certo?
 if (!mysql_num_rows($id_query)) {
   echo('Nenhum registro localizado.');
 }else{
 echo("<table border=\"1\" width=\"100%\" bgcolor=\"#C0C0C0\" bordercolor=\"#FFFFFF\" cellspacing=\"0\" cellspacing=\"2\">");
 echo("<tr>");
 echo("<td width=\"5%\"><font face=\"Arial\" size=\"2\"><b>Nº</b></font></td>");
 echo("<td width=\"8%\"><font face=\"Arial\" size=\"2\"><b>Data</b></font></td>");
 echo("<td width=\"82%\"><font face=\"Arial\" size=\"2\"><b>Indice</b></font></td>");
 echo("</tr>");
 while ($arr = mysql_fetch_array($id_query)) {
   $ddata = $arr['Dialei'].'/'.$arr['Meslei'].'/'.$arr['Anolei'];
   echo("<tr>");
   echo("<td valign=\"top\"><font face=\"Arial\" size=\"2\"><a href=\"mostrar.php?cd={$arr['Numero']}\">");
   echo($arr['Numero']);
   echo("</a></td>");
   echo("<td valign=\"top\"><font face=\"Arial\" size=\"2\">");
   echo($ddata);
   echo("</td>");
   echo("<td valign=\"top\"><font face=\"Arial\" size=\"2\">");
   echo(str_replace($texto, "<b>".$texto."</b>", $arr['Indice']));
   echo("</td>");
   echo("</tr>");
 }
}
}

print "</table><p></p>";
print "<h1 align=\"center\"><a href=\"javascript:history.go(-1)\" target=\"_self\"><img
src=\"imagens/voltar.gif\" width=\"30\" height=\"28\" border=\"0\"></a></h1>
";
?>

</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo cardoso não entendi o que muda pelo fato de algumas pesquisas funcionarem

e outras não.

 

Seu problema não está sendo pesquisar com %% e o resultado vir com mais registros

do que o solicitado na pesquisa ??

 

Resolva conforme o exemplo que citei.

 

$texto = $_GET['texto']; //$texto = 'texto enviado via post ou get'; --> neste exemplo usei o get

$array = array();
while ($row=mysql_fetch_assoc($query)) {
    if (strstr($row['endereco'], $texto)) $array[] = $row;
}

//Abaixo vai o debug
echo '<pre>';
print_r($array);

Qual o problema com esta solução?

Qual o problema que você está enfrentando afinal? :huh:

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo

to aproveitado q ta respondendo rapido, fiz como pediu, mas tive q fazer umas mudanças, funionou, mas notei algo novamente

 

o texto ta gravado em html assim

<p ALIGN="JUSTIFY"><font face="Arial" size="2">Art. 1º. </b>O inciso VII do art. 2º da

Lei nº 2707/2002, de 30/07/2002, que Estabelece condições básicas de proteção da

coletividade contra a poluição sonora, passa a viger com a seguinte redação:</font></p>

 

o que notei

se buscar uma fraseque esteja antes da quebra de linha "Estabelece condições básicas de proteção da"

ele pega normal mas se extender com a palavra depois de da assim

"Estabelece condições básicas de proteção da

coletividade contra a"

ele não pega, e ai, o que fazer?

 

opss

a isncruç~]aoi sql de pesquisa

$id_query = mysql_query("SELECT * FROM BD WHERE campo like '%" . $texto . "%' ORDER BY -Numero");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a função rtrim()

 

http://www.php.net/rtrim

 

$texto = $_GET['texto']; //$texto = 'texto enviado via post ou get'; --> neste exemplo usei o get

$array = array();
while ($row=mysql_fetch_assoc($query)) {
    if (strstr(rtrim($row['endereco']), $texto)) $array[] = $row;
}

//Abaixo vai o debug
echo '<pre>';
print_r($array);

Vale a pena dar uma lida no link do amigo Haz também.

Parece ser uma solução em MySQL.

 

Abraços.

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.