Webmaster um formulário de contato para seu site

última modificação em 17 de Setembro de 2009 às 16:23 por ninha25
Publicado por ninha25
Webmaster um formulário de contato para seu site

Este formulário permite ter uma página para ser contatado em seu site, sem utilizar um software de mensagens.
A pessoa que contata você indica seu endereço, o objeto da mensagem e sua mensagem (evidentemente).
O código é uma versão personalizada e arranjada se:
Site du zéro : "Função email () : Um menu puro e duro para o seu site em francês; tutorial PHPformularios; tutoriais emails PHP; formulario flash PHP; tutorial email PHP; função para validar email

Ele utiliza a função email, se ela não funcionar verifique que se o seu provedor de hospedagem não desativou-a ou a refreou.
O endereço email do destinatário também conta.
(Eu fiz isso com Free (provedor internet francês), indicando meu enderêço free, as mensagens não tinham sido enviadas. Colocando um outro enderêço funcionou).
Ele não tem segurança (=sem verificação « anti-bots »), é você que deve se virar.
No entanto, todas as verificações efetuadas deveriam bloquear certos spams pouco evoluídos.
Se você fizer sozinho, a melhor maneira é de colocar uma questão simples, como “Qual é o endereço desta página”, ou Quanto é: 2+2?”.
Um humano compreenderia perfeitamente, mas um robô responde não importa o que.
É mais fácil gerar uma imagem e de verificá-la (mesmo que este sistema pareça ser o mais eficaz em relação a certos robôs evoluídos).
(Você poderá também participar da evolução do sistema, por exemplo armazenando uma série de questões deste tipo e gerando uma de forma qualquer).
No entanto, o sistema anti-spam tem que adaptar em função da freqüentação do site e da fiabilidade necessária.

O formulário


Ele está disponível no seguinte endereço:
http://ssylvainsab.free.fr/autres/ccmfaq/script-contact.txt França

Eis o código.

A única coisa a fazer é copiar/colar o código e de colocá-lo em um arquivo com extensão .php (ou .shtml, .php3, etc...)
Atenção, não esqueça de indicar seu enderêço emaul na 3° linha!
<?php
//Escreva seu enderêço email  entre as aspas
$destinatário='meu endereço@meu domínio';
?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="fr">
<head>
  <title>Contact</title>
  <style type="text/css">
    form#contact{border:2px solid red;width:70%;padding:1em}
    p#msg,p#adr,p#obj{border:2px solid green;margin-right:10%;padding:10px}
    p#msg textarea{border:2px solid blue;height:30em;width:80%}
    p#adr input,p#obj input{border:2px solid blue}
    p.bt{text-align:center}
    p.bt input{border:1px red solid;width:50%}
  </style>
  <meta http-equiv="content-type" content="Content-type:text/html;charset=iso-8859-1">
