[Script]Formulário de Contato com Anexo usando PHPMailer

Seção para postar os scripts das video aulas, e dos membros do forum

[Script]Formulário de Contato com Anexo usando PHPMailer

Mensagempor davidchc » Seg Fev 01, 2010 12:02 pm

enviar.php
Código: Selecionar tudo

<?php
      $nome     
= strip_tags(trim($_POST['nome']));
      $email    = strip_tags(trim($_POST['email']));
      $titulo   = strip_tags(trim($_POST['titulo']));
      $mensagem = strip_tags(trim($_POST['mensagem']));
      $arquivo  = $_FILES['arquivo'];
     
      $tamanho 
= 512000;
      $tipos   = array('image/jpeg', 'image/pjpeg');
      
      if
(empty($nome)){
     $msg = 'O Nome é Obrigatório';
      }elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
     $msg = 'Digite um E-mail válido';
      }elseif(empty($titulo)){
     $msg = 'O Título é Obrigatório';
      }elseif(empty($mensagem)){
     $msg = 'A Mensagem é Obrigatória';
      }elseif(!is_uploaded_file($arquivo['tmp_name'])){
     $msg = 'O Arquivo é Obrigatório';
      }elseif($arquivo['size'] > $tamanho){
     $msg = 'O limite do tamanho do arquivo é de 500KB';
      }elseif(!in_array($arquivo['type'], $tipos)){
     $msg = 'O tipo do arquivo permitido é apenas JPEG';
      }else{
        require('PHPMailer/class.phpmailer.php');
       
       $mail 
= new PHPMailer();
       $mail->IsSMTP();
       $mail->SMTPAuth = true;
       $mail->Port = 587;
       $mail->Host = 'smtp.seusite.com.br';
       $mail->Username = 'nome=seusite.com.br';
       $mail->Password = '********';   
       $mail
->SetFrom('nome=seusite.com.br', 'Nome');
       $mail->AddAddress('outro_email@outrosite.com.br, 'Nome do Outro Site');
       $mail->Subject = '
Formulário de Contato';
       
       $body = "<strong>Nome :</strong>{$nome} <br />
            <strong>E-mail :</strong>{$email} <br />
            <strong>Titulo :</strong>{$titulo} <br />
            <strong>Mensagem :</strong>{$mensagem} <br />
            <strong>Arquivo :</strong> ".$arquivo['
name'];
       
       $mail->MsgHTML($body);
       $mail->AddAttachment($arquivo['
tmp_name'], $arquivo['name']);
       
       if($mail->Send())
           $msg = '
Sua Mensagem foi enviada com Sucesso!!!';
        else
           $msg = '
Sua Mensagem não foi enviada, tente novamente;
       
      
}
       
?>


index.php

Código: Selecionar tudo

<?php
        if
(isset($_POST['acao']) && $_POST['acao'] == 'enviar'){
            require('enviar.php');    
        
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Formul&aacute;rio de Contato</title>
</head>
<body>
    <?php
        if
(isset($msg))
         echo "<p id=\"msg\">$msg</p>";
    ?>
        <form action="" method="post" enctype="multipart/form-data">
        <fieldset>
                    <legend>Formulário de Contato</legend>
                    
                    <label>
                         <span>Nome</span>
                         <input type="text" name="nome" />
                    </label>
                    
                    <label>
                         <span>E-mail</span>
                         <input type="text" name="email" />
                    </label>
                    
                    <label>
                         <span>Titulo</span>
                         <input type="text" name="titulo" />
                    </label>
                    
                      <label>
                         <span>Mensagem</span>
                         <textarea name="mensagem" cols="30" rows="5"></textarea>
             </label>
             <label>
                <span>Arquivo</span>
                <input type="file" name="arquivo" />
             </label>
             
                    
            <input type="hidden" name="acao" value="enviar" />          
           <input type="submit" value="Enviar Formulário"  class="btn"/>
                </fieldset>  
                 
        
        </form>
        
</body>
</html>
Avatar de usuário
davidchc
Veterano
 
Mensagens: 3135
Data de registro: Qua Ago 06, 2008 2:11 pm

Re: [Script]Formulário de Contato com Anexo usando PHPMailer

Mensagempor rafaelweb » Qua Fev 24, 2010 12:34 am

Como fazer para usar esse script em uma página HTML, por exemplo, criar um arquivo externo (enviar.php) a ativar ele pelo action do formulário, exemplo (action=”eviar.php”)
rafaelweb
Novo membro
 
Mensagens: 17
Data de registro: Ter Jun 16, 2009 12:55 am

Re: [Script]Formulário de Contato com Anexo usando PHPMailer

Mensagempor wilfrank » Qui Mar 18, 2010 10:16 pm

Olá David, ótima vídeo-aula sobre a classe PHPMailer, porém estou tendo um pequeno problema e talvez você possa me ajudar.
O envio do email ocorre perfeitamente, porém preciso enviar no corpo da mensagem o nome do cliente que capturo direto do banco de dados e é aí que está o meu problema, eu armazeno o nome cliente em uma variável e coloco esta variável no corpo da mensagem, mas o que chega com a mensagem é exatamente a variável e não o conteúdo dela.

Agradeço se puder me ajudar.

Abração. :D
wilfrank
Novo membro
 
Mensagens: 2
Data de registro: Sex Nov 20, 2009 3:49 pm

Re: [Script]Formulário de Contato com Anexo usando PHPMailer

Mensagempor davidchc » Sex Mar 19, 2010 11:19 am

rafaelweb, vc pode fazer, basta colocar o action indicando esse arquivo externo. Só q indicaria em vez de usar a variavel de mensagem, vc usar um alert, e voltar uma ação com history.back().


wilfrank, isso deve ser q está vc está colocando entre aspas simples, em vez de aspas duplas, exemplo:

Código: Selecionar tudo
$nome = 'wilfrank';
echo "Seu nome é $nome";


//imprimir : Seu nome é wilfrank

Com aspas simples

Código: Selecionar tudo
echo 'Seu nome é $nome';

//imprimir :Seu nome é $nome

Ele vai imprimir a variavel como uma string, e não vai substituir o valor
Avatar de usuário
davidchc
Veterano
 
Mensagens: 3135
Data de registro: Qua Ago 06, 2008 2:11 pm

Re: [Script]Formulário de Contato com Anexo usando PHPMailer

Mensagempor Marcio Vinicius » Dom Jun 20, 2010 11:31 am

David, não consegui enviar essa pergunta pela página da Video Aula, então terei que mandar por aqui mesmo.
...

Antes de mais nada, ótima video aula!! Já já irei faze-la passo a passo, mas antes poderia me responder umas perguntas um pouco besta mas que ainda me confundem?

1ª Na verificação dos campos, se eles estão preenchidos ou não, logo de inicio você colocou:
if(empty($nome)){
$msg = 'O Nome é Obrigatório';
Então, o que quer dizer esse 'empty'?
__

2ª Você usou um IF na verificação, depois vários ELSEIF para as outras, você poderia usar apenas IF's ao inves de ELSEIF para todas?
Assim:
if(empty($nome)){

}
if(empty($titulo)){

}...
E assim por diante!! (E o que é esse elseif? Tipo, pra que serve sendo que já existe o if e depois o else, eu me confundo todo)
__

3ª Outra, lá no formulário, você colocou um campo oculpo com o nome de "acao" e value="enviar", você não poderia ter colocado apenas no submit mesmo assim?
<input type="submit" value="Enviar" name="acao"... />

4ª Não entendi direito como funciona a parte de exibir o erro em cima do formulario, essa aqui ó:
<body>
<?php
if(isset($msg))
echo "<p id=\"msg\">$msg</p>";
?>
...

Acho que não entendi direito o conceito em si, como que ele vai reconhecer que deve aparecer a mensagem de erro sobre o formulario quando ele for efetuado? Sendo que não há nenhuma especificação da váriavel $msg naquela página? Deu pra entender? Achei que ficou um pouco confuso... Porque pra mim, se você declarar uma variavel na pagina sem um nome pra ela ou algo assim, ele sempre acusa que não foi definida a váriavel tal, só gostaria de saber como que NO JEITO QUE VOCÊ fez ele conseguiu entender que ela é um "echo" de verificação dos campos, tipo, eu adorei cara, rs'


Bom é isso, desculpe se ficou muito extenso, é que eu gostaria de fazer o formulário entendendo essas regrinhas básicas primeiro, sei que é coisa simples, mas que ainda me confundem! Obrigado pela atenção já e abraços!!

PS: É porque geralmente quando eu faço verificação dos campos e que o erro apareça na mesma página eu faço a Ação do formulario na mesma página, ou seja, seria sem aquela página enviar e apenas com a index.php, e toda a configuração na mesma, assim...

if($nome == ""){
echo "Preencha o campo nome";
}

if($titulo == ""){
echo "Preencha o cam..."
}
E depois só la no final que eu usaria o else{
}

___
Valeu man!! Mais uma vez!!!
Avatar de usuário
Marcio Vinicius
Membro Sênior
 
Mensagens: 77
Data de registro: Qui Jun 17, 2010 4:23 pm

Re: [Script]Formulário de Contato com Anexo usando PHPMailer

Mensagempor davidchc » Dom Jun 20, 2010 12:21 pm

1 => empty - Verifica se uma variavel está vazia

2 => Com if / elseif / else, só posso ter uma resposta verdadeira, isso força quando encontrar a resposta q quero, ele para, e não continua. Se usasse apenas if, ele ia testando todas as condições, e numa validação não há necessidade disso, quero q ela pare na primeira condição de validação.

O if/else, ele testa uma condição, e se não for verdadeira, ele vai pra o else

Código: Selecionar tudo
if(condicao){
  
Se é verdadeira para aqui
}else{
   
Se for falso para aqui


A condição elseif, faz a mesma coisa, só que ela vai para quando encontrar a condição verdadeira, se não encontrar, vai até o else. Isso me força ter 1 resultado verdadeiro

Código: Selecionar tudo
if(condicao1){
  
//Se é verdadeira para aqui
}elseif(condicao2){
   
//Se é verdadeira para aqui
}else{
  
//Se é for falso todas as condições para aqui



3=> Isso é uma particularidade minha, se você for assistir as outras aulas, eu sempre uso. Mas não é obrigatorio, poderia muito bem testar se existe uma metodo post sendo enviado. A função real dele é apenas verificar se o formulário foi acionado ou não. Existe n maneiras de fazer isso.

Outra maneira de fazer:

Código: Selecionar tudo
//Verifica se tem metodo post
if( $_SERVER['REQUEST_METHOD'] == 'POST'){

}
 


OU

Código: Selecionar tudo
//Verifica se tem metodo post
if(isset( $_POST)){

}
 


Como falei, é apenas uma maneira que gosto de fazer.

4 => A variavel $msg só vai existir quando passar por alguma das condições. Caso o formulário não for acionada, ela ainda não existe. Por isso , que coloquei para existir essa condição. Se a variavel $msg existir, exiba o seu conteudo.

Quando vc acessa a pagina, a variavel $msg não existir. Pq? Pq ela é um resultado da validação dos dados, ela só existirá quando o formulário for acionado, e passar pela condições q de validação que informei.
Avatar de usuário
davidchc
Veterano
 
Mensagens: 3135
Data de registro: Qua Ago 06, 2008 2:11 pm

Re: [Script]Formulário de Contato com Anexo usando PHPMailer

Mensagempor Marcio Vinicius » Dom Jun 20, 2010 1:40 pm

Huuun, certo, copiei tudo para o Bloco de Notas para sempre poder lembra, obrigado mais uma vez David!!

Agora outra pergunta que eu esqueci de pergunta, huuun...

E se eu quisesse colocar no action="" da forma o nome da pagina, o padrão seria o mesmo ou mudaria algo?
Avatar de usuário
Marcio Vinicius
Membro Sênior
 
Mensagens: 77
Data de registro: Qui Jun 17, 2010 4:23 pm

Re: [Script]Formulário de Contato com Anexo usando PHPMailer

Mensagempor davidchc » Dom Jun 20, 2010 3:24 pm

Quando eu não coloco nada action, ele está indicando q será para própria pagina. Mas vc pode colocar o nome da propria página sem problemas. Isso fica a seu gosto. Vc pode colocar tbm um parametro do $_SERVER, q informa a página atual.

Código: Selecionar tudo

<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">

É mesma coisa seu tivesse colocado o nome da página atual.
Avatar de usuário
davidchc
Veterano
 
Mensagens: 3135
Data de registro: Qua Ago 06, 2008 2:11 pm


Retornar para Banco de Scripts (PHP)

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes