Ir para conteúdo

POWERED BY:

Arquivado

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

Difurlan

[Resolvido] auto-completar

Recommended Posts

Olá amigos,

 

Estou com um script-exemplo que faz o mesmo que o google suggests. (Para quem não conhece, é um auto-completar de um textbox).

 

Mas não estou conseguindo aplicá-lo ao meu código.

 

O exemplo vem do seguinte site: http://elcio.com.br/ajax/autocompletar/

 

O que eu preciso é que o ajax retorne nomes, de acordo com o conjunto de caracteres que o usuário digitar neste input: <input name="q" id="completeaqui" autocomplete="off" />

 

 

entre as tags <head></head> estão as seguintes linhas, conforme o link acima recomenda.

 

-------------------------

 

<head>

<title>PDPA</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link href="estilo.css" rel="stylesheet" type="text/css" />

<link rel="stylesheet" href="autocompletar.css" />

<script src="events.js"></script>

<script src="xmlhttp.js"></script>

<script src="autocompletar.js"></script>

<script>

window.onload=function(){ac_registraJSON(document.forms[0],"q","busca.pt?q=")}

</script>

</head>

 

-----------------------------

 

 

Outra coisa importante que não consegui entender (extraído do site):

 

Fazendo a busca via Ajax, com JSON

A maneira mais simples de usar este script é fazê-lo buscar os dados do servidor via Ajax, no formato JSON. Para isto, basta fazer sua página PHP, ASP ou seja lá o que estiver usando, retornar um Array de strings formatado em JSON. (Vou falar mais de JSON na quarta parte desta série.)

 

 

Então, daí ficou um vácuo na minha idéia que não sei como preencher... Retornar um array de strings formatado em JSON??? caramba... Não faço a mínima, nem ele explicou...

 

 

A tabela que quero fazer a busca chama-se 'PagoA'. Os campos à serem retornados são: 'idPagoA' e 'pagoA'.

 

Alguém poderia me ajudar com este problema, por favor???

 

Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

fabyo,

além de ainda não ter tentado esse da createwebapp, esse parece ter um layout mais limpo do que o que estou tentando implantar.

 

vou tentar e depois posto aqui o result.

 

valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo,

 

estou tendo dificuldades para rodar esse da createwebapp. Já revisei o código, comparei... quando abro a minha página, aparece a seguinte mensagem no rodapé do IE,( com uma exclamação):

 

------------

 

....

...

Erro:'Autocomplete' não está definido.

....

...

 

------------------

 

Estou utilizando as mesmas nomeações que o exemplo utiliza.

 

(Meu código)

------------------

<input type="hidden" name="consumerID" id="consumerID"/>

Favorecido: <input type="text" name="consumerName"/>

 

<script>

new Autocomplete("consumerName", function() {

$("consumerID").value = "";

return "consumers.php?q=" + this.value;

});

</script>

 

--------------------

 

Exemplo:

 

-----------------

 

<form>

<input type="hidden" name="consumerID" id="consumerID"/>

<input type="text" name="consumerName"/>

</form>

 

 

<script> new Autocomplete("consumerName", function() { $("consumerID").value = ""; return "consumers.php?q=" + this.value; });</script>

-----------------------------

 

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parte do código:

 

(create.php) -> onde o textbox está localizado.

------------------------------------------

<head>

<script type="text/javascript" src="/include_lib/prototype.js"></script>

<script type="javascript" src="/include_lib/autocomplete.js"></script>

<link rel="stylesheet" type="text/css" href="/include_lib/autocomplete.css" />

 

</head>

 

 

...

...

...

 

 

<td height="18" colspan="4">

<input type="hidden" name="consumerID"/>

Favorecido: <input type="text" name="consumerName"/>

</td>

<script>

new Autocomplete("consumerName", function() {

$("consumerID").value = "";

return "consumers.php?q=" + this.value;

});

</script>

 

 

-----------------------------------------------------------------------

 

nome da Tabela (pagoA)

----------------------

idPagoA - numeric

pagoA - nvarchar

----------------------

 

 

(consumers.php)

------------------------------------------------------------------------

<?

 

$myServer = "ORION";

$myUser = "xx";

$myPass = "xxxx";

$myDB = "xxxx";

 

$s = mssql_connect($myServer, $myUser, $myPass) or die("Não foi possivel se conectar a $myServer");

 

$d = mssql_select_db($myDB, $s) or die("O Banco de dados $myDB nao pode ser aberto");

 

$q = $_GET["q"];

 

$pagesize = 50;

 

//mssql_query("set names utf8");

 

$sql = "select * from PagoA where locate('$q', pagoA) > 0 order by locate('$q', pagoA), name limit $pagesize";

 

$results = mssql_query($sql);

 

while ($row = mssql_fetch_array( $results )) {

$id = $row["idPagoA"];

$name = ucwords( strtolower( $row["pagoA"] ) );

$html_name = preg_replace("/(" . $q . ")/i", "<b>\$1</b>", $name);

 

echo "<li onselect=\"this.text.value = '$name'; $('consumerID').value = '$id'; \"><span>$id</span>$name</li>\n";

}

 