</head>
<body style="direction: ltr;">
<h1>Contact</h1>
<?php
$Pré-visualizar='<p class="bt">
<input type="submit" name="pré-visualizar" tabindex="3" value="Pré-visualizar"></p>';
$Envio="\n".'<p class="bt">
<input name="envoi" tabindex="4" value="Envoyer" type="submit"></p>';
if (isset($_POST['message']))
  {
    //A variável $verif  vai nos permitir analisar se a semântica do email está correta
    $verif='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#';
    //algumas substituições para as
    $message=preg_replace('#(<|>)#', '-', $_POST['message']);
    $message=str_replace('"', "'",$message);
    $message=str_replace('&', 'et',$message);
    $objet=preg_replace('#(<|>)#', '-', $_POST['objet']);
    $objet=str_replace('"', "'",$objet);
    $objet=str_replace('&', 'et',$objet);
    //Designa-se e/ou protege-se nossas variáveis
    $seuemail=stripslashes(htmlentities($_POST['seuemai']));
    $message=stripslashes(htmlspecialchars($message));
    $objet=stripslashes(htmlspecialchars($objet));
    //input envio/pré-visualizar
    $envio=htmlentities($_POST['envoi']);
    $pré-visualizar=htmlentities($_POST['pré-visualizar']);
    //tira-se os espaços
    $seuemail=trim($seumail);
    $message=trim($message);
    $objet=trim($objet);

    $afixagem_resultado='<p>Afixagem do resultado:</p>';

    /*Verifica-se se o email e a mensagem estão plenas, e age-se em função.
      (afixa-se Afixagem do resultado, tal ou  qual campo é vazio, , etc...*/
    //Se isto não funcionar (mal completado, email inválido...)
    if((empty($message))or(empty($objet))or(!preg_match($verif,$votremail)))
      {
        //Os três campos estão vazios
        if(empty($votremail)and(empty($message))and(empty($objet)))
          {
            eco '<p>Todos os campos estão vazios.</p>';
            $mensagem='';$euemail='';$objet='';$afixagem_resultado='';
          }
        //um dos campos está vazio
        else
          {
            if(!preg_match($verif,$seuemail))
              eco'<p>Seu enderêço email n\’é inválido.</p>';
            else
            {
              eco'<p>É preciso completar todos os campos!</p>';
              if(empty($message))
                $Afixagem_resiltado='';
            }
          }
      }
    //Se os dois  estão completos e que o enderêço é válido, envia-se e pré-visualiza-se sem envio 
    else
      {
        $domínio=preg_replace('#[^@]+@(.+)#','$1',$seuemail);
        $DomínioMailExiste=checkdnsrr($domínio,'MX');
        if(!$DomínioMailExiste)
          eco'<p>O nome de domínio do enderêço email que você deu é inválido.</p>';
        elseif(!empty($pré-visualizar))
            {
              $afixagem_resultado='<p>Sua mensagem e seu enderêço email são válidos e prontos par ser enviados.
              <br>Você deve clicar sobre o botão: "Enviar".<br>Prè-visualização :</p>';
              $Pré-visualizar='';
            }
        elseif(!empty($envio))
            {
              $objeto='[SITE] : '.$objeto;
              $headers='From:'.$seuemail."\r\n".'To:'.$email."\r\n".'Subject:'.$objeto."\r\n".'Content-type:text/plain;charset=is-8859-1'."\r\n".'Sent:'.date('l, F d, Y H:i');
              if(mail($destinatário,$objeto,$mensagem,$headers))
              {
                eco '<p>Sua mensagem foi enviada;. Obrigado.</p><p><a href="/">Retorno a página inicial</a></p>';
                $Envio='';
                $Prè-visualizar='';
              }
              else
                echo'<p>Um grave problema aconteceu durante o envio do email.</p>';
            }
        else
          echo'<p>Uma situação inesperada aconteceu na execução do script.</p>';
      }
eco $afixagem_resultado;
  }
else
  {
  eco '<p>Você pode utilizar este formulário para me contatar.</p>';
  $seuemail='';$mensagem='';
  }
$bas_formulário=$Prévisualizar.$Envio;
?>
<form id='contact' method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" enctype="multipart/form-data">
  <p id='obj'><label for='objet'>Objeto de sua mensagem:<br>
  <input type='text' name='objet' id='objet' tabindex='10' size='30'></label></p> 

  <p id="adr"><label for="mail">Seu endereço email<br>
  <input name="seuemail" tabindex="20" size="30" type="text" id="mail" value="<?php eco $seuemail; ?>"></label></p>
  
  <p id="msg"><label for="message">Sua mensagem<br>
  <textarea tabindex="30" rows="20" cols="120" name="message" id="message"><?php eco $mensagem; ?></textarea>
  </label></p>
<?php eco $bas_formulário;?>
</form>
</body>
</html>

Uma outra versão em PHP5


