Ir para conteúdo
Fórum Script Brasil
  • 0

buscacidade.php


Carlos Rocha

Pergunta

Ola pessoal

Olha só.

Estou com um problema aqui. É o seguinte:

Tenho um form onde um dos campos é um select com os nomes dos estados (...MG,RJ,SP...).

Tenho tambem um JavaScript que recebe dados de um arquivo php que seleciona quais cidades, em uma tabela de cidades, que se relacionam com o estado enviado via post a ele.

Uma vez de posse do retorno do aqruivo php, o aquivo Javascript popula outro select(cidades) no form com o estado selecionado no select(estados)

Coisa normal.

O problema é o seguinte.

Toda a minha codificação é utf-8, arquivos e base de dados. O form vai bem, o arquivo javascript vai bem mas o buscacidade.php não busca pois o script pede um header e na conexão com o banco, tambem é necessario outro header. Ai ele não roda.

Obs.: isso só no servidor pois no localhost funcina normal.

O que fazer?

veja os códigos:

form:

......
  <tr>
    <td width="150">Estado:</td>
    <td            >
    <select name="estado" onChange="DadosCidade(this.value);"  size="1" style="width:200px">
      <option value="#" selected>Selecione o Estado:</option>
      <option value="AC">AC</option>
      <option value="AL">AL</option>
      <option value="AM">AM</option>
      <option value="AP">AP</option>
      <option value="BA">BA</option>
      <option value="CE">CE</option>
      <option value="DF">DF</option>
      <option value="ES">ES</option>
      <option value="GO">GO</option>
      <option value="MA">MA</option>
      <option value="MG">MG</option>
      <option value="MS">MS</option>
      <option value="MT">MT</option>
      <option value="PA">PA</option>
      <option value="PB">PB</option>
      <option value="PE">PE</option>
      <option value="PI">PI</option>
      <option value="PR">PR</option>
      <option value="RJ">RJ</option>
      <option value="RN">RN</option>
      <option value="RO">RO</option>
      <option value="RR">RR</option>
      <option value="RS">RS</option>
      <option value="SC">SC</option>
      <option value="SE">SE</option>
      <option value="SP">SP</option>
      <option value="TO">TO</option>
    </select></td>
  </tr>
  <tr>
    <td width="150">Cidade:</td>
    <td            >
    <select name="cidade"  id="cidade" size="1" style="width:200px">
        <option id="opcoescidade" value="#">Primeiro selecione o estado!</option>
    </select>
    </td>
  </tr>
......
buscacidades.js
function DadosCidade(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].cidade.options.length = 1;
         
         idOpcao  = document.getElementById("opcoescidade");
         
         ajax.open("POST", "../../global/buscacidade.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 processXMLCidades que vai varrer os dados
            if(ajax.readyState == 4 ) {
               if(ajax.responseXML) {
                  processXMLCidades(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 processXMLCidades(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", "opcoescidade");
                //atribui um valor
                novo.value = codigo;
                //atribui um texto
                novo.text  = descricao;
                //finalmente adiciona o novo elemento
                document.forms[0].cidade.options.add(novo);
         }
      }
      else {
        //caso o XML volte vazio, printa a mensagem abaixo
        idOpcao.innerHTML = "Primeiro selecione o estado>>";
      }      
   }
buscacidades.php
<?php 
include("conexao.php"); 
$MySQL = new TMySQL();
$MySQL->connect($host, $db, $user, $pass);
?>
<?

$Estado = $_GET["estado"];   

$sql = "SELECT * FROM  cidades WHERE estado = '$Estado' ORDER BY nome";            
$sql = mysql_query($sql);  
$row = mysql_num_rows($sql);    

//VERIFICA SE VOLTOU ALGO 
if($row) {                
   //XML
   $xml  = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
   $xml .= "<cidades>\n";               
   
   //PERCORRE ARRAY            
   for($i=0; $i<$row; $i++) {  
      $codigo    = mysql_result($sql, $i, "id"); 
      $descricao = mysql_result($sql, $i, "nome");
      $xml .= "<cidade>\n";     
      $xml .= "<codigo>".$codigo."</codigo>\n";                  
      $xml .= "<descricao>".$descricao."</descricao>\n";         
      $xml .= "</cidade>\n";    
   }//FECHA FOR                 
   
   $xml.= "</cidades>\n";
   
}//FECHA IF (row)                                               
   Header("Content-type: application/xml; charset=utf-8");
echo $xml;            
?>
conexao.php
<? 
class TMySQL { 

 var $soquete;

function connect($host,$db,$user,$pass) { 
   $this->host = "localhost"; 
   $this->db  = "c27202_sistema";

   $this->user = "xxxx";
   $this->pass = "xxxx";  
   
   $this->soquete=mysql_connect($this->host,$this->user,$this->pass);
   mysql_set_charset("utf8", $this->soquete);
   if (!$this->soquete) { 
     echo "Não foi possível conectar-se ao Bando de Dados MySQL"; 
   }
   else
   {
   if (!mysql_select_db($this->db,$this->soquete)) { 
     echo "Banco de dados não encontrado"; 
   } 
   }
 }

 function query ($string) { 
   $myquery = mysql_query($string,$this->soquete); 
   if (!$myquery) { 
      echo "Erro na consulta da query!<br>" . $string;
   } 
   else
   { 
      return $myquery;
   }
                         }

function num_rows(){
   return mysql_num_rows( $this->query );
                   }
}
?>
erro ue dá
Warning: Cannot modify header information - headers already sent by (output started at /home/c27202/public_html/sistema/global/conexao.php:1) in /home/c27202/public_html/sistema/global/buscacidade.php on line 33

Ele até lista asa cidades ma antes da a mensagem de header e se eu tirar o header ele não roda o script.

O quwe fazer?

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Parceiro,

Sempre será retornado esse erro, caso alguma informação for impressa na tela, antes da definição do HEAD.

Verificando seu script, encontrei um trecho no código que possa estar imprimindo algo na tela.

No script buscacidades.php na linha 5 e 6, você está fechando e abrindo a tag PHP desnecessariamente, o que pode estar provocando uma impressão na tela.

Remova o que está nessas linhas e faça o teste.

<?php
include("conexao.php");
$MySQL = new TMySQL();
$MySQL->connect($host, $db, $user, $pass);

$Estado = $_GET["estado"];  

$sql = "SELECT * FROM  cidades WHERE estado = '$Estado' ORDER BY nome";            
$sql = mysql_query($sql);  
$row = mysql_num_rows($sql);    

//VERIFICA SE VOLTOU ALGO
if($row) {                
   //XML
   $xml  = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
   $xml .= "<cidades>\n";              
  
   //PERCORRE ARRAY            
   for($i=0; $i<$row; $i++) {  
      $codigo    = mysql_result($sql, $i, "id");
      $descricao = mysql_result($sql, $i, "nome");
      $xml .= "<cidade>\n";    
      $xml .= "<codigo>".$codigo."</codigo>\n";                  
      $xml .= "<descricao>".$descricao."</descricao>\n";        
      $xml .= "</cidade>\n";    
   }//FECHA FOR                
  
   $xml.= "</cidades>\n";
  
}//FECHA IF (row)                                              
   Header("Content-type: application/xml; charset=utf-8");
echo $xml;            
?>

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

já passei por esse sacrificio meses atraz

aprendi.

Trabalho com o dreamweaver cs5 e não(de jeito nenhum) coloco BOM.

Foi uma cansera na época mas aprendi.

Ele esta gerando um <br> no incio do aqruivo.

Fiz o seguinte teste:

Coloquei a variavel Estado pra receber por get e não por post.

chamei a pagina a partir do navegador com passagem de parametro .....buscacidade.php?Estado=MG.

Dai quando abro o fonte ta la:

<br>

e o erro aqui na linha de baixo

testa ai

http://carcleo.com/sistema/global/buscacidade.php?estado=mg

la esta recebendo a variavel do arquivo js por POST. se eu trocar para get, abaxo desse erro lista as cidades.

Ob.: se eu retirar o header do fim do aqruivo o erro some, as cidades são exibidas normalmente no aquivo php mas o xml chega no js masa chega vazio.

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

Achei.

No meu conexao.php, sempre uso um usuario e senha local e usuario e senha pro servidor.

Dai, eu sempre coloco os dois, para que, quando jogar pro servidor, retirar um mas havia me esquecido de tirar um.

.......
   $this->host = "localhost"; 
   $this->db  = "c27202_sistema";

   //localhost
   //$this->user = "xxxx";
   //$this->pass = "xxxx"; 

   /servidor
   $this->user = "xxxx";
   $this->pass = "xxxx";  
.......

Que este post sirva para ajudar mais alguém.

Obrigado a todos que ajudaram.

Um grande abraço a todos e continuando a labuta!

Moderador. Pode fechar mais este. Obrigado!

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

Carlos,

Mas, teoricamente, essa troca de login do banco de dados não iria resolver o problema.

O que estava ocorrendo era que o script estava imprimindo algo na tela antes da definição do head.

Mas como existe aquele ditado : "Não mexa com quem está quieto", rsrsrs

Abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...