Ir para conteúdo

POWERED BY:

Arquivado

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

Denis Almeida

[Resolvido] Form Contato em HTML, AJAX e PHP

Recommended Posts

Caro amigos não consigo fazer esse form de contato funcionar especificamente nos servidores da locaweb, então vim aqui pedir uma humilde contribuição de vocês:

 

XHTML:

http://sstransporte.com.br/contato.html

 

<form action="mail.php" id="validate_form" method="post">
					<ul>
						<li><input id="name" type="text" name="name"  class="required" /> </li>
						<li><input id="email" type="text" name="email" value="" class="required"	 /> </li>
						<li><textarea  id="message" name="message" rows="8" cols="40"	class="required"></textarea></li>
						<li></li>
							<li class="button-holder">
							<span class="button alignleft default-2">
                               <span><input  type="submit" name="contact" value="Enviar" /></span></span>
                               <span class="loading"></span></li>


							</li>
					</ul>
			</form>

 

AJAX e VALIDAÇÃO:

 

$(document).ready(function(){

     // show a simple loading indicator
     var loader = jQuery('<img src="media/images/loading.gif" alt="loading..." />')
             .appendTo(".loading")
             .hide();
     jQuery().ajaxStart(function() {
             loader.show();
     }).ajaxStop(function() {
             loader.hide();
     }).ajaxError(function(a, b, e) {
             throw e;
     });

     jQuery.validator.messages.required = "";
     var v = jQuery("#validate_form").validate({
             submitHandler: function(form) {
                     jQuery(form).ajaxSubmit({
                             target: "#result"
                     });
             }
     });

     jQuery("#reset").click(function() {
             v.resetForm();
     });
});

$(config.form_validate).blur( function()
{
	var val = $(this).val();

	$(this).removeClass('valid');

	if (val == '' || val == $(this).data('placeholder'))
	{
		$(this).addClass('error');
	} else
	{
		if ($(this).attr('name') == 'email' || $(this).attr('id') == 'email' || $(this).hasClass('email'))
		{
			if (/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(val))
			{
				$(this).removeClass('error').addClass('valid');
			} else
			{
				$(this).addClass('error');
			}
		} else
		{
			$(this).removeClass('error').addClass('valid');
		}
	}
});

 

PHP:

 

<?
// edit these lines
$your_name="S/S Transporte";
$your_email="contato@sstransporte.com.br";
$your_web_site_name="http://www.sstransporte.com.br";
?>

<?php 
//If the form is submitted
if(isset($_POST['name'])) {

	//Check to make sure that the name field is not empty
	if(trim($_POST['name']) === '') {
		$hasError = true;
	} else {
		$name = trim($_POST['name']);
	}

	//Check to make sure sure that a valid email address is submitted
	if(trim($_POST['email']) === '')  {
		$hasError = true;
	} else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
		$hasError = true;
		$errorMessage = "Por favor insira um E-mail Valido!";
	} else {
		$email = trim($_POST['email']);
	}


	//Check to make sure comments were entered	
	if(trim($_POST['message']) === '') {
		$hasError = true;
	} else {
		if(function_exists('stripslashes')) {
			$comments = stripslashes(trim($_POST['message']));
		} else {
			$comments = trim($_POST['message']);
		}
	}



	//If there is no error, send the email
	if(!isset($hasError)) {

		$emailTo = $your_email;
		$subject = 'Formulario do Site'.$name;

		//message body 
		$body  ="Name: $name \n\n";
		$body .="Email: $email \n\n";
		$body .="Message: $comments";
		$headers = 'From: S/S Transporte '.$your_web_site_name.' <'.$emailTo.'>' . "\r\n" . 'Reply-To: contato@sstransporte.com.br' . $email;

		mail($emailTo, $subject, $body, $headers);

		$emailSent = true;
}
} 
?>

<?php if(isset($emailSent) == true) { ?>
<div class="ok_box">
	<h3>obrigado, <b><?php echo $name;?></b></h3>
	<p class="p_form">Seu e-mail foi enviado com sucesso! Em breve retornaremos.</p>
</div>
<?php } ?>

<?php if(isset($hasError) ) { ?>
<div class="error_box">
	Ocorreu um erro ao enviar o formulario!
	<br />
	<?php echo $errorMessage;?>
</div>
<?php } ?>

 

E também as bibliotecas:

 

JQUERY VALIDATE LIBRARY: http://sstransporte.com.br/media/scripts/libs/jquery.validate.js

JQUERY FORMS LIBRARY: http://sstransporte.com.br/media/scripts/libs/jquery.form.js

 

É o que compõe o form, a locaweb recomenda esses padrões:

http://ajuda.locaweb.com.br/pt-br/Como_enviar_e-mails_com_a_fun%C3%A7%C3%A3o_mail%28%29_do_PHP#Hospedagem_Linux

 

Se vocês puderem ajudar a achar o erro, sera de muita ajuda.

 

Desde ja agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tu não tá conseguindo validar o formulário, é isso? Ou o problema é no envio?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu, seu arquivo de enviar tá beeemm zuado...

