Jump to content
tmwh

[Resolvido] Formulario em flash e php

Recommended Posts

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

Share this post


Link to post
Share on other sites
NunoDinis

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


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

ndsotware.org

Share this post


Link to post
Share on other sites
tmwh

Boas Nuno. Desde já obrigado pela resposta.

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

Share this post


Link to post
Share on other 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

Edited by MoshMage

If all Else fails, use Else If;

Share this post


Link to post
Share on other sites
tmwh

Boas MoshMage. Vou tentar e depois digo qual o resultado.

Edited by tmwh

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
NunoDinis

Qual é a codificação do teu ficheiro ?


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

ndsotware.org

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Edited by MoshMage

If all Else fails, use Else If;

Share this post


Link to post
Share on other sites
tmwh

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

Cumps.

Share this post


Link to post
Share on other 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%.

Share this post


Link to post
Share on other 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?

Edited by tmwh

Share this post


Link to post
Share on other 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)

Edited by 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%.

Share this post


Link to post
Share on other 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.

?>

Edited by brunoais
geshi

Share this post


Link to post
Share on other 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.

Edited by tmwh

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.