Eae galera, tudo bem com vocês? Então, eu criei um banco de dados, para armazenar os dados que o usuário digita no formulário de contato de um site e estou com dois problemas e não sei como resolvê-los.
Bom eu criei o bando e a tabela no phpMyAdmin usando os seguintes comandos:
create database contato
default character set utf8
default collate utf8_general_ci;
create table formulario (
nome varchar(30) NOT NULL,
assunto enum('DÚVIDAS', 'RECLAMAÇÕES', 'SUGESTÕES', 'OUTROS') DEFAULT 'SUGESTÕES',
email varchar(30) NOT NULL,
telefone int(11),
mensagem varchar(500) NOT NULL
) default character = utf8;
Então os problemas são:
1 - Na linha telefone, não é armazenado a seguência númerica digitada no campo correspondente, só aparece uma sequência fixa por exeplo 23432432432 em toda a coluna telefone. Eu já alterei o tipo para smallInt, mediumInt, bigInt e continuou do mesmo jeito. Troquei o tipo para varchar e agora está funcionando decentemente, mas eu quero que na tabela telefone seja um tipo inteiro. Obs: estou digitando APENAS números no campo do formulário;
2 - Nos campos de texto, sempre que aparece acento ou cedilha por exemplo, o texto é interrompido. Assim, se digito a mensagem “EU QUERO MAÇÔ, aparece no banco “EU QUERO MA”, mas se digito “EU QUERO MACA”, (sem acento ou cedilha), aparece no banco “EU QUERO MACA”.
Alguém poderia me ajudar por favor, pois não tenho ideia de como resolver isto. Desde já agradeço a atenção e colaboração de todos. Um forte abraço.
Amigo sem ver o código que insere fica dificil
Mas telefone sendo inteiro, humm não. Use varchar. Vc não quer fazer matematica com isso. Se vc quiser valide antes de inserir se só contem numeros.
Algo me diz que tem algo no código forçando estas situações
Bom este é o código PHP para inserir dados no banco:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<title>Mensagem enviada</title>
<meta charset="utf-8"/>
<link rel="stylesheet" type="text/css" href="_estilos/css-reset.css"/>
<link rel="stylesheet" type="text/css" href="_estilos/estilo.css"/>
</head>
<body>
<div id="container">
<section id="conteudo">
<p>Sua mensagem foi enviada com sucesso. Clique <a href="index.html">aqui</a> para voltar para a página inicial.</p>
<?php
$nome = $_POST['campoNome'];
$assunto = $_POST['campoAssunto'];
$email = $_POST['campoEmail'];
$telefone = $_POST['campoTelefone'];
$msg = $_POST['campoMsg'];
$dbc = mysqli_connect('mysql.hostinger.com.br', 'contato', 'SENHA-SECRETA', 'RRmxTT') or die ('ERRO AO ESTABELECER CONEXÃO COM O BANCO DE DADOS');
$query = "INSERT INTO contato (nome, assunto, email, telefone, mensagem) VALUES ('$nome', '$assunto', '$email', '$telefone', '$msg')";
$result = mysqli_query($dbc, $query) or die ('Erro de comando');
mysqli_close($dbc);
?>
</section>
</div>
</body>
</html>
primeiro: não soca variaveis pra gerar sql. usa prepared statement
mysqli_prepare e mysqli_stmt_bind_param
aqui um exemplo bacanudo: http://markonphp.com/mysqli-select-prepared-statements/
segundo: mostra o form que recebe estes dados
O formulário é o seguinte:
<form method="post" action="contato.php" id="contato">
<fieldset>
<p><label for="nome">Nome completo: </label><input type="text" name="campoNome" id="nome" maxlength="40"/></p>
<p><label for="assunto">Assunto: </label><select name="campoAssunto" id="assunto">
<optgroup label="Escolha o assunto da mensagem">
<option value="DUVIDAS">Dúvidas</option>
<option value="RECLAMAÇOES">Reclamações</option>
<option value="SUGESTOES" selected>Sugestões</option>
<option value="OUTROS">Outros</option>
</optgroup>
</select></p>
<p><label for=email"">E-mail: </label><input type="email" name="campoEmail" id="email" maxlength="30"/></p>
<p><label for="telefone">Telefone: </label><input type="tel" name="campoTelefone" id="telefone" placeholder="Coloque o DDD e utilize apenas números" maxlength="11"/></p>
<p><label for="msg">Mensagem: </label><textarea name="campoMsg" id="msg" placeholder="Utilize até 500 caracteres" rows="5" maxlength="500"></textarea></p>
<p id="botao"><input type="submit" name="botaoEnviar" value="ENVIAR"/></p>
</fieldset>
</form>
tem algumas coisas estranhas
- vc declarou uma database ‘contato’, mas parece que vc quer conectar em outra coisa
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_database")
or die ("error " . mysqli_connect_errno());
- o tamanho do nome no formulario é 40 mas no banco é 30
de uma olhada nessas dicas aqui:
( ignore coisas pra xml como utf8_for_xml )
tente usar o set_charset
e experimente fazer uma coisa: inspecione com google chrome dev tools o request. seja se vc realmente manda o ç etc - e tente conectar manualmente no banco e veja se vc consegue adicionar o texto maçã, nome maçã, etc.
em algum canto vc tem algum problema estranho.
O variável $link é para conectar com o banco de dados que esta em um servidor, não é um banco de dados local, porque este site está hospedado.
mysqli_connect('mysql.hostinger.com.br', 'contato', 'SENHA-SECRETA', 'RRmxTT')
vejamos os parametros
host, usuario, senha, database.
$link pode ser $qqcoisa