troque a linha com a variavel $headers por estas linhas:

$headers = "MIME-Version: 1.1\r\n";
$headers .= "Content-type: text/html;charset=utf-8\r\n";
$headers .= "From: $your_name <$your_email>\r\n";
$headers .= "Reply-To: $nome <$email>\r\n";

 

A função mail está errada amigão, você está enviando o e-mail pra você mesmo??

Não seria para o e-mail que foi digitado na caixa de login?? Troque a linha da função mail por este código:

$emailSent = mail($email, $subject, $body, $headers) ? true : false;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tu não tá conseguindo validar o formulário, é isso? Ou o problema é no envio?

 

problema no envio, o não recebo o formulario no email

 

Meu, seu arquivo de enviar tá beeemm zuado...

troque a linha com a variavel $headers por estas linhas:

$headers = "MIME-Version: 1.1\r\n";
$headers .= "Content-type: text/html;charset=utf-8\r\n";
$headers .= "From: $your_name <$your_email>\r\n";
$headers .= "Reply-To: $nome <$email>\r\n";

 

A função mail está errada amigão, você está enviando o e-mail pra você mesmo??

Não seria para o e-mail que foi digitado na caixa de login?? Troque a linha da função mail por este código:

$emailSent = mail($email, $subject, $body, $headers) ? true : false;

 

 

Ola Lucas obrigado e descupe a ignorancia sou iniciante, então uma duvida na $emailSent, altero as duas linhas pela que você mencionou? ou somente a segunda?

 

mail($emailTo, $subject, $body, $headers);
$emailSent = true;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Denis, não há porque se desculpar, eu já fui iniciante em programação php. O correto seria alterar as duas linhas, porque dessa forma, será feita a validação da função mail, veja:

 

A forma como estava:

mail($emailTo, $subject, $body, $headers);
$emailSent = true; // a variavel sempre recebe true, mesmo se o e-mail não for enviado

 

A forma correta

$emailSent = mail($email, $subject, $body, $headers) ? true : false;
//A variável $emailSent receberá true se o e-mail for enviado e false se não for enviado

 

E detalhe importante, você deve usar na função mail a variável $email (email que o usuário digitou no formulário), não a variável com o seu e-mail

Compartilhar este post


Link para o post
Compartilhar em outros sites

valew Lucas, não sei se ficou algo errado amigo mas continua sem enviar o form, lembrando que minha hospedagem é linux na locaweb, como ficou:

 

<?
// edit these lines
$your_name="S/S Transporte";
$your_email="contato@sstransporte.com.br";
$your_web_site_name="http://www.sstransporte.com.br";
?>

<?php 
//If the form is submitted
if(isset($_POST['name'])) {

	//Check to make sure that the name field is not empty
	if(trim($_POST['name']) === '') {
		$hasError = true;
	} else {
		$name = trim($_POST['name']);
	}

	//Check to make sure sure that a valid email address is submitted
	if(trim($_POST['email']) === '')  {
		$hasError = true;
	} else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
		$hasError = true;
		$errorMessage = "Por favor insira um E-mail Válido!";
	} else {
		$email = trim($_POST['email']);
	}


	//Check to make sure comments were entered	
	if(trim($_POST['message']) === '') {
		$hasError = true;
	} else {
		if(function_exists('stripslashes')) {
			$comments = stripslashes(trim($_POST['message']));
		} else {
			$comments = trim($_POST['message']);
		}
	}



	//If there is no error, send the email
	if(!isset($hasError)) {

		$emailTo = $your_email;
		$subject = 'Formulario do Site'.$name;

		//message body 
		$body  ="Name: $name \n\n";
		$body .="Email: $email \n\n";
		$body .="Message: $comments";
		$headers = "MIME-Version: 1.1\r\n";
		$headers .= "Content-type: text/html;charset=utf-8\r\n";
		$headers .= "From: $your_name <$your_email>\r\n";
		$headers .= "Reply-To: $nome <$email>\r\n";

		$emailSent = mail($email, $subject, $body, $headers) ? true : false;

}
} 
?>

<?php if(isset($emailSent) == true) { ?>
<div class="ok_box">
	<h3>obrigado, <b><?php echo $name;?></b></h3>
	<p class="p_form">Seu e-mail foi enviado com sucesso! Em breve retornaremos.</p>
</div>
<?php } ?>

<?php if(isset($hasError) ) { ?>
<div class="error_box">
	Ocorreu um erro ao enviar o formulário!
	<br />
	<?php echo $errorMessage;?>
</div>
<?php } ?>

 

A xarope da locaweb exige o padrão internacional RFC 822, e aqui segue um modelo que eles testaram e funcionou na minha hospedagem, como implantaria esse padrão no meu form sem ter que fazer do 0?

 

 

<?php

/* Medida preventiva para evitar que outros domínios sejam remetente da sua mensagem. */
if (eregi('tempsite.ws$|locaweb.com.br$|hospedagemdesites.ws$|websiteseguro.com$', $_SERVER[HTTP_HOST])) {
       $emailsender='contato@sstransporte.com.br'; // Substitua essa linha pelo seu e-mail@seudominio
} else {
       $emailsender = "contato@sstransporte.com.br";
       //    Na linha acima estamos forçando que o remetente seja 'webmaster@seudominio',
       // Você pode alterar para que o remetente seja, por exemplo, 'contato@seudominio'.
}

