Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alexandre Bandeira

Problemas com pontuação php, MySql, jQuery

Recommended Posts

Bom dia pessoal, estou com um problema intrigante, na página antes de salvar no db mostra a pontuação sem problemas, mas ao salvar já mostra no db MySql falha na pontuação, ou seja, no bando as palavras com acentuação são mostradas diferentes, com caracteres estranhos no lugar das letras acentuadas.

Os campos no db que estão recebendo string estão como "utf8_general_ci"

// pgcadastro.php

<meta http-equiv="content-type" content="text/html" charset="UTF-8"/>

// obs: da página de cadastro chamo a função cadastro:

// cadastro.js ----------------------------------------------------------------------------

function cadastrar()
{
$.post('require/jp/jpcadastro.php',
{
vnome:$('#nome').val(),
gene:$('#gene').val(),
dtnasc:$('#dtnasc').val()
},function(res)
{
var msg=$('.msg-cad'),
formAli=$('main form *');
if(res)
{
msg.slideDown().html(res).css({background:'#ff3131'});
}
else
{
msg.slideDown().html('Cadastro realizado com sucesso!').css({background:'#26bf06'});
//setTimeout(function(){msg.slideUp();},5000);
formAli.val('');
setTimeout(function(){location.href='/cad-log';},5000);
}
});
}
// jpcadastro.php ----------------------------------------------------------------------------------------
$crud->insert('associados_geral',
'dtsistdt=?,
dtnascidt=?,
nome=?,genepess=?,dtnascistr=?',
array(
date('Y/m/d'),
implode('-', array_reverse(explode('/', $dtnasc))),
$filterIn->vEntrUsua($vnome),$gene,$dtnasc,
));
// Obs: reduzi o código para caber e dar a idéia de como está estruturado o insert.
Como faço para resolver o problema de caracteres com acento?
De ante mão já agradeço a todos que puderem me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você consegue resolver também adicionando o código abaixo logo após o código de conexão com o banco.

   //Resolvendo problema de caracteres na tabela com consulta mysql
    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');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia pessoal, saidmrn e faguinho;

Grato pela atenção, mas sou novo em php, n verdade é a minha primeira aplicação no porte de conexção dom o db.

// usei assi:

<?php
//constantes
define("HOST", "localhost");
define('USUARIO','Admin');
define('SENHA','admin');
define('DB','atcpe');
//$dns='mysql:host=localhost;dbname=atcpe'
abstract Class ConDB
/* */
{
private $cnx;
private function setConn()
{
//$dns="mysql:host=" .HOST. ";dbname=" .DB;
return
is_null($this->cnx)?
$this->cnx=new PDO('mysql:host='.HOST.';dbname='.DB,USUARIO,SENHA):
$this->cnx;
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');
}
public function getConn()
{
return $this->setConn();
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');
}
}
// mesmo colocando nos apóis o SET e o GET, está indo para o db sem reconhecer o caracter acentuado.
Até mesmo quando dou um var_dump para visualizar os dados retorna sem reconhecer os acentos.
foreach($sel as $reg)
{
var_dump($reg);
Minha dúvida é: onde colocar os comando que vcs me repassaram?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde pessoal:

Vlw pelas dicas, fiz como vcs sugeriram e continuou o problema, no entanto percebi que tinha sido apenas com um campo, o de nome, quando fiz uma analise detalhada percebi que o problema esta em um recurso que eu tinha colocado para verificar se o digitado é válido. Com isso ao retornar o registro ele não ficava legível pelo que já tinha sido salvo. removi o recurso e agora grava no db de forma que no retorno fique legível. No entanto no DB continua sendo gravado de forma estranha. No DB as palavras acentuadas são visualizadas com caracteres estranhos, Mais acho que deve ser normal. estou usando MySql com Wamp e para criar e visualizar os dados phpMyAdmin. Bom, deve ser normal, uma vez que no retorno fica tudo bem. Não sei. se eu achar mais alguma coisa para retificar isso postarei.

Grato a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique qual a codificação dos arquivos se estão em utf-8. Você pode verificar isso no notepad++. Inclusive os js.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é Gabriel, está funcionando tudo certinho. Apenas no DB MySql está sendo armazenado com caracteres estranho. No entanto, ao ser chamado as informações para a página a grafia volta ao normal. Apenas ao visualizar os dados armazenados do DB pelo phpMyAdmin aparecem as palavras acentuadas de forma estranha. mas é possível fazer query e restaura perfeitamente. Talvez seja normal, não sei?

Como está funcionando abri mão.

Tanto as paginas bem como os campos do DB estão configurados para UTF-8.

No DB em vez de aparecer:

Marcionilla Mendes de Guimarães Netos / Carmém do Rosário da Conceição Melo Silva

aparece no db:

Marcionilla Mendes de Guimarães Netos / Carmém do Rosário da Conceição Melo Silva

Mas se escrever direto no db fica normal, apenas quando salvo via sistema fica assim.

Grato pela atenção.

Grato pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas no DB MySql está sendo armazenado com caracteres estranho. No entanto, ao ser chamado as informações para a página a grafia volta ao normal.

Não... Não é normal.

O padrão que está salvo no banco é ANSI ou (ISO-8859-1).

Provavelmente em algum ponto da sua aplicação está ocorrendo essa falha.

Tanto Banco quanto Aplicação precisam estar normais.

Se eu fosse você, refaria os seguistes passos:

--------------

No pgcadastro.php, confirme se o charset está presente no Header (abra o fonte da pagina formada pelo PHP)

Outra opção é forçar no Header do seu disparo o charset, veja o exemplo:
$.ajax({
  url:url,
  type:"POST",
  data:data,
  contentType:"application/json; charset=utf-8",
  dataType:"json",
  success: function(){
    ...
  }
});
Já no 'jpcadastro.php'
Adicione isso: logo após a abertura da tag php
<?php
header('Content-Type: text/html; charset=utf-8');
//....

E por ultilo:

Reparei que você utiliza o PhpMyAdmin.
Na aba 'Operações' confirme se está setado como utf-8 (antes de qualquer alteração faça o BK....)
Na aba 'Estruturas confirme o charset da tabela'
Agora clique em uma tabela e confirme o charset em 'Agrupamento'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Blz Gabriel, fui verificar conforme o que você tinha me repassado e de fato estava com erro, mas era no arquivo de ativar o db.

Estava assim:

    is_null($this->cnx)?
	$this->cnx=new PDO('mysql:host=localhost;dbname=dbcadclie',USUARIO,SENHA):
	$this->cnx;

bom, inclui o "charset=utf8"

private function setConn(){
    is_null($this->cnx)?
	$this->cnx=new PDO('mysql:host=localhost;dbname=dbcadclie;charset=utf8',USUARIO,SENHA):
	$this->cnx;
...}

Agora sim está salvando corretamente no DB. Obg Gabriel, grande abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.