mssql_close();

 

?>

 

-------------------------------------------

 

 

Obrigado.

 

 

 

 

ah...O erro que apresenta é: 'Autocomplete' não está definido.

O autocomplete está no create.php, logo abaixo do input.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

só pra testar mude isso:

 

<head>
<script type="text/javascript" src="include_lib/prototype.js"></script>
<script type="javascript" src="include_lib/autocomplete.js"></script>
<link rel="stylesheet" type="text/css" href="include_lib/autocomplete.css" />

</head>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo

 

Eu testei com as modificações que voce recomendou, mas assim que eu abro a página, já aparece o exclamação no rodapé do IE, com o erro: 'Autocomplete' não está definido.

 

Estou testando o código fora do meu site e dá o mesmo erro.

 

Essa prototype não precisa de alguma instalação, ou é só copiar o arquivo para a pasta mesmo?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo,

 

O sample funciona sim, junto com o sample_output.html.

 

Porém, quando eu tento aplicar meu código para a busca, ele não retorna.

 

 

Meu código de busca e preenchimento está logo abaixo da representação da tabela onde estou buscando as informações:

 

 

nome da Tabela (pagoA)

----------------------

idPagoA - numeric

pagoA - nvarchar

----------------------

 

 

(consumers.php)

--------------------------------

<?

 

$myServer = "ORION";

$myUser = "sa";

$myPass = "xxxxxx";

$myDB = "bd2";

 

$s = mssql_connect($myServer, $myUser, $myPass) or die("Não foi possivel se conectar a $myServer");

 

$d = mssql_select_db($myDB, $s) or die("O Banco de dados $myDB nao pode ser aberto");

 

$q = $_GET["q"];

 

//$pagesize = 50;

 

//mssql_query("set names utf8");

 

$sql = "select * from PagoA where locate('$q', pagoA) > 0 order by locate('$q', pagoA), pagoA limit $pagesize";

 

$results = mssql_query($sql);

 

while ($row = mssql_fetch_array($results)) {

$id = $row["idPagoA"];

$name = ucwords( strtolower( $row["pagoA"] ) );

$html_name = preg_replace("/(" . $q . ")/i", "<b>\$1</b>", $name);

 

echo "<li onselect=\"this.text.value = '$name'; $('consumerID').value = '$id'; \"><span>$id</span>$name</li>\n";

}

 

mssql_close();

 

?>

 

 

Onde estou fazendo errado??

 

Obrigado novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo,

 

o exemplo da pagina é o que eu estou usando desde o começo.

 

Só usei o do download pra ver se o código funcionava mesmo. Agora que testei o do download e sei que tudo funciona, sei também que o problema está no código da página que eu adaptei para o meu contexto, que é o php acessando uma base de dados MS SQL SERVER e não My SQL.

 

Daí, também troquei o nome da table e os respectivos campos (idPagoA e pagoA), que são introduzidos nos value e no label do onselect...

 

Mas tá difícil do php entender isso...

 

Tem alguma dica?

 

aí vai o código novamente, atualizado agora.

 

-----------------------------------------------------------------

 

<?

 

$myServer = "ORION";

$myUser = "sa";

$myPass = "xxxxx";

$myDB = "bd"

 

$s = mssql_connect($myServer, $myUser, $myPass) or die("Não foi possivel se conectar a $myServer");

 

$d = mssql_select_db($myDB, $s) or die("O Banco de dados $myDB nao pode ser aberto");

 

$q = $_GET["q"];

 

mssql_query("set names utf8");

 

$sql = "select idPagoA, pagoA from PagoA where pagoA like '%$q%'";

 

$results = mssql_query($sql);

 

while ($row = mssql_fetch_array($results)) {

$id = $row["idPagoA"];

$name = ucwords( strtolower( $row["pagoA"] ) );

$html_name = preg_replace("/(" . $q . ")/i", "<b>\$1</b>", $name);

 

echo "<li onselect=\"this.text.value = '$name'; $('consumerID').value = '$id'; \"><span>$id</span>$name</li>\n";

}

 

mssql_close();

 

?>

 

-----------------------------------------------------------------

 

 

Obrigado.

 

Fabyo,

 

deu certo sim kra, e com meu código.

 

Ontem já saberia que tinha dado certo, se não fosse o maldito do CACHE...

 

Agora estou com outro probleminha:

 

- Os itens aparecem com símbolos no lugar dos acentos...

 

Já tentei urlencode, pois resolvi um problema com ajax com esse comando, mas neste código ficou pior do que já estava.

 

Eu deixei mssql_query("set names utf8"); pra ver se ficava certo, mas tb não.

 

Alguma sugestão?

 

Obrigado e bom dia.

 

Fabyo,

 

deu certo sim kra, e com meu código.

 

Ontem já saberia que tinha dado certo, se não fosse o maldito do CACHE...

 

