2
I have a problem saving words with accents in MYSQL.
My bank is all set in ut8_unicode_ci
and on my php pages <meta charset="utf-8">
.
This solved my initial problem with accents, but I wanted the data to be saved in the database only with the first letter of each uppercase word.
I found the function ucwords()
that solved my problem, the system user could type the whole customer name in high box that the system saved the way I wanted in the bank.
The problem is that if there are accents in the name it saves only the last letter before the accent. Ex: If the name is João da silva it saves only Jo. I would like some help with this because I have been researching for some time and I still can’t solve it. Below is an excerpt of the code:
function InsereMensalista()
{
//TRAS AS VARIÁVEIS PARA O ESCOPO DA FUNÇÃO.
global $conn, $nome, $email, $cpf, $rg, $tel, $celular, $celular2, $estado, $endereco, $bairro, $cidade, $placa1, $modelo1, $placa2, $modelo2, $mensalidade;
//MUDA AS VARIÁVEIS PARA MINÚSCULO.
$nome = strtolower($nome);
$endereco = strtolower($endereco);
$bairro = strtolower($bairro);
$cidade = strtolower($cidade);
$modelo1 = strtolower($modelo1);
$modelo2 = strtolower($modelo2);
// MUDA AS VARIÁVEIS COLOCANDO A PRIMEIRA LETRA DE CADA PALAVRA EM MAIÚsCULO ANTES DE INSERIR NO BANCO DE DADOS.
$nome = ucwords($nome);
$endereco = ucwords($endereco);
$bairro = ucwords($bairro);
$cidade = ucwords($cidade);
$modelo1 = ucwords($modelo1);
$modelo2 = ucwords($modelo2);
//QUERY PARA INSERIR DADOS DIGITADOS NO FORMULÁRIO NO BANCO DE DADOS.
$sql = "INSERT INTO mensalistas (id, nome, email, cpf, rg, telefone, celular, celular2, endereco, bairro, cidade, estado, placa1, modelo1, placa2, modelo2, mensalidade)
VALUES ('','$nome','$email','$cpf','$rg','$tel','$celular','$celular2','$endereco','$bairro','$cidade','$estado','$placa1','$modelo1','$placa2','$modelo2','$mensalidade')";
//TENTA INSERIR OS DADOS NO BANCO DE DADOS.
if($result = $conn->query($sql))
{
//EXIBE UM AVISO DE QUE O CADASTRO FOI EFETUADO COM SUCESSO.
echo "<script type='text/javascript'>
alert('Cadastro efetuado com sucesso!');
location.href='cadastro_mensalista.php';
</script> ";
}
else
{
//EXIBE UM AVISO DE QUE O USUÁRIO TENTOU INSERIR DADOS JÁ REGISTRADOS NO BANCO DE DADOS.
echo "<script type='text/javascript'>
alert('Você tentou inserir dados já cadastrados. Verifique os dados do cliente e tente novamente!');
location.href='javascript:window.history.go(-1)';
</script> ";
}
}
Have you tried the
mysqli_real_escape_string
?– Edilson
The problem is with ucwords I believe. What the
mysqli_real_escape_string
influence?– gmsantos
@Weverton, by my tests and very likely that is not the ucwords that cause your problem, see the test: https://ideone.com/XfjzKQ you already tried to print part of your code to see where the information is lost ?
– Gabriel Rodrigues
So I’m testing here I realized that the problem is in strtolower(). Only with the ucwords he recorded normal, I entered the data: "John, John, John, John, John, John" and he recorded in mysql this: John, John, John, John, John, John, John" Or put the first letter capitalized correctly, the problem is that I did not want him to save the whole name in high box. If the user type "JOÃO" he would have to save "João", for that I used strtolower(), and then he saves only "Jo".
– Weverton Júnior
Take a look at this api as well: https://market.mashape.com/semantics/accentwords
– Samur Araújo