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.
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.
Pergunta
Carlos Rocha
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:
buscacidades.js buscacidades.php conexao.php erro ue dá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
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.