Agora estou com outro probleminha:

 

- Os itens aparecem com símbolos no lugar dos acentos...

 

Já tentei urlencode, pois resolvi um problema com ajax com esse comando, mas neste código ficou pior do que já estava.

 

Eu deixei mssql_query("set names utf8"); pra ver se ficava certo, mas tb não.

 

Alguma sugestão?

 

Obrigado e bom dia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo,

 

estou usando <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

 

 

 

detalhe: o php aqui não reconhece a variável names do seguinte comando: mssql_query("set names utf8");

 

(e estou utilizando sem ele...)

 

Obrigado desde já pela força.

 

Fabyo,

 

estou usando <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

 

 

 

detalhe: o php aqui não reconhece a variável names do seguinte comando: mssql_query("set names utf8");

 

(e estou utilizando sem ele...)

 

Obrigado desde já pela força.

 

Não havia visto suas sugestões... vou analisar e posto o resultado, valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou acompanhndo o debate..

e tb estou tentando implementar o codigo ..

mas tb nao consegui..

o exemplo da pagina funciona mas se eu tento buscar com o meu codigo php ele nao me retorna nada..

 

ele me retorna request failed 404 not found..

 

vcs conseguiram rodar o script..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo, capile,...

 

aqui funcionou, mas na medida do possível.

 

O meu problema já havia sido resolvido ontem, mas meu cache estava me zuando...

 

Quanto ao erro no retorno das informações, resolvi assim:

 

htmlentities(urldecode($name))

 

o único problema aqui é que minha página já tem css. O meu css deixa a caixa de seleção ( a que que se abre quando é digitada alguma letra) transparente. Apenas os itens aparecem, mas aquela corzinha azul com fundo branco não... e eu também não consigo selecionar com o mouse.

 

No sample eu consigo selecionar via mouse, porém, se tentar selecionar o primeiro item, não dá. ...??

 

Capile, o código que estou usando para o consumers.php é o seguinte:

 

----------------------------------------------------

<?

 

$myServer = "ORION";

$myUser = "sa";

$myPass = "xxx";

$myDB = "bd1";

 

$s = mssql_connect($myServer, $myUser, $myPass) or die("Não foi possivel se conectar a $myServer");

 

$d = mssql_select_db($myDB, $s) or die("O Banco de dados $myDB nao pode ser aberto");

 

$q = $_GET["q"];

 

$sql = "select idPagoA, pagoA from PagoA where pagoA like '%$q%'";

 

$results = mssql_query($sql);

 

while ($row = mssql_fetch_array($results)) {

$id = $row["idPagoA"];

$name = ucwords( strtolower( $row["pagoA"] ) );

$html_name = preg_replace("/(" . $q . ")/i", "<b>\$1</b>", $name);

 

echo "<li onselect=\"this.text.value = '$name'; $('consumerID').value = '$id'; \"><span>$id</span>" . htmlentities(urldecode($name)). "</li>\n";

}

 

mssql_close();

 

?>

 

 

Obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora eu consegui ..

ele me retorna os nomes que estao na minha tabela com o codigo mas tb nao consigo seleciona-lo com o mouse..

 

você conseguiu seleciona-lo.. para ele ficar na combo id...

 

 

 

 

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo, capile,...

 

aqui funcionou, mas na medida do possível.

 

O meu problema já havia sido resolvido ontem, mas meu cache estava me zuando...

 

Quanto ao erro no retorno das informações, resolvi assim:

 

htmlentities(urldecode($name))

 

o único problema aqui é que minha página já tem css. O meu css deixa a caixa de seleção ( a que que se abre quando é digitada alguma letra) transparente. Apenas os itens aparecem, mas aquela corzinha azul com fundo branco não... e eu também não consigo selecionar com o mouse.

 

No sample eu consigo selecionar via mouse, porém, se tentar selecionar o primeiro item, não dá. ...??

 

Capile, o código que estou usando para o consumers.php é o seguinte:

 

----------------------------------------------------

<?

 

$myServer = "ORION";

$myUser = "sa";

$myPass = "xxx";

$myDB = "bd1";

 

$s = mssql_connect($myServer, $myUser, $myPass) or die("Não foi possivel se conectar a $myServer");

 

$d = mssql_select_db($myDB, $s) or die("O Banco de dados $myDB nao pode ser aberto");

 

$q = $_GET["q"];

 

$sql = "select idPagoA, pagoA from PagoA where pagoA like '%$q%'";

 

$results = mssql_query($sql);

 

while ($row = mssql_fetch_array($results)) {

$id = $row["idPagoA"];

$name = ucwords( strtolower( $row["pagoA"] ) );

$html_name = preg_replace("/(" . $q . ")/i", "<b>\$1</b>", $name);

 

echo "<li onselect=\"this.text.value = '$name'; $('consumerID').value = '$id'; \"><span>$id</span>" . htmlentities(urldecode($name)). "</li>\n";

}

 

mssql_close();

 

?>

 

 

Obrigado!!!

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.