Ir para conteúdo

POWERED BY:

Arquivado

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

Pentagram666

Formulário de contato sem refresh via jquery

Recommended Posts

Ae pessoal.

Estou tentando fazer um formulário simples de contato, mas ele deve mandar sem dar reload na página, então pesquisando na web achei vários exemplos em jquery, muito parecidos uns dos outros.

Acabou que o que eu precisava só encontrei funcionando 100% em um exemplo que era pra salvar os dados de contato do cliente num db, então modifiquei para no php em vez de mandar pro server fiz um php de envio de emails, mas apesar de não dar refresh na pagina ele não funciona.

 

Códigos:

formulário na index.html (coloquei o js em cima pra saber q to chamando ele e jquery na index)

 <head><script src="js/refreshform.js"></script></head>
 <form method="post" name="form" id="form">
 <p><input name="name" type="text" id="name" placeholder="Nome"></p>
 <p><input name="email" type="text" id="email" placeholder="Email de retorno"></p>
 <p><input name"fone" type="text" id="fone" placeholder="Telefone de retorno"></p>
 <p><input name="subject" type="text" id="subject" placeholder="Assunto"></p> 
 <p><textarea name="msg" id="msg" placeholder="Sua mensagem"></textarea></p>
 <input type="submit" class="mainBtn" id="submit" value="Enviar">
 </form>
 </div> 

refreshform.js

$(document).ready(function() {
$("#submit").click(function() {
var name = $("#name").val();
var email = $("#email").val();
var subject = $("#subject").val();
var fone = $("#fone").val();
var msg = $("#msg").val();
if (name == '' || email == '' || subject == '' || msg == '' || fone == '') {
alert("Complete totalmente o formulário!");
} else {
// Retorna mensagem do PHP quando envia
$.post("refreshform.php", {
name1: name,
email1: email,
msg1: msg,
fone1: fone,
subject1: subject

}, function(data) {
alert(data);
$('#form')[0].reset(); // Limpar campos
});
}
});
});

e o php refreshform

<?php
    $name = name1;
    $email = email1;
    $message = msg1;
    $fone = fone1;
    $to = 'teste@testezoom.com.br'; 
    $subject2 = subject1;
    $from = "$name <$email>"
    $subject = "[SITE] $subject2"
    $body = "Cliente: $name\n E-Mail: $email\n Telefone: $fone\n Mensagem:\n $message";
	
    if ($_POST['submit']) {				 
        if (mail ($to, $subject, $body, $from)) { 
		mail($to, $subject, $body, $from);
	    echo "Mensagem enviada";
	} else { 
	    echo "Algo deu errado, tente novamente"; 
	} 
    } 
?>

Eu simplismente não entendo porque ele não está enviando, ele não dá nem mensagem de erro.

Agradeço desde já a ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não use o

$("#submit").click(function() {
O evento correto é o submit e não o click.

 

$("#form").on('submit', function(event) {
   event.preventDefault(); //impedir o default
no lugar de:

$("#submit").click(function() {

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno obrigado pela resposta!

Cara, fazendo a modificação que você sugeriu agora quando eu envio o formulário, ele da refresh na página e mesmo assim ainda não envia, esse comando mail do PHP precisa de algo pré-liberado no php.ini? Como isso não tem por padrão um log nada eu não faço ideia do que possa estar errado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vc não vai conseguir testar local. Pq o mail() precisa de um servidor SMTP instalado na máquina.

 

Sobre o refresh, é pq tem algum erro no js.

Aperte Ctrl + Shift + J no Firefox ou Chrome e veja qual erro aparece.

Compartilhar este post


Link para o post
Compartilhar em outros sites

wbruno, o erro que dá no js é de início, ele diz que o $ não foi definido.

Uncaught ReferenceError: $ is not defined on line 1

Eu tenho apenas noção de programação, pouquissimas vezes usei JS então eu estou com dúvida se deveria 'abrir' o arquivo de uma maneira diferente (como php no '<?php').

Sobre o teste, to fazendo já na hospedagem q o site vai ficar (hostgator). Só n coloquei o dns jogando pro site até eu resolver isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, esse erro é pq tem algo errado na importação da lib jQuery.

 

Não entendi o que vc quis dizer com "abrir" o arquivo.

No Javascript não existe nada semelhante ao <?php do php. Basta escrever mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

wbruno, blz eu descobri esse erro. eu deveria chamar o jquery antes do js do formulário, parou o erro do js.

mas ainda não envia nada.

Basicamente eu quero enviar um formulário de contato simples por e-mail sem refresh mas ta dificil, ele simplismente não funciona.

O que me deixa mais apavorado é que setei laços pra retornar erro e nem isso ele ta fazendo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok.. se a requisição está indo agora, ai o problema é no server-side.

 

Email pode cair no spam, pode ser bloqueado pelo smtp..

Compartilhar este post


Link para o post
Compartilhar em outros sites

wbruno, boa tarde. bom, eu mechi bastante até acertar o js, agora tá funcionando, tanto que se propositalmente faço errado ele consegue verificar e avisa.

agora meu php não quer funcionar. eu vi alguns exemplos na web, mas não sei exatamente como por na busca do google o que eu quero fazer senão nem iria encomodar o amigo.

 

dá erro na linha 9 mas acho que vários dos meus strings tão mal declarados.

<?php
    $name = $_POST['name1'];
    $email = $_POST['email1'];
    $message = $_POST['msg1'];
    $fone = $_POST['fone1'];
    $to = 'teste@testezoom.com.br'; 
    $subject2 = $_POST['subject1'];
    
    $from = $name.' <'.$email'>';
    $subject = '[SITE] '.$subject2;
    $body = 'Cliente: '.$name'\n E-Mail: '.$email'\n Telefone: '.$fone'\n Mensagem:\n '.$message;
	
		 
        if (mail ($to, $subject, $body, $from)) { 
		mail($to, $subject, $body, $from);
	    echo 'Mensagem enviada!';
	} else { 
	    echo 'Algo deu errado, tente novamente.'; 
	} 

?>

Basicamente, eu recebo essas info do JS e quero organizar elas de forma melhor antes de enviar, por isso em body, from e subject eu queria por em forma de chegar perfeito no e-mail.

Em from se tu ver eu tentei fazer o email receber a informação do padrão outlook "nome <nome@nome.com.br>" mas nos exemplos que eu vi era .$variavel e ele a principio pega o dado e poe junto, mas ta dando erro.

Erro: unexpcted T_CONSTANT_ENCAPSED_STRING on line 9.

Obs.: tentei com simpes e duplo 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.