Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoas,
Preciso de uma ajudinha para o seguinte: achei esse código na internet e estou tentando adaptar ao meu sistema funciona direitinho o carregamento mas como tive que mudar a consulta sql e outros dados não estou conseguindo repopular o select , Acho que o xml pode não estar sendo gravado ou pode ser algum problema com o tal do $i . Se alguém conhece o código e puder me dar um help ai .
O original é assim
Arquivo conexão que eu nem usei
<?php$host = "localhost"; //endereço do seu servidor MySQL$database = "nova"; //preencha com o nome do BD que contem a tabela que criamos$login_db = "root"; //login usado para acessar seu BD$senha_db = "root"; //senha usada para acessar seu BD// não altere mais nada abixo desta linha$connection = mysql_connect("$host","$login_db","$senha_db") or die ("Não foi possivel conectar ao servidor."); $db = mysql_select_db("$database", $connection) or die("Não foi possivel selecionar o banco de dados.");?>
Ai o arquivo index.php
<?//CONECTA AO MYSQLrequire_once("conexao.php");//PEGA OS ESTADOS $sql = " SELECT a.id_estado, a.dsc_estado, a.sigl_estado FROM estados a ORDER BY a.dsc_estado"; //EXECUTA A QUERY $sql = mysql_query($sql); $row = mysql_num_rows($sql); ?><script language="JavaScript"> function Dados(valor) { //verifica se o browser tem suporte a ajax try { ajax = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { try { ajax = new ActiveXObject("Msxml2.XMLHTTP"); } catch(ex) { try { ajax = new XMLHttpRequest(); } catch(exc) { alert("Esse browser não tem recursos para uso do Ajax"); ajax = null; } } } //se tiver suporte ajax if(ajax) { //deixa apenas o elemento 1 no option, os outros são excluídos document.forms[0].listCidades.options.length = 1; idOpcao = document.getElementById("opcoes"); ajax.open("POST", "busca_aux.php", true); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.onreadystatechange = function() { //enquanto estiver processando...emite a msg de carregando if(ajax.readyState == 1) { idOpcao.innerHTML = "Carregando...!"; } //após ser processado - chama função processXML que vai varrer os dados if(ajax.readyState == 4 ) { if(ajax.responseXML) { processXML(ajax.responseXML); } else { //caso não seja um arquivo XML emite a mensagem abaixo idOpcao.innerHTML = "--Primeiro selecione o estado--"; } } } //passa o código do estado escolhido var params = "estado="+valor; ajax.send(params); } } function processXML(obj){ //pega a tag cidade var dataArray = obj.getElementsByTagName("cidade"); //total de elementos contidos na tag cidade if(dataArray.length > 0) { //percorre o arquivo XML paara extrair os dados for(var i = 0 ; i < dataArray.length ; i++) { var item = dataArray[i]; //contéudo dos campos no arquivo XML var codigo = item.getElementsByTagName("codigo")[0].firstChild.nodeValue; var descricao = item.getElementsByTagName("descricao")[0].firstChild.nodeValue; idOpcao.innerHTML = "--Selecione uma das opções abaixo--"; //cria um novo option dinamicamente var novo = document.createElement("option"); //atribui um ID a esse elemento novo.setAttribute("id", "opcoes"); //atribui um valor novo.value = codigo; //atribui um texto novo.text = descricao; //finalmente adiciona o novo elemento document.forms[0].listCidades.options.add(novo); } } else { //caso o XML volte vazio, printa a mensagem abaixo idOpcao.innerHTML = "--Primeiro selecione o estado--"; } }</script><html> <head> <title>Ê</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF"> <form name="frmAjax"> Estado: <select name="listEstados" onChange="Dados(this.value);"> <option value="0">--Selecione o estado >></option> <? for($i=0; $i<$row; $i++) { ?> <option value="<? echo mysql_result($sql, $i, "id_estado"); ?>"> <? echo mysql_result($sql, $i, "dsc_estado"); ?></option> <? } ?> </select> <br><br> Cidade: <select name="listCidades"> <option id="opcoes" value="0">--Primeiro selecione o estado--</option> </select> </form> </body></html>
E o arquivo cidades.php
<?//CONECTA AO MYSQLrequire_once("conexao.php");//RECEBE PARÃMETRO $pEstado = $_POST["estado"]; //QUERY $sql = " SELECT a.id_cidade, a.dsc_cidade FROM cidades a WHERE a.cod_estado = ".$pEstado." ORDER BY a.dsc_cidade"; //EXECUTA A QUERY $sql = mysql_query($sql); $row = mysql_num_rows($sql); //VERIFICA SE VOLTOU ALGO if($row) { //XML $xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"; $xml .= "<cidades>\n"; //PERCORRE ARRAY for($i=0; $i<$row; $i++) { $codigo = mysql_result($sql, $i, "id_cidade"); $descricao = mysql_result($sql, $i, "dsc_cidade"); $xml .= "<cidade>\n"; $xml .= "<codigo>".$codigo."</codigo>\n"; $xml .= "<descricao>".ucfirst(strtolower($descricao))."</descricao>\n"; $xml .= "</cidade>\n"; }//FECHA FOR $xml.= "</cidades>\n"; //CABEÇALHO Header("Content-type: application/xml; charset=iso-8859-1"); }//FECHA IF (row) //PRINTA O RESULTADO echo $xml; ?>
Ai vem a minha adaptação coloquei o código do index no meu busca.php e o cidades.php em um busca_aux.php, conexão continuei chamando a que já existia.
busca.php
<?php require_once('../Connections/gepem.php'); ?><?php$tipo = $_GET['id'];mysql_select_db($database_gepem, $gepem);$query_artigos_form2 = "SELECT DISTINCT (Doc_tipo) FROM arquivos ORDER BY arquivos.Doc_tipo";$artigos_form2 = mysql_query($query_artigos_form2, $gepem) or die(mysql_error());$row_artigos_form2 = mysql_fetch_assoc($artigos_form2);$totalRows_artigos_form2 = mysql_num_rows($artigos_form2);mysql_select_db($database_gepem, $gepem);$query_artigos_ano2 = "SELECT DISTINCT (Ano) FROM arquivos ORDER BY arquivos.Ano ";$artigos_ano2 = mysql_query($query_artigos_ano2, $gepem) or die(mysql_error());$row_artigos_ano2 = mysql_fetch_assoc($artigos_ano2);$totalRows_artigos_ano2 = mysql_num_rows($artigos_ano2); ?><script language="JavaScript"> function Dados(valor) { //verifica se o browser tem suporte a ajax try { ajax = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { try { ajax = new ActiveXObject("Msxml2.XMLHTTP"); } catch(ex) { try { ajax = new XMLHttpRequest(); } catch(exc) { alert("Esse browser não tem recursos para uso do Ajax"); ajax = null; } } } //se tiver suporte ajax if(ajax) { //deixa apenas o elemento 1 no option, os outros são excluídos document.forms[0].listCidades.options.length = 1; idOpcao = document.getElementById("opcoes"); ajax.open("POST", "busca_aux.php", true); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.onreadystatechange = function() { //enquanto estiver processando...emite a msg de carregando if(ajax.readyState == 1) { idOpcao.innerHTML = "Carregando...!"; } //após ser processado - chama função processXML que vai varrer os dados if(ajax.readyState == 4 ) { if(ajax.responseXML) { processXML(ajax.responseXML); } else { //caso não seja um arquivo XML emite a mensagem abaixo idOpcao.innerHTML = "--*--"; } } } //passa o código do estado escolhido var params = "estado="+valor; ajax.send(params); } } function processXML(obj){ //pega a tag cidade var dataArray = obj.getElementsByTagName("cidade"); //total de elementos contidos na tag cidade if(dataArray.length > 0) { //percorre o arquivo XML paara extrair os dados for(var i = 0 ; i < dataArray.length ; i++) { var item = dataArray[i]; //contéudo dos campos no arquivo XML var descricao = item.getElementsByTagName("descricao")[0].firstChild.nodeValue; idOpcao.innerHTML = "-- Selecione um Ano --"; //cria um novo option dinamicamente var novo = document.createElement("option"); //atribui um ID a esse elemento novo.setAttribute("id", "opcoes"); //atribui um valor novo.value = descricao; //atribui um texto novo.text = descricao; //finalmente adiciona o novo elemento document.forms[0].listCidades.options.add(novo); } } else { //caso o XML volte vazio, printa a mensagem abaixo idOpcao.innerHTML = "--XML Vazio--"; } }</script><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""[http://www.w3.org/TR/html4/loose.dtd">http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Untitled Document</title><style type="text/css"><!--.style1 {color: #0099CC}--></style><link href="../css/estilo_geral.css" rel="stylesheet" type="text/css"><style type="text/css"><!--.style3 {font-size: 14px}--></style></head><body><p class="geral"> </p><?phpif ($row_artigos_ano2['Ano'] != ""){ ?><p class="geral">Selecione uma entre as opções disponíveis, em Tipo de documento e Ano de publicação, para realizar sua busca.</p><p class="geral"> </p><form action="resultados.php" method="post" enctype="multipart/form-data" name="frmAjax" target="_self" id="form1"> <input name="doc_tipo" type="hidden" value="<?php echo $_GET['id']; ?>"> <table width="265" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td colspan="3"> </td> </tr> <tr bgcolor="#0099CC"> <td width="1" height="25"> <div align="center"></div></td> <td width="168" class="formul_regular"> <div align="center"> <select name="listEstados" onChange="Dados(this.value);" size="1" class="formul_regular" id="listEstados"> <option value="0" <?php if (!(strcmp("", $row_artigos_form2['Doc_tipo']))) ?> selected="selected">Tipo de Documento</option> <option value=""></option> <?phpdo { ?> <option value="<?php echo $row_artigos_form2['Doc_tipo']?>"><?php echo $row_artigos_form2['Doc_tipo']?></option> <?php} while ($row_artigos_form2 = mysql_fetch_assoc($artigos_form2)); $rows = mysql_num_rows($artigos_form2); if($rows > 0) { mysql_data_seek($artigos_form2, 0); $row_artigos_form2 = mysql_fetch_assoc($artigos_form2); }?> </select> </div></td> <td width="96" class="formul_regular"> <span class="style1">...</span> <select name="listCidades" size="1" class="formul_regular" id="listCidades"> <option value="0" id="opcoes"> - </option> </select> </td> </tr> <tr> <td colspan="3"> </td> </tr> <tr> <td colspan="3"><div align="right"> <input name="Submit" type="submit" class="formul_regular" value="Buscar" /> </div></td> </tr> </table></form><br><table width="417" border="1" align="center" bordercolor="#CCCCCC" bgcolor="#FFFFFF"> <tr> <td><div align="justify" class="geralnegtitu style3"> <div align="justify">Os documentos aqui publicados são de responsabilidade de seus autores e estão na sua forma original, sem correções. </div> </div></td> </tr></table><br><?php } else { echo ('<p class="geral">Agradecemos seu interesse, mas não temos publicações cadastradas neste momento. Retorne em alguns dias.</p>');} ?></body></html><?phpmysql_free_result($artigos_form2);mysql_free_result($artigos_ano2);?>
busca_aux.php (onde eu penso que reside o problema)
<?phprequire_once('../Connections/gepem.php'); //RECEBE PARÃMETRO $pEstado = $_POST["estado"]; //QUERY $sql = "SELECT DISTINCT (Ano) FROM arquivos WHERE Doc_tipo = ".$pEstado." ORDER BY arquivos.Ano"; //EXECUTA A QUERY $sql = mysql_query($sql); $row = mysql_num_rows($sql); //VERIFICA SE VOLTOU ALGO if($row) { //XML $xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"; $xml .= "<cidades>\n"; //PERCORRE ARRAY for($i=0; $i<$row; $i++) { $descricao = mysql_result($sql, $i, "arquivos.Ano"); $xml .= "<cidade>\n"; $xml .= "<descricao>".ucfirst(strtolower($descricao))."</descricao>\n"; $xml .= "</cidade>\n"; }//FECHA FOR $xml.= "</cidades>\n"; //CABEÇALHO Header("Content-type: application/xml; charset=iso-8859-1"); }//FECHA IF (row) //PRINTA O RESULTADO echo $xml; ?>
Relembrando como ele retorna o select escrito XML Vazio eu entendo que o problema deve estar na escrita do xml ou na leitura enfim como eu não sei nada de java me ajudem a ver a lógica do que ocorria e do que deveria ocorrer. Pq eu não sei qual o nome do xml nem sei o que é o tal i$ usado no for.
:unsure:
Valeu t+
Carregando comentários...