Limpar formulário após submit não funciona.
Boa tarde, tinha meu site em um host grátis, para testar, dai comprei um host no hostgator, coloquei meu site la, mas agora apos dar submit no formulário, ele não esta mais limpando os campos, nem mostrando a resposta se foi enviado com sucesso ou não. Acredito que esteja tudo certo com meu código, mas podem dar uma olhada pra mim por favor.
<?php
header('Content-type: text/html; charset=UTF-8');
if (isset($_POST)):
$para = "contato@volcanodigital.com.br";
$assunto = "Contato pelo Site";
$nome = (isset($_POST['nome']))? $_POST['nome']: '';
$email = (isset($_POST['email']))? $_POST['email']: '';
$telefone = (isset($_POST['telefone']))? $_POST['telefone']: '';
$msg = (isset($_POST['mensagem']))? $_POST['mensagem']: '';
// Valida se foram preenchidos todos os campos
if (empty($nome) || empty($email) || empty($telefone) || empty($msg)):
$array = array('tipo' => 'alert alert-danger', 'mensagem' => 'Preencher todo os campos obrigatórios(*)!');
echo json_encode($array);
else:
// Monta a mensagem do email
$mensagem = "<strong> Mensagem de Contato </strong><br><br>\n";
$mensagem .= "<br><strong>Nome: </strong>".$nome."\n";
$mensagem .= "<br><strong>Email: </strong>".$email."\n";
$mensagem .= "<br><strong>Tel: </strong>".$telefone."\n";
$mensagem .= "<br><strong>Mensagem: </strong>".$msg."\n";
// Envia o e-mail e captura o retorno
$retorno = EnviaEmail($para, $assunto, $mensagem);
// Conforme o retorno da função exibe a mensagem para o usuário
if ($retorno):
$array = array('tipo' => 'alert alert-success', 'mensagem' => 'Sua mensagem foi enviada com sucesso!');
echo json_encode($array);
else:
$array = array('tipo' => 'alert alert-danger', 'mensagem' => 'Infelizmente houve um erro ao enviar sua mensagem!');
echo json_encode($array);
endif;
endif;
endif;
// Função para envio de e-mail usando a função nativa do PHP mail()
function EnviaEmail($para, $assunto, $mensagem){
$headers = "Content-Type:text/html; charset=UTF-8/n";
$headers .= "From: $email Reply-to: $email/n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "X-Priority: 3\n";
$retorno = mail($para, $assunto, $mensagem, $headers);
return $retorno;
}<script>
$(document).ready(function () {
$('#contato').submit(function() {
var dados = $('#contato').serialize();
$.ajax({
type : 'POST',
url : 'envia_email.php',
data : dados,
dataType: 'json',
success : function(response){
$('#contato')[0].reset();
$('#resultado').css('display', 'block')
.removeClass()
.addClass(response.tipo)
.html('')
.html('<p>' + response.mensagem + '</p>');
}
});
return false;
});
});
</script>
<form id="contato" method="post" action="envia_email.php">
<ul>
<li class="first">
<a id="icone_nome" class="icones_contato"></a>
<input type="text" name="nome" class="text" placeholder="Nome" required>
<div class="clear"></div>
</li>
<li class="first">
<a id="icone_email" class="icones_contato"></a>
<input type="email" name="email" class="text" placeholder="email@example.com" required>
<div class="clear"></div>
</li>
<li class="first">
<a id="icone_telefone" class="icones_contato"></a>
<input type="tel" name="telefone" class="text" placeholder="45 1234-5678" required pattern="^\d\d\d$">
<div class="clear"></div>
</li>
<li class="second">
<a id="icone_mensagem" class="icones_contato"></a>
<textarea placeholder="Mensagem" name="mensagem" id="caixa_mensagem" required></textarea>
<div class="clear"></div>
</li>
</ul>
<input type="submit" value="Enviar" id="botao_enviar">
<div class="clear"></div>
<div id="resultado">
</div>
</form>Dalton Fuentes
Curtidas 0
Melhor post
William
23/06/2016
Dalton essa sua validação do telefone em HTML5 está matando os usuário de raiva rsrsrs ... tive que editar HTML no navegador e tirar ela para poder testar.
Veja na imagem do inspecionar elemento testando no Hostgator a quantidade Warnings:
http://pt-br.tinypic.com/r/311xrtw/9
Coloque essa linha no topo do seu script PHP que envia o e-mail:
Veja na imagem do inspecionar elemento testando no Hostgator a quantidade Warnings:
http://pt-br.tinypic.com/r/311xrtw/9
Coloque essa linha no topo do seu script PHP que envia o e-mail:
date_default_timezone_set("Brazil/East");
GOSTEI 1
Mais Respostas
Carlos Ramos
20/06/2016
Tem erro na linha 46 e ainda acho que para este efeito será preciso de um jquery para ajudar.
GOSTEI 0
William
20/06/2016
Inspecione seu código no Navegador, 99% desses problemas estão no script PHP onde sempre que ocorre um erro não envia a resposta para a função callback 'success'!
http://www.devwilliam.com.br/jquery/aprenda-como-debugar-ajax-sem-plugin
http://www.devwilliam.com.br/jquery/aprenda-como-debugar-ajax-sem-plugin
GOSTEI 0
Dalton Fuentes
20/06/2016
William, me aparece essa mensagem:
Warning: Cannot modify header information - headers already sent by (output started at /home/volca246/public_html/envia_email.php:1) in /home/volca246/public_html/envia_email.php on line 2
{"tipo":"alert alert-success","mensagem":"Sua mensagem foi enviada com sucesso!"}
Desculpe-me, mas não sei muito de PHP suficiente ainda pra solucionar isso sozinho! Pode me ajudar por favor ?
Warning: Cannot modify header information - headers already sent by (output started at /home/volca246/public_html/envia_email.php:1) in /home/volca246/public_html/envia_email.php on line 2
{"tipo":"alert alert-success","mensagem":"Sua mensagem foi enviada com sucesso!"}
Desculpe-me, mas não sei muito de PHP suficiente ainda pra solucionar isso sozinho! Pode me ajudar por favor ?
GOSTEI 0
William
20/06/2016
Seu problema aparente ser com codificação do script PHP, veja nesse link como corrigir:
http://rubsphp.blogspot.com.br/2011/07/problemas-com-charset-nunca-mais.html
http://rubsphp.blogspot.com.br/2011/07/problemas-com-charset-nunca-mais.html
GOSTEI 0
Dalton Fuentes
20/06/2016
William, é o seguinte. Antes quando eu estava montando o site, quando você me ajudou no meu outro post, sobre enviar formulário e tudo mais, eu estava usando um servidor gratuito da HOSTINGER, e agora estou usando um pago da HOSTGATOR.
Fiz um teste agora, peguei de novo um servidor grátis da HOSTINGER, e coloquei o mesmo site igualzinho que esta no HOSTGATOR. Enviei um e-mail pelo servidor grátis e deu tudo certo, apareceu o aviso de mensagem enviada com sucesso e o formulário foi resetado, tanto que apareceu essa mensagem agora :
{tipo: "alert alert-success", mensagem: "Sua mensagem foi enviada com sucesso!"}
mensagem
:
"Sua mensagem foi enviada com sucesso!"
tipo
:
"alert alert-success"
Dai fui enviar pelo site que esta hospedado no HOSTGATOR, e de novo da o mesmo erro e não faz essas duas funções ! Ele envia o e-mail certinho, só não reseta e nem mostra o aviso de mensagem enviada.
Não sei se tem algo a ver, mas dentro da minha pasta public_html, onde eu coloco o site, tem um arquivo chamado (error_log) que sempre fica la.
Não sei mais oque pode ser. Fiz tudo que seu ultimo link dizia!
Fiz um teste agora, peguei de novo um servidor grátis da HOSTINGER, e coloquei o mesmo site igualzinho que esta no HOSTGATOR. Enviei um e-mail pelo servidor grátis e deu tudo certo, apareceu o aviso de mensagem enviada com sucesso e o formulário foi resetado, tanto que apareceu essa mensagem agora :
{tipo: "alert alert-success", mensagem: "Sua mensagem foi enviada com sucesso!"}
mensagem
:
"Sua mensagem foi enviada com sucesso!"
tipo
:
"alert alert-success"
Dai fui enviar pelo site que esta hospedado no HOSTGATOR, e de novo da o mesmo erro e não faz essas duas funções ! Ele envia o e-mail certinho, só não reseta e nem mostra o aviso de mensagem enviada.
Não sei se tem algo a ver, mas dentro da minha pasta public_html, onde eu coloco o site, tem um arquivo chamado (error_log) que sempre fica la.
Não sei mais oque pode ser. Fiz tudo que seu ultimo link dizia!
GOSTEI 0
Dalton Fuentes
20/06/2016
William, entrei em contato com o suporte do HOSTGATOR, e me disseram isso:
- dalton, seu formulário o botão enviar não esta funcionando...
- vc clica e ele não redireciona
- o botão não tem função ali
- tens que ver na tua programação
- pq ele não esta ativo
Este é meu form:
- dalton, seu formulário o botão enviar não esta funcionando...
- vc clica e ele não redireciona
- o botão não tem função ali
- tens que ver na tua programação
- pq ele não esta ativo
Este é meu form:
<form id="contato" method="post" action="envia_email.php">
<ul>
<li class="first">
<a id="icone_nome" class="icones_contato"></a>
<input type="text" name="nome" class="text" placeholder="Nome" required>
<div class="clear"></div>
</li>
<li class="first">
<a id="icone_email" class="icones_contato"></a>
<input type="email" name="email" class="text" placeholder="email@example.com" required>
<div class="clear"></div>
</li>
<li class="first">
<a id="icone_telefone" class="icones_contato"></a>
<input type="tel" name="telefone" class="text" placeholder="45 1234-5678" required pattern="^\d\d\d$">
<div class="clear"></div>
</li>
<li class="second">
<a id="icone_mensagem" class="icones_contato"></a>
<textarea placeholder="Mensagem" name="mensagem" id="caixa_mensagem" required></textarea>
<div class="clear"></div>
</li>
</ul>
<input type="submit" value="Enviar" name="enviar" id="botao_enviar">
<div class="clear"></div>
</form>
<div id="resultado">
</div>
GOSTEI 0
William
20/06/2016
Sendo assim é problema com jQuery, você está requisitando o arquivo na página?
GOSTEI 0
Dalton Fuentes
20/06/2016
Sim, da uma olhada:
Ta assim e ainda n vai !
Mas William, eu n intendo o pq no host gratis ele funciona, e no HostGator não.
<head>
<meta charset="utf-8">
<title>Teste</title>
<meta name="google-site-verification" content="1FWAcGm7Fa5u-yQJn6PHAYRxaUVi0HcqIDpLWeqsq8g" />
<link rel="shortcut icon" href="_imagens/favicon.png" type="image/x-icon">
<link rel="icon" href="_imagens/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="_css/index.css">
<link rel="stylesheet" type="text/css" href="_css/formulario_contato.css">
<script type="text/jscript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/jscript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/jscript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript" src="_js/script.js"></script>
<script>
$(document).ready(function () {
$('#contato').submit(function() {
var dados = $('#contato').serialize();
$.ajax({
type : 'POST',
url : 'envia_email.php',
data : dados,
dataType: 'json',
success : function(response){
$("#contato")[0].reset();
$('#resultado').css('display', 'block')
.removeClass()
.addClass(response.tipo)
.html('')
.html('<p>' + response.mensagem + '</p>');
}
});
return false;
});
});
</script>
<link href="https://fonts.googleapis.com/css?family=Roboto:400,300,500,700,900,100" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700,800" rel="stylesheet" type="text/css">
<link href="http://fonts.googleapis.com/css?family=Lato&subset=latin,latin-ext" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Raleway:100,200,300,400,500,600" rel="stylesheet" type="text/css">
<style type="text/css">
</style>
<script type="text/javascript">
$(document).ready(function() {
function filterPath(string) {
return string
.replace(/^\//,'')
.replace(/(index|default).[a-zA-Z]{3,4}$/,'')
.replace(/\/$/,'');
}
$('a[href*=#]').each(function() {
if ( filterPath(location.pathname) == filterPath(this.pathname)
&& location.hostname == this.hostname
&& this.hash.replace(/#/,'') ) {
var $targetId = $(this.hash), $targetAnchor = $('[name=' + this.hash.slice(1) +']');
var $target = $targetId.length ? $targetId : $targetAnchor.length ? $targetAnchor : false;
if ($target) {
var targetOffset = $target.offset().top - 85;
$(this).click(function() {
$('html, body').animate({scrollTop: targetOffset}, 1000);
return false;
});
}
}
});
});
// ]]></script>
</head>
Ta assim e ainda n vai !
Mas William, eu n intendo o pq no host gratis ele funciona, e no HostGator não.
GOSTEI 0
William
20/06/2016
Cara que confusão é essa, tem 3 versões do jQuery sendo carregada?
GOSTEI 0
Dalton Fuentes
20/06/2016
Eita, tava testando uma por uma, pq uma amigo disse que tinha umas versões que estavam com uns bugs, estou só com a primeira:
<script type="text/jscript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
Deve ter escapado nos Ctrl+c Ctrl+v que estava dando quando trocava elas, mas enfim, esta com uma só e nao funciona !
<script type="text/jscript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
Deve ter escapado nos Ctrl+c Ctrl+v que estava dando quando trocava elas, mas enfim, esta com uma só e nao funciona !
GOSTEI 0
William
20/06/2016
Tem alguma url para eu testar esse formulário?
GOSTEI 0
Dalton Fuentes
20/06/2016
HOSTGATOR: http://teste.volcanodigital.com.br/
HOSTINGER: http://volcanodigital.esy.es/
HOSTINGER: http://volcanodigital.esy.es/
GOSTEI 0
Dalton Fuentes
20/06/2016
Ja mudei William
[url]http://pt-br.tinypic.com/r/2unze5h/9[/url]
Da uma olhada porfavor.
[url]http://pt-br.tinypic.com/r/2unze5h/9[/url]
Da uma olhada porfavor.
GOSTEI 0
William
20/06/2016
Mesmo colocando esse código no topo do script PHP que envia o e-mail, contínua o problema no hostgator?
date_default_timezone_set("Brazil/East");
GOSTEI 0
Dalton Fuentes
20/06/2016
Sim, continua !
Warning: Cannot modify header information - headers already sent by (output started at /home/volca246/public_html/teste/envia_email.php:1) in /home/volca246/public_html/teste/envia_email.php on line 4
{"tipo":"alert alert-success","mensagem":"Sua mensagem foi enviada com sucesso!"}
Warning: Cannot modify header information - headers already sent by (output started at /home/volca246/public_html/teste/envia_email.php:1) in /home/volca246/public_html/teste/envia_email.php on line 4
{"tipo":"alert alert-success","mensagem":"Sua mensagem foi enviada com sucesso!"}
GOSTEI 0
Dalton Fuentes
20/06/2016
Oi William, consegui solucionar. Fiz novamente o PHP que enviar o e-mail de acordo com este link seu
[url]http://www.devwilliam.com.br/php/formulario-de-contato-com-ajax-php-mysql[/url]
Coloquei o
Arrumei isso:
Obrigado novamente pela atenção William!
[url]http://www.devwilliam.com.br/php/formulario-de-contato-com-ajax-php-mysql[/url]
Coloquei o
date_default_timezone_set("Brazil/East");Arrumei isso:
Espaços em branco antes da <?php ou depois da ?>
UTF-8 Byte Order Mark (BOM)
e deu certo. Provavelmente era alguma coisa pequena que estava atrapalhando depois de tudo que fizemos.UTF-8 Byte Order Mark (BOM)
Obrigado novamente pela atenção William!
GOSTEI 0