Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erros de acentuação ao gravar dados através de query SQL no PHPMyAdmin

Pessoal,

Boa tarde,

Estou com um problema referente à acentuação de palavras em registros nas tabelas do banco.

O problema só ocorre quando rodo uma query para gravar um registro diretamente do SQL via PHPMyAdmin, como por exemplo o nome da categoria, quando estou gravando os outros dados como nome do produto e descrição através do PHP via formulário, não ocorre esse problema ao mostrar a informação na página de listagem de produtos.

Já tentei os "alter table" e "alter database" para mudar o CHARACTER SET deste modo:

ALTER DATABASE loja DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE produtos DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE categorias DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Já tentei o mesmo mudando para latin1_swedish_ci:

ALTER DATABASE loja CHARSET = Latin1 COLLATE = latin1_swedish_ci;
... mesma coisa pros ALTER TABLE...

Já apaguei e regravei os registros de nomes das categorias, mas mesmo assim continua com problema de acentuação ao mostrar as categorias nos radios na página do formulário de cadastro e após cadastro, ao mostrar o nome da categoria associada ao produto na página de listagem de produtos.

O engraçado é que no PHPMyAdmin ao gravar a informação via query SQL e buscar na tabela a acentuação está presente de forma correta mas quando a informação vai para a página o erro ocorre, já quando eu gravo via formulário com PHP acontece ao contrário, na página é mostrada corretamente mas na tabela quando consultada no PHPMyAdmin fica com problema de acentuação.

Não consegui me livrar desse problema, alguma sugestão?

Grato!

6 respostas

Antes de rodar suas queries no PHPMyAdmin, tenta rodar isso:

SET NAMES utf8

Isso vai fazer com que ele interprete suas queries com UTF-8.

Se funcionar dá um retorno aqui.

Carlos, grato pela resposta, porém não obtive sucesso, o erro persiste mesmo executando o SET NAMES antes da query para inserção de categorias na tabela. Segue meu código PHP responsável pelos acessos ao banco:

banco-produto.php

<?php

header('Content-Type: text/html; charset=utf-8');

mysql_query("SET NAMES utf8");

function insereProduto($conexao, $nome, $preco, $descricao, $categoria_id) {
    $query = "insert into produtos (nome, preco, descricao, categoria_id) values ('{$nome}', {$preco}, '{$descricao}', {$categoria_id})";
    return mysqli_query($conexao, $query);
}


function removeProduto($conexao, $id) {
    $query = "delete from produtos where id = {$id}";
    return mysqli_query($conexao, $query);
}


function listaProdutos($conexao) {

    $produtos = array();
    $resultado = mysqli_query($conexao, "select p.*,c.nome as categoria_nome from produtos as p join categorias as c on c.id=p.categoria_id");

    while($produto = mysqli_fetch_assoc($resultado)) {
        array_push($produtos, $produto);
    }
    return $produtos;

}
banco-categoria.php

<?php

header('Content-Type: text/html; charset=utf-8');



function listaCategorias($conexao) {

    mysql_query("SET NAMES utf8");
    $categorias = array();
    $resultado = mysqli_query($conexao, "select * from categorias");

    while($categoria = mysqli_fetch_assoc($resultado)) {
        array_push($categorias, $categoria);
    }
    return $categorias;

}

Pesquisei pela internet, vi um caso que tiveram o mesmo problema e a solução foi reinstalar o XAMPP...

Creio que se fizesse a adição das categorias via form e PHP não teria esse problema, mas não deveria ser dessa forma...

Acabei implementando a lógica para adição de categoria via formulário, pelo menos foi um paliativo para o problema com a acentuação... Mas ainda quero descobrir como resolver o problema de adição de registro através de querys via PHPMyAdmin.

solução!

Salve, Luiz!

Estou fazendo o curso agora e também tive esse problema.

Basicamente, criei um arquivo chamado "conecta.php", como o da aula 4, e deixei-o assim:

<?php

$conexao = mysqli_connect("localhost", "root", "", "loja");
mysqli_set_charset($conexao, "utf8");

Obs: O segredo está nesse mysqli_set_charset.

Se o erro continuar, defina o charset das suas páginas como UTF-8 e recrie o banco "loja" com o collation "utf8_general_ci".

Abraço!

Opa, legal Rafael, obrigado por compartilhar!

Vou tentar desse modo e retorno com o resultado.

Abraços!

Olá Rafael, funcionou, só colocando o código

mysqli_set_charset($conexao, "utf8");

Obrigado pela ajuda!

Abraço!