Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

tmwh

[Resolvido] Formulario em flash e php

Mensagens Recomendadas

tmwh

Boa noite a todos. Estou com um problema que passo a explicar:

  1. Tenho um formulário feito em flash
  2. Envio os dados por POST para o script PHP
  3. O PHP insere os dados em BD.
  4. Os dados surgem corrompidos na BD por problemas de acentuação.

O problema não está no PHP pois se em vez de usar a variável recebida do formulário:

$nome=ucwords(strtolower($_POST['nome']));

usar uma definida no PHP:

$nome="mário";

aparece correcto na BD.

O problema estará por isso no envio do flash para php.

Cumps..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
MoshMage

utiliza o utf8_encode($nome) e utf8_decode($nome).

Boas Nuno. Desde já obrigado pela resposta.

Utilizo utf8_encode($nome) dentro do flash e utf8_decode($nome) no php?

Não. Fazes o utf8_encode($nome) antes de enviar para a base-de-dados e o utf8_decode() quando puxas os dados da base-de-dados

Editado por MoshMage

If all Else fails, use Else If;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Não. Fazes o utf8_encode($nome) antes de enviar para a base-de-dados e o utf8_decode() quando puxas os dados da base-de-dados

Subscrevo.


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tmwh

Boas. Testei várias situações e continua a não dar.

Resumindo: esquecendo a parte do formulário em flash e tendo como ponto de partida html, php e mysql: para que consiga introduzir através do inserir.php a variável $nome = "anda lá" correctamente na BD, tenho de ter a BD, tabela e campo com a codificação utf8_general_ci e o index.html, inserir.php e ligacao.php com Europeu Ocidental (charset=iso-8859-1). Esta é a única forma de a variável ser correctamente guardada na BD.

Voltando ao formulário em flash, pelo que andei a ler, o flash já faz a codificação em utf8 a menos que seja indicado para não o fazer.

Considerando que introduzo no formulário "anda lá", se no inserir.php fizer:

  1. $nomeflash=ucwords(strtolower($_POST['nome'])); $nome=utf8_encode($nomeflash); surge na BD "Anda Lã¡".
  2. $nomeflash=ucwords(strtolower($_POST['nome'])); $nome=utf8_decode($nomeflash); surge na BD "Anda L?".
  3. $nome=ucwords(strtolower($_POST['nome'])); surge na BD "Anda Lã¡".

Penso que o problema estará no modo em como estão a ser enviadas as variáveis do flash para o php.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
acao

boas

fala um leigo na materia, mas se fizer um print_r antes de enviar os dados para a base dados já vê se os dados chegam bem.

cumps

acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tmwh

De qual ficheiro? Penso que indiquei tudo no meu comentário anterior mas volto a referir: O index.html, inserir.php e ligacao.php estão em Europeu Ocidental (charset=iso-8859-1). O index.html tem a chamada do inserir.php. Está tudo nesta codificação pois é a unica forma de funcionar a 100%, ou seja, os dados serem correctamente introduzidos na BD. Se aplicar um formulario feito em php e chamando pelo html tudo funciona na perfeição. Por isso penso que o problema reside no envio do flash para php.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
MoshMage

De qual ficheiro? Penso que indiquei tudo no meu comentário anterior mas volto a referir: O index.html, inserir.php e ligacao.php estão em Europeu Ocidental (charset=iso-8859-1). O index.html tem a chamada do inserir.php. Está tudo nesta codificação pois é a unica forma de funcionar a 100%, ou seja, os dados serem correctamente introduzidos na BD. Se aplicar um formulario feito em php e chamando pelo html tudo funciona na perfeição. Por isso penso que o problema reside no envio do flash para php.

Faz um double-check na base-de-dado e ve se os campos para onde estás a enviar o texto estão em ISO8 ou se estão para outra lingua qualer.

Editado por MoshMage

If all Else fails, use Else If;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

@tmwh

Com ou sem BOM?

Já agora, usa UTF-8 sem BOM. É o mais testado e sabe-se que funciona. Nota que isto não significa que o que usas não serve.

Boas MoshMage. Também já tinha referido que a Base de Dados, tabela, e os campos estão em utf8_general_ci.

E sempre estiveram dessa maneira?

E a ligação? É tb em utf-8?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tmwh

@tmwh

Com ou sem BOM?

Já agora, usa UTF-8 sem BOM. É o mais testado e sabe-se que funciona. Nota que isto não significa que o que usas não serve.

E sempre estiveram dessa maneira?

E a ligação? É tb em utf-8?

Com ou sem BOM??? agora estou perdido

Andei a pesquisar na BD do servidor online e existe uma mistura de codificações. Deve ser por isso que está a dar o berro.

6y5d.jpg

Como mudo isto tudo para utf8?

Editado por tmwh

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

http://en.wikipedia.org/wiki/Byte_order_mark

Qual é a driver que usas para comunicar com a DB? (Se n sabes, indica a função/Objecto que usas)

Editado por brunoais

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tmwh

Boas. Tenho um script ligacaotabela.php codificado em utf8 com o seguinte código:

<?php
$hostname_ligacaotabela = "localhost";
$database_ligacaotabela = "registo";
$username_ligacaotabela = "root";
$password_ligacaotabela = "pass";
$ligacaotabela = mysql_pconnect($hostname_ligacaotabela, $username_ligacaotabela, $password_ligacaotabela) or trigger_error(mysql_error(),E_USER_ERROR);
?>

Para inserir na BD tenho um script inserir.php codificado em utf8 que recebe os dados do formulário em flash:

<?php require_once('Connections/ligacaotabela.php'); ?>

<?php

$nome=ucwords(strtolower($_POST['nome']));

$sql = "INSERT INTO `registo`.`tabela` ( nome ) VALUES ( '$nome' )";

$sql = mysql_query($sql);

//Aqui tenho uma função para enviar email para quem preencheu o formulário, que envia os dados introduzidos (nome) e está a enviar correctamente os dados, logo eles chegam correctos quando enviados do flash.
Se for introduzido "joão" surge "João" no email, mas na BD aparece "João". O problema estará na introdução na BD.

?>

Editado por brunoais
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tmwh

Boas a todos. Consegui resolver o problema.

Tinha a ver com a ligação à BD, pois pelo que percebi quando nada se indica, o mysql entende que o cliente vai realizar a ligação pelo charset de defeito "latin1".

"The MySQL client programs mysql, mysqladmin, mysqlcheck, mysqlimport, and mysqlshow determine the default character set to use as follows:

  • In the absence of other information, the programs use the compiled-in default character set, usually latin1."

Fonte: http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

Para resolver isto temos de indicar qual o charset e codificação que vamos utilizar na ligação à BD.

<?php
# Informa qual o conjunto de caracteres será usado.
header('Content-Type: text/html; charset=utf-8');

$hostname_ligacaotabela = "localhost";
$database_ligacaotabela = "registo";
$username_ligacaotabela = "root";
$password_ligacaotabela = "pass";
$ligacaotabela = mysql_pconnect($hostname_ligacaotabela, $username_ligacaotabela, $password_ligacaotabela) or trigger_error(mysql_error(),E_USER_ERROR);

# Informa o charset a utilizar na ligação.
mysql_query("SET NAMES 'utf8'");
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8');
?>

Não nos devemos esquecer de ter a BD, tabelas e campos codificados também em utf8.

O mesmo se aplica para os scripts html e php utilizados.

Apesar de estar a funcionar no servidor online, o mesmo não acontece no servidor local xammp, mas deve ser uma questão simples de resolver.

Mais uma vez obrigado a todos.

Editado por tmwh

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.