Este formulário é escrito em PHP5 e não comporta pré-visualização.
O código fonte e Links PHPsecure
<?php
    define( 'MAIL_TO', /* >>>>> */'utilizador@domínio.tld'/* <<<<< */ );  //acrescentar seu courriel
    define( 'MAIL_FROM', 'utilisador@domínio.tld' ); // valor por padrão
    define( 'MAIL_OBJECT', 'objeto da mensagem' ); // valor por padrão
    define( 'MAIL_MESSAGE', 'sua mensagem' ); // valor por padrão

    $mailSent = false; // bandeira que orienta a afixagem do formulário OU de recapitulativo
    $errors = array(); // quadro de erros de digitação
    
    if( filter_has_var( INPUT_POST, 'send' ) ) // o formulário foi submetido com o botão [Enviar]
    {
        $from = filter_input( INPUT_POST, 'from', FILTER_VALIDATE_EMAIL );
        if( $from === NULL || $from === MAIL_FROM ) // se o correio fornecido é vazio OU igual ao valor por padrão
        {
            $errors[] = 'Você deve informar seu endereço de correio eletrônico
        }
        elseif( $from === false ) // se o correio fornecido é inválido
        {
            $errors[] = 'O enderêço do correio eletrônico é inválido
            $from = filter_input( INPUT_POST, 'from', FILTER_SANITIZE_EMAIL );
        }

        $objecto = filter_input( INPUT_POST, 'object', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH | FILTER_FLAG_ENCODE_LOW );
        if( $object === NULL OR $object === false OR empty( $object ) OR $object === MAIL_OBJECT ) // se o objeto é vazio, inválido ou igual ao valor  padrão
        {
            $errors[] = 
        }

	/* sem necessidade de limpar a mensagem.
	/	http://www.phpsecure.info/v2/.php
	/	Logicamente, as partes mensagens ;, To: e Subject: poderiam servir também para injectar alguma coisa, mas a função email ()
	/	filtrar as duas últimas, e a primeira é a mensagem, e a partir do momento onde uma linha foi saltada no envio do email.
	/	2 considerado como texto ; a mensagem  ficaria unicamente como mensagem. */
        $message = filter_input( INPUT_POST, 'message', FILTER_UNSAFE_RAW );
        if( $message === NULL OR $message === false OR empty( $message ) OR $message === MAIL_MESSAGE ) // se a mensagem fornecida é vazia ou igual ao valor por padrão
        {
            $errors[] = 'Você deve escrever uma mensagem.
        }

        if( count( $errors ) === 0 ) // se não houver erros
        {
            if( mail( MAIL_TO, $object, $message, "From: $from\nReply-to: $from\n" ) ) // tentative de envoi da mensagem
            {
                $mailSent = true;
            }
            else // envio interrompido
            {
                $errors[] = Sua mensagem não foi enviada.            }
        }
    }
    else //o formulário foi afixado pela primeira vez, com os valores por padrão 
    {
        $from = MAIL_FROM;
        $object = MAIL_OBJECT;
        $message = MAIL_MESSAGE;
    }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="fr" xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
        <title>Contact</title>
        <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
        <meta http-equiv="content-language" content="fr" />
        <style type="text/css">