/* Verifica qual éo sistema operacional do servidor para ajustar o cabeçalho de forma correta.  */
if(PATH_SEPARATOR == ";") $quebra_linha = "\r\n"; //Se for Windows
else $quebra_linha = "\n"; //Se "não for Windows"

// Passando os dados obtidos pelo formulário para as variáveis abaixo
$nomeremetente     = $_POST['nomeremetente'];
$emailremetente    = $_POST['emailremetente'];
$emaildestinatario = $_POST['emaildestinatario'];
$comcopia          = $_POST['comcopia'];
$comcopiaoculta    = $_POST['comcopiaoculta'];
$assunto           = $_POST['assunto'];
$mensagem          = $_POST['mensagem'];


/* Montando a mensagem a ser enviada no corpo do e-mail. */
$mensagemHTML = '<P>Esse email é um teste enviado no formato HTML via PHP mail();!</P>
<P>Aqui está a mensagem postada por você; formatada em HTML:</P>
<p><b><i>'.$mensagem.'</i></b></p>
<hr>';


/* Montando o cabeçalho da mensagem */
$headers = "MIME-Version: 1.1" .$quebra_linha;
$headers .= "Content-type: text/html; charset=iso-8859-1" .$quebra_linha;
// Perceba que a linha acima contém "text/html", sem essa linha, a mensagem não chegará formatada.
$headers .= "From: " . $emailsender.$quebra_linha;
$headers .= "Cc: " . $comcopia . $quebra_linha;
$headers .= "Bcc: " . $comcopiaoculta . $quebra_linha;
$headers .= "Reply-To: " . $emailremetente . $quebra_linha;
// Note que o e-mail do remetente será usado no campo Reply-To (Responder Para)

/* Enviando a mensagem */

//É obrigatório o uso do parâmetro -r (concatenação do "From na linha de envio"), aqui na Locaweb:

if(!mail($emaildestinatario, $assunto, $mensagemHTML, $headers ,"-r".$emailsender)){ // Se for Postfix
   $headers .= "Return-Path: " . $emailsender . $quebra_linha; // Se "não for Postfix"
   mail($emaildestinatario, $assunto, $mensagemHTML, $headers );
}

?>

 

confere?

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei aqui e funcionou certinho. Agora você editar o arquivo com as suas validações, e as mensagens para mostrar

<?php

function protect($str){
$str = preg_replace('~([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
$str = preg_replace('~([0-9]+);~e', 'chr("\\1")', $str);
$str = str_replace("<script","",$str);
$str = str_replace("script>","",$str);
$str = str_replace("<Script","",$str);
$str = str_replace("Script>","",$str);
$str = trim($str);
$tbl = get_html_translation_table(HTML_ENTITIES);
$tbl = array_flip($tbl);
$str = addslashes($str);
$str = strip_tags($str);
return strtr($str, $tbl);
}


$emailsender ='contato@sstransporte.com.br'; // Substitua essa linha pelo seu e-mail@seudominio
/* Verifica qual é o sistema operacional do servidor para ajustar o cabeçalho de forma correta.  */
$quebra_linha = PATH_SEPARATOR == ";"  ? "\r\n" : "\n";


// Passando os dados obtidos pelo formulário para as variáveis abaixo
$nome 	= protect($_POST['name']);
$email	= protect($_POST['email']);
$mensagem = protect($_POST['message']);
$assunto = "Mensagem do site SS Transporte";


/* Montando a mensagem a ser enviada no corpo do e-mail. */
$mensagemHTML = "
<p>Mensagem do site</p>
Nome: {$nome}<br/>
E-mail: {$email}<br/>
Mensagem: {$mensagem}
";


/* Montando o cabeçalho da mensagem */
$headers = "MIME-Version: 1.1" .$quebra_linha;
$headers .= "Content-type: text/html; charset=utf-8" .$quebra_linha;
$headers .= "From: " . $emailsender.$quebra_linha;
$headers .= "Reply-To: " . $email.$quebra_linha;


/* Enviando a mensagem */
if(!mail($emailsender, $assunto, $mensagemHTML, $headers ,"-r".$emailsender)){ // Se for Postfix
$headers .= "Return-Path: " . $emailsender . $quebra_linha; // Se "não for Postfix"
mail($emailsender, $assunto, $mensagemHTML, $headers );
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

era mais simples usar um PHP_EOL no lugar disso aqui:

$quebra_linha = PATH_SEPARATOR == ";"  ? "\r\n" : "\n";

ficando então:

 

/* Montando o cabeçalho da mensagem */
$headers = "MIME-Version: 1.1" .PHP_EOL;
$headers .= "Content-type: text/html; charset=utf-8" .PHP_EOL;
$headers .= "From: " . $emailsender.PHP_EOL;
$headers .= "Reply-To: " . $email.PHP_EOL;

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.