Erro na consulta com Ajax Autocompletar
Encontrei um código para autocompletar formulários semelhante ao Google Suggest em http://blog.idealmind.com.br/tag/autocompletar/ muito legal para php + mysql + ajax. Funciona mesmo. O cara deu um exemplo selecionando estados com o autocompletar e em seguida, com base no estado selecionado, chama as cidades no outro autocompletar.
Só que o cara usou os mesmos nomes de campo para as tabelas 'estados' e 'cidades', ou seja 'id' e 'nome'. Na hora de customizar me ferrei! Não sabia quem era o pai nem quem era o filho. Dei uma mexida na página que conecta ao banco e executa as querys e o primeiro campo ficou beleza. Mas no campo cidades, o MySQL tá dando uma mensagem "Warning:mysql_fetch_array() expects parameter 1 to be resource, boolean given in meuajax.php on line 47"
Vou postar o código desta página aqui e eu coloco as explicações no <!-- -->
header('Content-type: text/html; charset=UTF-8');
$hostname = 'localhost';
$username = 'root';
$password = '';
$dbname = 'intranet';
mysql_connect( $hostname, $username, $password ) or die ( 'Erro ao tentar conectar ao banco de dados.' );
mysql_select_db( $dbname );
if( isset( $_REQUEST['query'] ) && $_REQUEST['query'] != "" )
{
$q = mysql_real_escape_string( $_REQUEST['query'] );
if( isset( $_REQUEST['identifier'] ) && $_REQUEST['identifier'] == "estado") <!-- Nome do campo que vai fazer a pesquisa. Eu não alterei, pois na página que chama o script, o campo do formulário tá com o mesmo nome e id -->
{
$sql = "SELECT * FROM empresas where locate('$q',nick) > 0 order by locate('$q',nick) limit 10"; <!-- Alterei o nome da tabela para 'empresas' e o campo, de 'nome' para 'nick' -->
$r = mysql_query( $sql );
if ( $r )
{
echo '
}
}
if( isset( $_REQUEST['identifier'] ) && $_REQUEST['identifier'] == "cidade")<!-- Nome do campo que vai fazer a pesquisa. Eu não alterei, pois na página que chama o script, o campo do formulário tá com o mesmo nome e id -->
{
$sql = isset( $_REQUEST['extraParam'] ) ? " and estado = " . mysql_real_escape_string( $_REQUEST['extraParam'] ) . " " : "";
$sql = "SELECT * FROM treinandos where locate('$q',treinando) > 0 $sql order by locate('$q',treinando) limit 10"; <!-- Alterei de 'cidades' para 'treinandos' e 'nome' para 'treinando' -->
$r = mysql_query( $sql );
if ( count( $r ) > 0 )
{
echo '
}
}
}
?>
Tá um pouco extenso o código mas acho que deve ser uma bobeirinha que eu dei. Obrigado pela ajuda.
Só que o cara usou os mesmos nomes de campo para as tabelas 'estados' e 'cidades', ou seja 'id' e 'nome'. Na hora de customizar me ferrei! Não sabia quem era o pai nem quem era o filho. Dei uma mexida na página que conecta ao banco e executa as querys e o primeiro campo ficou beleza. Mas no campo cidades, o MySQL tá dando uma mensagem "Warning:mysql_fetch_array() expects parameter 1 to be resource, boolean given in meuajax.php on line 47"
Vou postar o código desta página aqui e eu coloco as explicações no <!-- -->
header('Content-type: text/html; charset=UTF-8');
$hostname = 'localhost';
$username = 'root';
$password = '';
$dbname = 'intranet';
mysql_connect( $hostname, $username, $password ) or die ( 'Erro ao tentar conectar ao banco de dados.' );
mysql_select_db( $dbname );
if( isset( $_REQUEST['query'] ) && $_REQUEST['query'] != "" )
{
$q = mysql_real_escape_string( $_REQUEST['query'] );
if( isset( $_REQUEST['identifier'] ) && $_REQUEST['identifier'] == "estado") <!-- Nome do campo que vai fazer a pesquisa. Eu não alterei, pois na página que chama o script, o campo do formulário tá com o mesmo nome e id -->
{
$sql = "SELECT * FROM empresas where locate('$q',nick) > 0 order by locate('$q',nick) limit 10"; <!-- Alterei o nome da tabela para 'empresas' e o campo, de 'nome' para 'nick' -->
$r = mysql_query( $sql );
if ( $r )
{
echo '
- '."\n";
while( $l = mysql_fetch_array( $r ) )
{
$p = $l['nick']; <!-- Alterei o nome do campo de 'nome' para 'nick' -->
$p = preg_replace('/(' . $q . ')/i', '<span style="font-weight:bold;">$1</span>', $p);
echo "\t".'<li id="autocomplete_'.$l['codcli'].'" rel="'.$l['codcli'].'_' . $l['razao'] . '">'. utf8_encode( $p ) .''."\n"; <!-- Alterei de 'id', 'id', 'uf' para 'codcli', 'codcli', 'razao' -->
}
echo '
}
}
if( isset( $_REQUEST['identifier'] ) && $_REQUEST['identifier'] == "cidade")<!-- Nome do campo que vai fazer a pesquisa. Eu não alterei, pois na página que chama o script, o campo do formulário tá com o mesmo nome e id -->
{
$sql = isset( $_REQUEST['extraParam'] ) ? " and estado = " . mysql_real_escape_string( $_REQUEST['extraParam'] ) . " " : "";
$sql = "SELECT * FROM treinandos where locate('$q',treinando) > 0 $sql order by locate('$q',treinando) limit 10"; <!-- Alterei de 'cidades' para 'treinandos' e 'nome' para 'treinando' -->
$r = mysql_query( $sql );
if ( count( $r ) > 0 )
{
echo '
- '."\n";
while( $l = mysql_fetch_array( $r ) ) <!-- ESSA É A BENDITA LINHA 47!!! -->
{
$p = $l['treinando']; <!-- Alterei de 'nome' para 'treinando' -->
$p = preg_replace('/(' . $q . ')/i', '<span style="font-weight:bold;">$1</span>', $p);
echo "\t".'<li id="autocomplete_'.$l['id_trein'].'" rel="'.$l['codcli'].'_' . $l['funcao'] . '">'. utf8_encode( $p ) .''."\n"; <!-- Alterei de 'id', 'id', 'uf' para 'id_trein', 'codcli', 'funcao' -->
}
echo '
}
}
}
?>
Tá um pouco extenso o código mas acho que deve ser uma bobeirinha que eu dei. Obrigado pela ajuda.
comentários (0)
suspender
Lista de Respostas:
24/06/2010 4:10pm
(~14 anos atrás)
(~14 anos atrás)
mude
$r = mysql_query( $sql );
para
$r = mysql_query( $sql )or die(mysql_error());
e veja o erro que esta retornando...
$r = mysql_query( $sql );
para
$r = mysql_query( $sql )or die(mysql_error());
e veja o erro que esta retornando...
26/06/2010 1:11am
(~14 anos atrás)
(~14 anos atrás)
Valeu doutor! Agora sim deu certo. Obrigado!!!