• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

diazzz

problema com combos dinamicas

19 mensagens neste tópico

Viva a todos!

Eu estou com um problema um bocado estranho... numa página do meu site tenho duas combos (dropdown menus) em que a segunda depende do valor escolhido da primeira. Ou seja, vou buscar os dados à tabela concelhos para preencher a primeira combo e dps a segunda é preenchida atraves de outro ficheiro que é accionado qd clicko num concelho da primeira combo. Dps esse ficheiro preenche as outra combo com as freguesias correspondentes.

O problema é que os concelhos aparecem bem, mas as freguesias nao aparecem com os acentos!!! Assim com este problema para inserir depois na base de dados uma noticia com estes dados já nao consigo porque tenho de ir buscar o ID da freguesia atraves do seu nome e como tem ? em vez da letra c acento n funciona.

Alguem me pode ajudar aqui? Deixo aqui o codigo k estou a utilizar!

NOVA_NOTICIA.PHP

...

<td>

<select name="concelho" id="topic" onChange="clicked();">

<option value="0"></option>

<?php

$consulta = mysql_query("SELECT * FROM concelhos");

while( $row = mysql_fetch_assoc($consulta) )

{

echo "<option value=\"{$row['id']}\">{$row['nome']}</option>\n";

}

?>

</select>

</td>

<td>

<select name="freguesia" id="subcats" disabled>

<option>Seleccione um concelho</option>

</select>

</td>

...

JAVASCRIPT (k é xamado na nova_noticia.php)

//variaveis

var first = "topic"; //id da primeira combo

var second = "subcats"; //id da segunda combo

//

function sendRequest(url,params,HttpMethod)

{

if(!HttpMethod)

{ //verifica se o modo http está definido, senao coloca em GET

HttpMethod="GET";

}

// inicializa o request object

req=null;

if(window.XMLHttpRequest)

{

req=new XMLHttpRequest; //para o mozilla/safari

}

else if(window.ActiveXObject)

{

req=new ActiveXObject("Microsoft.XMLHTTP"); //para o IE

}

//define callback handler

if(req)

{

req.onreadystatechange=onReadyState;

req.open(HttpMethod,url,true);

req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; iso-8859-1");

req.setRequestHeader("CharSet", "iso-8859-1");

req.send(params);

}

}

//

function onReadyState()

{

var ready=req.readyState;

var data=null;

if(ready==4)

{

data=req.responseText;

var items = data.split(',');

var length = items.length;

for(var i = 0; i < length; i++)

{

var childEl = document.createElement('option');

var El = document.getElementById(second);

El.appendChild(childEl);

childEl.value = items;

childEl.innerHTML = items;

}

}

}

//

function clicked()

{

var el = document.getElementById(first);

var ob2=document.getElementById(second);

var selected = el.selectedIndex;

//

while(ob2.hasChildNodes())

{ //remove items da combo se algum já existir

ob2.removeChild(ob2.firstChild);

}

if(selected!= 0)

{ //se for escolhida uma opçao diferente da primeira "Seleccione um concelho"

sendRequest("not_freg.php?topic="+el.options[selected].value);

ob2.disabled=0;

}

else

{

var childEl = document.createElement('option');

ob2.appendChild(childEl);

childEl.innerHTML = 'Seleccione um concelho';

ob2.disabled=1;

}

}

NOTICIA_FREGUESIA.PHP

<?php

include "conf.php";

if(empty($_GET['topic']))

{ //se o concelho estiver vazio nao faz nada

exit();

}

$topic = $_GET['topic'];

$query = "SELECT nome FROM freguesias WHERE id_concelho = '$topic'";

$result = mysql_query($query);

if($result)

{

$items = array();

while($row = mysql_fetch_array($result))

{

$items[] = $row['nome'];

}

$string = implode(',',$items);

echo $string;

}

?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por favor , utiliza a ferramenta geshi quando colocas código.

Seleccionas o código e escolhes a respectiva linguagem.

Já experimentas-te usar em vez de

req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; iso-8859-1");
req.setRequestHeader("CharSet", "iso-8859-1");

um utf8 como charset ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não olhei para o código, mas o problema que reportas (se percebi bem) é facilmente resolvido ao usares o htmlentities!

