Ir para conteúdo

POWERED BY:

Arquivado

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

Carcleo

[Resolvido] buscacidade.php

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara veja se tem algum espaço sobrando aí. deixa te explicar.

 

quando um documento é aberto a primeira coisa lida é o header então se tiver algum espaço aí no seu arquivo php, ele é dado como um html por mais besta que seja, um espaço é considerado HTML. então técnicamente ele já tem um header html. Por isso a mensagem "Não pode modificar o cabeçalho", por que ele já foi lido.

 

outra coisa meu caro a função header() é tudo em minúsculo. documentação php

 

procura ai no seu arquivo por um espaço qualquer sobrando aí.. quase certeza que é isso!

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Irmão.

 

Obrigado pelo apoio mas não consegui achar nada de errado a não ser o header que estava começando com letra maiuscula, o que ja foi corrigido e sem sucesso.

 

Os arquivos são estes ai. Alguma outra sugestão?

 

Já imaginou ter que por o usuario pra digitar o nome da cidade manualmente?

 

O gozado é que aqui, no meu apache local, funciona redondihno!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 alguem.

 

Obrigado a todos que ajudaram.

 

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

 

Moderador. Pode fechar mais este. 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.