Carcleo 4 Denunciar post Postado Agosto 16, 2010 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
rodrigo I.O 0 Denunciar post Postado Agosto 16, 2010 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
Carcleo 4 Denunciar post Postado Agosto 16, 2010 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
Carcleo 4 Denunciar post Postado Agosto 16, 2010 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