Assim o problema que tens com as comparações não baterem certo devido ao charset, deixa de existir, basta que ao guardares os dados (nomes) na bd, lhes faças um htmlentities antes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Gurzi, dsclpa la a maneira como coloquei o codigo. E tb ja meti utf8 e da a mesma coisa. É estranho pq ao ir buscar os concelhos da bem, mas as freguesias nao!!

Sld, htmlentities? isso é novo para mim :D tb nao ando nisto ha mt tempo. Vou pesquisar!! Ja digo algo.

Mas o problema não esta no gravar, mas sim no ler. E os dados k estou a ler sao de tabelas que nao sofrem alteraçoes... os concelhos e freguesias sao smp as mesmas.

Obrigado aos dois!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cá vai pergunta parva, mas tens o charset na base de dados dessa tabela correcto ??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

MySQL charset:  UTF-8 Unicode (utf8)

MySQL connection collation: utf8_unicode_ci

No MySQL a minha base de dados tem as tabelas com Collation: latin1_swedish_ci

Tou a fazer alguma coisa mal??? Mas não percebo... faço mais coisas com outras tabelas e tudo funciona, só este caso particular nao!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

diaszzz, vê este tópico e a solução que lá está... faz exactamente o que tu queres...

htmlentitles ? xD

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Mas o problema não esta no gravar, mas sim no ler. E os dados k estou a ler sao de tabelas que nao sofrem alteraçoes... os concelhos e freguesias sao smp as mesmas.

$name = "Vila nova de São João";
// Em vez de gravares na base de dados já!
$name = htmlentities($name)
// Gravas agora, depois de teres aplicado o htmlentities

Mais tarde quando fores comparar os valores, por causa das combos já não terás problemas com o charset desde que uses o htmlentities também.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja tentei com htmlentities e nao da!!!!!!! :S

tipo.. na base de dados estao bem escritas as freguesias, ao fazer uma pesquisa de noticias por freguesia o nome passado por GET realmente vem com um codigo tipo Beijós=%09Beij%26oacute%3Bs  O k eu fiz foi ao ir buscar a freguesia pelo GET fiz:

function unhtmlentities($string)

{

$trans_tbl = get_html_translation_table(HTML_ENTITIES);

$trans_tbl = array_flip($trans_tbl);

return strtr($string, $trans_tbl);

}

$freguesia = unhtmlentities($freguesia);

Assim em vez dakela barafunda de nome deveria ficar Beijós. e dps na query faço a comparaçao com o parametro da tabela k tem o nome e nao da nada!!!!!!!!! ja tou a ficar frustrado....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já experimentaste a fazer a busca sem o htmlentities? no caso do tópico que indiquei não usei e funciona perfeitamente com acentos e cedilhas...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja experimentei tudo!!! e nao da!!!

e ainda agora para ver se me safava, tirei os acentos aos nomes na base de dados... o k aconteceu??? nao funciona na mesma!!! LOLOLOL mas o k s passa aki?? isto é de doidos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

diazzz, zipa o dump da bd e manda para o meu mail para tentar umas coisitas por aqui...

ah, já te adicionei no msn...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem depois de muito tempo a matutar e da ajuda do marinheiro via messenger consegui ultrapassar o erro!!!

Primeiro para passar os dados correctamente tive de meter a base de dados em utf8, e no ficheiro onde corria o script para as freguesias colocar esta linha no inicio

<?php header("Content-Type: text/html;  charset=ISO-8859-1",true) ?>

. Assim os dados já apreciam bem e já conseguia adicionar freguesias com acentos à base de dados. Mas outro erro... a primeira freguesia nao dava pa inserir!!! dava erro, outro :mad: Bem a soluçao, k n é bem uma soluçao mas sim dar a volta por cima, foi inserir uma freguesia sem nome no inicio... assim os utilizadores nao irao escolher e se escolherem meto um erro a dizer tem de escolher uma freguesia!!

La consegui fazer isto, nao da melhor maneira mas escapa e da po gasto!!

Obrigado a todos pela ajuda!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

desculpa ter-te deixado agarrado novamente a meio da conversa mas a minha net hoje esteve terrivel... passei o dia num local com muito pouca rede devido a ser num vale e fiquei maior parte do tempo a ver navios... lá aproveitei para programar mais um bocado e testar mais umas cenas em javascript :) :) :D

mas ainda bem que já contornaste a situação ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora