0

Erro na consulta com Ajax Autocompletar

criado por Webster Moitinho em 23/06/2010 10:05pm
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 '
    '."\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.

Lista de Respostas:

+1
Resposta Final (Undo)
24/06/2010 4:10pm
(~8 anos atrás)
BOZO respondeu:
mude
$r = mysql_query( $sql );

para
$r = mysql_query( $sql )or die(mysql_error());


e veja o erro que esta retornando...

0
26/06/2010 1:11am
(~8 anos atrás)
Webster Moitinho respondeu:
Valeu doutor! Agora sim deu certo. Obrigado!!!

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)