html{ font-family:Geneva, Arial, Helvetica, sans-serif; margin:0; padding:0; font-size:.88em;}
body{ width:772px; margin:0 auto; padding:0; }
textarea{ width:772px; }
label{ display:block; font-weight:bold; }
p#welcome{ padding:10px 20px; border:1px dotted #00f; color:#00f; font-weight:bold; }
ul{ padding:10px 20px; border:1px dotted #f00; color:#f00; font-weight:bold; }
p#success{ padding:10px 20px; border:1px dotted #0f0; color:#0f0; font-weight:bold; }
p em{ display:block; font-weight:normal; }
        </style>
    </head>
    <body>
        <h1>Contact</h1>
        <hr />
<?php
    if( $mailSent === true ) // se a mensagem foi enviada com sucesso, afxa-se o recapitulativo
    {
?>
        <p id="success">Sua mensagem  foi enviada com sucesso.</p>
        <p><strong>Correio para a resposta </strong><br /><?php echo( $from ); ?></p>
        <p><strong>Objet&nbsp;:</strong><br /><?php echo( $object ); ?></p>
        <p><strong>Message&nbsp;:</strong><br /><?php echo( nl2br( htmlspecialchars( $message ) ) ); ?></p>
<?php
    }
    else // O formulário é afixado pela primeira vez ou o formulário foi submetido mas continha erros
    {
        if( count( $errors ) !== 0 )
        {
            eco( "\t\t<ul>\n" );
            foreach( $errors as $error )
            {
                eco( "\t\t\t<li>$error</li>\n" );
            }
            eco( "\t\t</ul>\n" );
        }
        else
        {
            eco( "\t\t<p id=\"welcome\"><em>Todos os campos são obrigatórios</em></p>\n" );
        }
?>
        <form id='contact' method="post" action="<?php echo( $_SERVER['REQUEST_URI'] ); ?>">
            <p>
                <label for="from">Coreeio para a resposta</label>
                <input type="text" name="from" id="from" value="<?php echo( $from ); ?>" />
            </p>
            <p>
                <label for="object">Objeto</label>
                <input type="text" name="object" id="object" value="<?php echo( $object ); ?>" />
            </p> 
            <p>
                <label for="message">Mensagem</label>
                <textarea name="message" id="message" rows="20" cols="80"><?php echo( $message ); ?></textarea>
            </p>
            <p>
                <input type="reset" name="reset" value="Apagar" />
                <input type="submit" name="send" value="Enviar" />
            </p>
        </form>
<?php
    }
?>
    </body>
</html>


Artigo <a href='http://www.commentcamarche.net/faq/sujet-4516-webmaster-un-formulaire-de-contact-pour-votre-site
original'>http://www.commentcamarche.net/...
original</a> publicado por Ssylvainsab
Melhores respostas por « Webmaster um formulário de contato para seu site » em :
Os formulários HTML Ver Interesse de um formulário Os formulários interativos permitem aos autores de páginas Web dotar a sua página web de elementos interativos que permitem por exemplo um diálogo com usuário da internet , à maneira coupons-réponse ...
CMS (Content Management System) Ver Gestão de conteúdo Uma ferramenta de “CMS” (Content Management System, em português, Sistema de Gestão de conteúdo) é um síte web que dispõe de funcionalidades de publicação e oferecendo em especial um interface de administração (back...
Control - control.exe Ver control - control.exe O processo control.exe (controlo que significa Control Panel) é um processo genérico de Windows NT/2000/XP que corresponde ao painel de configuração. O ficheiro que corresponde a este processo está situado...
MSN os contatos sumiram. O que fazer? VerMeus contatos do MSN sumiram. O que fazer?* Pode ocorrer, no MSN, que de uma hora para outra alguns, ou até mesmo todos, contatos desapareçam de sua lista de contatos. Este tipo de incidente ocorre geralmente após uma atualização do Windows...
Tipos de contas no Windows XP: admininistrador e usuário VerTipos de contas no Windows XP: admninistrador e usuário Conta Administrador Conta usuário limitado Como saber quais as contas que existem em seu computador Por que é importante navegar com uma conta usuário? Quantas contas pode ter em um...
Redefinir senhas em contas google: orkut, gmail VerRedefinir senhas em contas google, gmail e orkut Se você estiver querendo redefinir sua senha, ou a esqueceu simplesmente, ou suspeita que alguém está usando sua identifiação em contas google e companhia (gmail e orkut que pertencem ao Google)...
Download Planilha Para Controle de Horas Trabalhadas 1.0 VerEste é um arquivo excel que auxiliará você a calcular as horas trabalhadas por cada um dos trabalhadores de sua emprêsa, calculando o valor a ser pago no final de um mês de trabalho. A planilha já vem com os campos preenchidos, gerando o calculos...
Webmaster (Administrador de sítio web) VerWebmaster (Administrador de síte web) O webmaster (igualmente chamado administrador de site web ou de webmestre) está encarregado da manutenção e da evolução do sítio web da empresa. A esse respeito, trabalha para definir a arquitectura e o...
COBIT (Control Objectives for Information and related Technologi VerIntrodução à COBIT O COBIT (Control Objectives for Information and related Technologies, ou "controlar os objectivos das tecnologias da informação") é uma metodologia de avaliação dos serviços informáticos da empresa, publicada em 1996...
Webmastering - Conteúdo editorial VerImportância do conteúdo Os visitantes voltam geralmente a um site por causa do seu conteúdo, mais do que pelo seu design. Os estudos efectuados sobre utilizadores da internet mostram que o factor principal de apreciação de um site é, em...