{"id":5218,"date":"2022-09-06T14:15:13","date_gmt":"2022-09-06T17:15:13","guid":{"rendered":"https:\/\/categoriaoutros.com.br\/?p=5218"},"modified":"2022-09-06T14:32:01","modified_gmt":"2022-09-06T17:32:01","slug":"php-exemplo-de-formulario-com-validacao-protecao-contra-spam-e-envio-repetido","status":"publish","type":"post","link":"https:\/\/categoriaoutros.com.br\/?p=5218","title":{"rendered":"PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Fun\u00e7\u00f5es do Nosso Formul\u00e1rio <\/h2>\n\n\n\n<p>O formul\u00e1rio de exemplo abaixo possui as seguintes funcionalidades:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Valida\u00e7\u00e3o de formul\u00e1rio<\/li><li>Envio de mensagem por e-mail<\/li><li>Prevenir SPAM<\/li><li>Impedir envio duplo<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Nossos Arquivos e Pastas para Nosso Formul\u00e1rio<\/h2>\n\n\n\n<pre>\u251c\u2500\u2500 <font color=\"#12488B\"><b>config<\/b><\/font>\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 app.php\n\u251c\u2500\u2500 <font color=\"#12488B\"><b>css<\/b><\/font>\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 style.css\n\u251c\u2500\u2500 <font color=\"#12488B\"><b>inc<\/b><\/font>\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 cabecalho.php\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 footer.php\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 get.php\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 header.php\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 mail.php\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 post.php\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 rodape.php\n\u2514\u2500\u2500 index.php\n<\/pre>\n\n\n\n<p>Criei a seguinte estrutura de arquivos e pastas:<\/p>\n\n\n\n<p><strong>config<\/strong>, <strong>css<\/strong> e <strong>inc<\/strong> s\u00e3o pastas. <\/p>\n\n\n\n<p>Dentro da pasta <strong>inc<\/strong> est\u00e3o os arquivos que vamos <strong>inc<\/strong>luir dentro de index.php usando a fun\u00e7\u00e3o require_once.<\/p>\n\n\n\n<p><strong>footer.php <\/strong>\u00e9 o nosso rodap\u00e9, <strong>header.php<\/strong> nosso cabe\u00e7alho, <strong>get.php<\/strong> nosso formul\u00e1rio, <strong>mail.php<\/strong> c\u00f3digo para enviar email, <strong>post.php<\/strong> \u00e9 o c\u00f3digo php que tratar\u00e1 o formul\u00e1rio e <strong>index.php<\/strong> nossa p\u00e1gina principal.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"has-text-align-center wp-block-heading\">Conte\u00fado de Cada Arquivo<\/h2>\n\n\n\n<p>Criei os arquivos colocando o seguinte conte\u00fado em cada um:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">header.php<\/h2>\n\n\n\n<p>O arquivo header.php cont\u00e9m a parte do cabe\u00e7alho do formul\u00e1rio de contato:<\/p>\n\n\n\n<pre><font color=\"#33C7DE\">&lt;!DOCTYPE html&gt;<\/font>\n&lt;<font color=\"#2A7BDE\">html<\/font> <font color=\"#33C7DE\">lang<\/font>=<font color=\"#A2734C\">&quot;pt&quot;<\/font>&gt;\n&lt;<font color=\"#2A7BDE\">head<\/font>&gt;\n    &lt;<font color=\"#2A7BDE\">meta<\/font> <font color=\"#33C7DE\">charset<\/font>=<font color=\"#A2734C\">&quot;UTF-8&quot;<\/font>&gt;\n    &lt;<font color=\"#2A7BDE\">meta<\/font> <font color=\"#33C7DE\">name<\/font>=<font color=\"#A2734C\">&quot;viewport&quot;<\/font> <font color=\"#33C7DE\">content<\/font>=<font color=\"#A2734C\">&quot;width=device-width, initial-scale=1.0&quot;<\/font>&gt;\n    &lt;<font color=\"#2A7BDE\">link<\/font> <font color=\"#33C7DE\">rel<\/font>=<font color=\"#A2734C\">&quot;stylesheet&quot;<\/font> <font color=\"#33C7DE\">href<\/font>=<font color=\"#A2734C\">&quot;css\/style.css&quot;<\/font>&gt;\n    &lt;<font color=\"#2A7BDE\">title<\/font>&gt;Formulario de Contato em PHP&lt;\/<font color=\"#2A7BDE\">title<\/font>&gt;\n&lt;\/<font color=\"#2A7BDE\">head<\/font>&gt;\n&lt;<font color=\"#2A7BDE\">body<\/font>&gt;\n    &lt;<font color=\"#2A7BDE\">main<\/font>&gt;\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">footer.php<\/h2>\n\n\n\n<p>O arquivo footer.php cont\u00e9m as tags HTML finais do cabe\u00e7alho:<\/p>\n\n\n\n<pre>  <font color=\"#2A7BDE\">&lt;\/main&gt;<\/font>\n<font color=\"#2A7BDE\">&lt;\/body&gt;<\/font>\n<font color=\"#2A7BDE\">&lt;\/html&gt;<\/font>\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">get.php<\/h2>\n\n\n\n<p>O arquivo get.php mostra o formul\u00e1rio de contato:<\/p>\n\n\n\n<pre><font color=\"#33C7DE\">&lt;?php<\/font> <font color=\"#2A7BDE\">if<\/font> (<font color=\"#33C7DE\">isset<\/font>(<font color=\"#F66151\">$message<\/font>)) : <font color=\"#33C7DE\">?&gt;<\/font>\n    <font color=\"#2A7BDE\">&lt;div<\/font> <font color=\"#33C7DE\">class=<\/font><font color=\"#A2734C\">&quot;alert alert-success&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font>\n        <font color=\"#33C7DE\">&lt;?<\/font>= <font color=\"#F66151\">$message<\/font> <font color=\"#33C7DE\">?&gt;<\/font>\n    <font color=\"#2A7BDE\">&lt;\/div&gt;<\/font>\n<font color=\"#33C7DE\">&lt;?php<\/font> <font color=\"#2A7BDE\">endif<\/font> <font color=\"#33C7DE\">?&gt;<\/font>\n\n<font color=\"#2A7BDE\">&lt;form<\/font> <font color=\"#33C7DE\">action=<\/font><font color=\"#A2734C\">&quot;index.php&quot;<\/font> <font color=\"#33C7DE\">method=<\/font><font color=\"#A2734C\">&quot;post&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font>\n    <font color=\"#2A7BDE\">&lt;header&gt;<\/font>\n        <font color=\"#2A7BDE\">&lt;h1&gt;<\/font>Envie uma Mensagem<font color=\"#2A7BDE\">&lt;\/h1&gt;<\/font>\n    <font color=\"#2A7BDE\">&lt;\/header&gt;<\/font>\n\n    <font color=\"#2A7BDE\">&lt;div&gt;<\/font>\n        <font color=\"#2A7BDE\">&lt;label<\/font> <font color=\"#33C7DE\">for=<\/font><font color=\"#A2734C\">&quot;name&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font>Name:<font color=\"#2A7BDE\">&lt;\/label&gt;<\/font>\n        <font color=\"#2A7BDE\">&lt;input<\/font> <font color=\"#33C7DE\">type=<\/font><font color=\"#A2734C\">&quot;text&quot;<\/font> <font color=\"#33C7DE\">value=<\/font><font color=\"#A2734C\">&quot;<\/font><font color=\"#33C7DE\">&lt;?<\/font>= <font color=\"#F66151\">$inputs<\/font>[<font color=\"#A2734C\">&apos;name&apos;<\/font>] ?? <font color=\"#A2734C\">&apos;&apos;<\/font> <font color=\"#33C7DE\">?&gt;<\/font><font color=\"#A2734C\">&quot;<\/font> <font color=\"#33C7DE\">name=<\/font><font color=\"#A2734C\">&quot;name&quot;<\/font> <font color=\"#33C7DE\">id=<\/font><font color=\"#A2734C\">&quot;name&quot;<\/font> <font color=\"#33C7DE\">placeholder=<\/font><font color=\"#A2734C\">&quot;Full <\/font>\n<font color=\"#A2734C\">name&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font>\n        <font color=\"#2A7BDE\">&lt;small&gt;<\/font><font color=\"#33C7DE\">&lt;?<\/font>= <font color=\"#F66151\">$errors<\/font>[<font color=\"#A2734C\">&apos;name&apos;<\/font>] ?? <font color=\"#A2734C\">&apos;&apos;<\/font> <font color=\"#33C7DE\">?&gt;<\/font><font color=\"#2A7BDE\">&lt;\/small&gt;<\/font>\n    <font color=\"#2A7BDE\">&lt;\/div&gt;<\/font>\n\n    <font color=\"#2A7BDE\">&lt;div&gt;<\/font>\n        <font color=\"#2A7BDE\">&lt;label<\/font> <font color=\"#33C7DE\">for=<\/font><font color=\"#A2734C\">&quot;email&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font>Email:<font color=\"#2A7BDE\">&lt;\/label&gt;<\/font>\n        <font color=\"#2A7BDE\">&lt;input<\/font> <font color=\"#33C7DE\">type=<\/font><font color=\"#A2734C\">&quot;email&quot;<\/font> <font color=\"#33C7DE\">name=<\/font><font color=\"#A2734C\">&quot;email&quot;<\/font> <font color=\"#33C7DE\">id=<\/font><font color=\"#A2734C\">&quot;email&quot;<\/font> <font color=\"#33C7DE\">value=<\/font><font color=\"#A2734C\">&quot;<\/font><font color=\"#33C7DE\">&lt;?<\/font>= <font color=\"#F66151\">$inputs<\/font>[<font color=\"#A2734C\">&apos;email&apos;<\/font>] ?? <font color=\"#A2734C\">&apos;&apos;<\/font> <font color=\"#33C7DE\">?&gt;<\/font><font color=\"#A2734C\">&quot;<\/font> \n<font color=\"#33C7DE\">placeholder=<\/font><font color=\"#A2734C\">&quot;Email address&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font>\n        <font color=\"#2A7BDE\">&lt;small&gt;<\/font><font color=\"#33C7DE\">&lt;?<\/font>= <font color=\"#F66151\">$errors<\/font>[<font color=\"#A2734C\">&apos;email&apos;<\/font>] ?? <font color=\"#A2734C\">&apos;&apos;<\/font> <font color=\"#33C7DE\">?&gt;<\/font><font color=\"#2A7BDE\">&lt;\/small&gt;<\/font>\n    <font color=\"#2A7BDE\">&lt;\/div&gt;<\/font>\n\n    <font color=\"#2A7BDE\">&lt;div&gt;<\/font>\n        <font color=\"#2A7BDE\">&lt;label<\/font> <font color=\"#33C7DE\">for=<\/font><font color=\"#A2734C\">&quot;subject&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font>Subject:<font color=\"#2A7BDE\">&lt;\/label&gt;<\/font>\n        <font color=\"#2A7BDE\">&lt;input<\/font> <font color=\"#33C7DE\">type=<\/font><font color=\"#A2734C\">&quot;subject&quot;<\/font> <font color=\"#33C7DE\">name=<\/font><font color=\"#A2734C\">&quot;subject&quot;<\/font> <font color=\"#33C7DE\">id=<\/font><font color=\"#A2734C\">&quot;subject&quot;<\/font> <font color=\"#33C7DE\">value=<\/font><font color=\"#A2734C\">&quot;<\/font><font color=\"#33C7DE\">&lt;?<\/font>= <font color=\"#F66151\">$inputs<\/font>[<font color=\"#A2734C\">&apos;subject&apos;<\/font>] ?? <font color=\"#A2734C\">&apos;&apos;<\/font> <font color=\"#33C7DE\">?&gt;<\/font><font color=\"#A2734C\">&quot;<\/font> \n<font color=\"#33C7DE\">placeholder=<\/font><font color=\"#A2734C\">&quot;Enter a subject&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font>\n        <font color=\"#2A7BDE\">&lt;small&gt;<\/font><font color=\"#33C7DE\">&lt;?<\/font>= <font color=\"#F66151\">$errors<\/font>[<font color=\"#A2734C\">&apos;subject&apos;<\/font>] ?? <font color=\"#A2734C\">&apos;&apos;<\/font> <font color=\"#33C7DE\">?&gt;<\/font><font color=\"#2A7BDE\">&lt;\/small&gt;<\/font>\n    <font color=\"#2A7BDE\">&lt;\/div&gt;<\/font>\n\n    <font color=\"#2A7BDE\">&lt;div&gt;<\/font>\n        <font color=\"#2A7BDE\">&lt;label<\/font> <font color=\"#33C7DE\">for=<\/font><font color=\"#A2734C\">&quot;message&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font>Message:<font color=\"#2A7BDE\">&lt;\/label&gt;<\/font>\n        <font color=\"#2A7BDE\">&lt;textarea<\/font> <font color=\"#33C7DE\">id=<\/font><font color=\"#A2734C\">&quot;message&quot;<\/font> <font color=\"#33C7DE\">name=<\/font><font color=\"#A2734C\">&quot;message&quot;<\/font> <font color=\"#33C7DE\">rows=<\/font><font color=\"#A2734C\">&quot;5&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font><font color=\"#33C7DE\">&lt;?<\/font>= <font color=\"#F66151\">$inputs<\/font>[<font color=\"#A2734C\">&apos;message&apos;<\/font>] ?? <font color=\"#A2734C\">&apos;&apos;<\/font> <font color=\"#33C7DE\">?&gt;<\/font><font color=\"#2A7BDE\">&lt;\/textarea&gt;<\/font>\n        <font color=\"#2A7BDE\">&lt;small&gt;<\/font><font color=\"#33C7DE\">&lt;?<\/font>= <font color=\"#F66151\">$errors<\/font>[<font color=\"#A2734C\">&apos;message&apos;<\/font>] ?? <font color=\"#A2734C\">&apos;&apos;<\/font> <font color=\"#33C7DE\">?&gt;<\/font><font color=\"#2A7BDE\">&lt;\/small&gt;<\/font>\n    <font color=\"#2A7BDE\">&lt;\/div&gt;<\/font>\n\n    <font color=\"#2A7BDE\">&lt;label<\/font> <font color=\"#33C7DE\">for=<\/font><font color=\"#A2734C\">&quot;nickname&quot;<\/font> <font color=\"#33C7DE\">aria-hidden=<\/font><font color=\"#A2734C\">&quot;true&quot;<\/font> <font color=\"#33C7DE\">class=<\/font><font color=\"#A2734C\">&quot;user-cannot-see&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font> Nickname\n        <font color=\"#2A7BDE\">&lt;input<\/font> <font color=\"#33C7DE\">type=<\/font><font color=\"#A2734C\">&quot;text&quot;<\/font> <font color=\"#33C7DE\">name=<\/font><font color=\"#A2734C\">&quot;nickname&quot;<\/font> <font color=\"#33C7DE\">id=<\/font><font color=\"#A2734C\">&quot;nickname&quot;<\/font> <font color=\"#33C7DE\">class=<\/font><font color=\"#A2734C\">&quot;user-cannot-see&quot;<\/font> <font color=\"#33C7DE\">tabindex=<\/font><font color=\"#A2734C\">&quot;-1&quot;<\/font> \n<font color=\"#33C7DE\">autocomplete=<\/font><font color=\"#A2734C\">&quot;off&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font>\n    <font color=\"#2A7BDE\">&lt;\/label&gt;<\/font>\n\n    <font color=\"#2A7BDE\">&lt;button<\/font> <font color=\"#33C7DE\">type=<\/font><font color=\"#A2734C\">&quot;submit&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font>Enviar Messagem<font color=\"#2A7BDE\">&lt;\/button&gt;<\/font>\n<font color=\"#2A7BDE\">&lt;\/form&gt;<\/font>\n<\/pre>\n\n\n\n<p>Como funciona? Vamos pegar algumas partes para explicar.<\/p>\n\n\n\n<p>O arquivo get.php mostra o formul\u00e1rio de contato:<\/p>\n\n\n\n<pre><font color=\"#33C7DE\">&lt;?php<\/font> <font color=\"#2A7BDE\">if<\/font> (<font color=\"#33C7DE\">isset<\/font>(<font color=\"#F66151\">$message<\/font>)) : <font color=\"#33C7DE\">?&gt;<\/font>\n    <font color=\"#2A7BDE\">&lt;div<\/font> <font color=\"#33C7DE\">class=<\/font><font color=\"#A2734C\">&quot;alert alert-success&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font>\n        <font color=\"#33C7DE\">&lt;?<\/font>= <font color=\"#F66151\">$message<\/font> <font color=\"#33C7DE\">?&gt;<\/font>\n    <font color=\"#2A7BDE\">&lt;\/div&gt;<\/font>\n<font color=\"#33C7DE\">&lt;?php<\/font> <font color=\"#2A7BDE\">endif<\/font> <font color=\"#33C7DE\">?&gt;<\/font><\/pre>\n\n\n\n<p>Segundo, preencha os campos de entrada com dados do array $inputs. Se o campo tiver dados inv\u00e1lidos, mostre a mensagem de erro do array $errors.<\/p>\n\n\n\n<p>Terceiro, adicione um honeypot ao formul\u00e1rio:<\/p>\n\n\n\n<pre><font color=\"#2A7BDE\">&lt;label<\/font> <font color=\"#33C7DE\">for=<\/font><font color=\"#A2734C\">&quot;nickname&quot;<\/font> <font color=\"#33C7DE\">aria-hidden=<\/font><font color=\"#A2734C\">&quot;true&quot;<\/font> <font color=\"#33C7DE\">class=<\/font><font color=\"#A2734C\">&quot;user-cannot-see&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font> Nickname\n        <font color=\"#2A7BDE\">&lt;input<\/font> <font color=\"#33C7DE\">type=<\/font><font color=\"#A2734C\">&quot;text&quot;<\/font> <font color=\"#33C7DE\">name=<\/font><font color=\"#A2734C\">&quot;nickname&quot;<\/font> <font color=\"#33C7DE\">id=<\/font><font color=\"#A2734C\">&quot;nickname&quot;<\/font> <font color=\"#33C7DE\">class=<\/font><font color=\"#A2734C\">&quot;user-cannot-see&quot;<\/font> <font color=\"#33C7DE\">tabindex=<\/font><font color=\"#A2734C\">&quot;-1&quot;<\/font> \n<font color=\"#33C7DE\">autocomplete=<\/font><font color=\"#A2734C\">&quot;off&quot;<\/font><font color=\"#2A7BDE\">&gt;<\/font>\n    <font color=\"#2A7BDE\">&lt;\/label&gt;<\/font>\n<\/pre>\n\n\n\n<p>J\u00e1 falamos sobre honeypot aqui: <a href=\"https:\/\/categoriaoutros.com.br\/?p=5194\">Termos: O que \u00e9 Honeypot para Desenvolvimento Web?<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">post.php<\/h2>\n\n\n\n<pre><font color=\"#33C7DE\">&lt;?php<\/font>\n\n<font color=\"#0F0D16\">\/\/ check the honeypot<\/font>\n<font color=\"#F66151\">$honeypot<\/font> = <font color=\"#33C7DE\">filter_input<\/font>(INPUT_POST, <font color=\"#A2734C\">&apos;nickname&apos;<\/font>, FILTER_SANITIZE_STRING);\n<font color=\"#2A7BDE\">if<\/font> (<font color=\"#F66151\">$honeypot<\/font>) {\n    <font color=\"#33C7DE\">header<\/font>(<font color=\"#F66151\">$_SERVER<\/font>[<font color=\"#A2734C\">&apos;SERVER_PROTOCOL&apos;<\/font>] . <font color=\"#A2734C\">&apos; 405 Method Not Allowed&apos;<\/font>);\n    <font color=\"#2A7BDE\">exit<\/font>;\n}\n\n<font color=\"#0F0D16\">\/\/ validate name<\/font>\n<font color=\"#F66151\">$name<\/font> = <font color=\"#33C7DE\">filter_input<\/font>(INPUT_POST, <font color=\"#A2734C\">&apos;name&apos;<\/font>, FILTER_SANITIZE_STRING);\n<font color=\"#F66151\">$inputs<\/font>[<font color=\"#A2734C\">&apos;name&apos;<\/font>] = <font color=\"#F66151\">$name<\/font>;\n<font color=\"#2A7BDE\">if<\/font> (!<font color=\"#F66151\">$name<\/font> || <font color=\"#33C7DE\">trim<\/font>(<font color=\"#F66151\">$name<\/font>) === <font color=\"#A2734C\">&apos;&apos;<\/font>) {\n    <font color=\"#F66151\">$errors<\/font>[<font color=\"#A2734C\">&apos;name&apos;<\/font>] = <font color=\"#A2734C\">&apos;Please enter your name&apos;<\/font>;\n}\n\n<font color=\"#0F0D16\">\/\/ validate email<\/font>\n<font color=\"#F66151\">$email<\/font> = <font color=\"#33C7DE\">filter_input<\/font>(INPUT_POST, <font color=\"#A2734C\">&apos;email&apos;<\/font>, FILTER_SANITIZE_EMAIL);\n<font color=\"#F66151\">$inputs<\/font>[<font color=\"#A2734C\">&apos;email&apos;<\/font>] = <font color=\"#F66151\">$email<\/font>;\n<font color=\"#2A7BDE\">if<\/font> (<font color=\"#F66151\">$email<\/font>) {\n    <font color=\"#F66151\">$email<\/font> = <font color=\"#33C7DE\">filter_var<\/font>(<font color=\"#F66151\">$email<\/font>, FILTER_SANITIZE_EMAIL);\n    <font color=\"#2A7BDE\">if<\/font> (!<font color=\"#F66151\">$email<\/font>) {\n        <font color=\"#F66151\">$errors<\/font>[<font color=\"#A2734C\">&apos;email&apos;<\/font>] = <font color=\"#A2734C\">&apos;Please enter a valid email&apos;<\/font>;\n    }\n} <font color=\"#2A7BDE\">else<\/font> {\n    <font color=\"#F66151\">$errors<\/font>[<font color=\"#A2734C\">&apos;email&apos;<\/font>] = <font color=\"#A2734C\">&apos;Please enter an email&apos;<\/font>;\n}\n\n<font color=\"#0F0D16\">\/\/ validate subject<\/font>\n<font color=\"#F66151\">$subject<\/font> = <font color=\"#33C7DE\">filter_input<\/font>(INPUT_POST, <font color=\"#A2734C\">&apos;subject&apos;<\/font>, FILTER_SANITIZE_STRING);\n<font color=\"#F66151\">$inputs<\/font>[<font color=\"#A2734C\">&apos;subject&apos;<\/font>] = <font color=\"#F66151\">$subject<\/font>;\n<font color=\"#2A7BDE\">if<\/font> (!<font color=\"#F66151\">$subject<\/font> || <font color=\"#33C7DE\">trim<\/font>(<font color=\"#F66151\">$subject<\/font>) === <font color=\"#A2734C\">&apos;&apos;<\/font>) {\n    <font color=\"#F66151\">$errors<\/font>[<font color=\"#A2734C\">&apos;subject&apos;<\/font>] = <font color=\"#A2734C\">&apos;Please enter the subject&apos;<\/font>;\n}\n\n<font color=\"#0F0D16\">\/\/ validate message<\/font>\n<font color=\"#F66151\">$message<\/font> = <font color=\"#33C7DE\">filter_input<\/font>(INPUT_POST, <font color=\"#A2734C\">&apos;message&apos;<\/font>, FILTER_SANITIZE_STRING);\n<font color=\"#F66151\">$inputs<\/font>[<font color=\"#A2734C\">&apos;message&apos;<\/font>] = <font color=\"#F66151\">$message<\/font>;\n<font color=\"#2A7BDE\">if<\/font> (!<font color=\"#F66151\">$message<\/font> || <font color=\"#33C7DE\">trim<\/font>(<font color=\"#F66151\">$message<\/font>) === <font color=\"#A2734C\">&apos;&apos;<\/font>) {\n    <font color=\"#F66151\">$errors<\/font>[<font color=\"#A2734C\">&apos;message&apos;<\/font>] = <font color=\"#A2734C\">&apos;Please enter the message&apos;<\/font>;\n}\n<\/pre>\n\n\n\n<p>O post.php verifica o honeypot e retorna o c\u00f3digo de status HTTP 405 se detectar o spambot. Caso contr\u00e1rio, ele limpa e valida os campos de entrada, incluindo nome, email, assunto e mensagem.<\/p>\n\n\n\n<p>J\u00e1 falamos sobre spambots tamb\u00e9m: <a href=\"https:\/\/categoriaoutros.com.br\/?p=4963\">O que \u00e9 Spambot em Inform\u00e1tica?<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">app.php<\/h2>\n\n\n\n<p>O app.php armazena as informa\u00e7\u00f5es de configura\u00e7\u00e3o, por exemplo, o endere\u00e7o de e-mail do destinat\u00e1rio<\/p>\n\n\n\n<pre><font color=\"#33C7DE\">&lt;?php<\/font>\n\n<font color=\"#2A7BDE\">return<\/font> [\n    <font color=\"#A2734C\">&apos;mail&apos;<\/font> =&gt; [\n        <font color=\"#A2734C\">&apos;to_email&apos;<\/font> =&gt; <font color=\"#A2734C\">&apos;webmaster@phptutorial.net&apos;<\/font>\n    ]\n];\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">mail.php<\/h2>\n\n\n\n<p>O mail.php obt\u00e9m o endere\u00e7o de e-mail do destinat\u00e1rio do arquivo de configura\u00e7\u00e3o app.php. Ele envia para a mensagem inserida no formul\u00e1rio de contato usando a fun\u00e7\u00e3o mail():<\/p>\n\n\n\n<pre><font color=\"#33C7DE\">&lt;?php<\/font>\n\n<font color=\"#0F0D16\">\/\/ get email from the config file<\/font>\n<font color=\"#F66151\">$config<\/font> = <font color=\"#2A7BDE\">require_once<\/font> <font color=\"#F66151\">__DIR__<\/font> . <font color=\"#A2734C\">&apos;\/..\/config\/app.php&apos;<\/font>;\n<font color=\"#F66151\">$recipient_email<\/font> = <font color=\"#F66151\">$config<\/font>[<font color=\"#A2734C\">&apos;mail&apos;<\/font>][<font color=\"#A2734C\">&apos;to_email&apos;<\/font>];\n\n<font color=\"#0F0D16\">\/\/ contact information<\/font>\n<font color=\"#F66151\">$contact_name<\/font> = <font color=\"#F66151\">$inputs<\/font>[<font color=\"#A2734C\">&apos;name&apos;<\/font>];\n<font color=\"#F66151\">$contact_email<\/font> = <font color=\"#F66151\">$inputs<\/font>[<font color=\"#A2734C\">&apos;email&apos;<\/font>];\n<font color=\"#F66151\">$message<\/font> = <font color=\"#F66151\">$inputs<\/font>[<font color=\"#A2734C\">&apos;message&apos;<\/font>];\n<font color=\"#F66151\">$subject<\/font> = <font color=\"#F66151\">$inputs<\/font>[<font color=\"#A2734C\">&apos;subject&apos;<\/font>];\n\n<font color=\"#0F0D16\">\/\/ Email header<\/font>\n<font color=\"#F66151\">$headers<\/font>[] = <font color=\"#A2734C\">&apos;MIME-Version: 1.0&apos;<\/font>;\n<font color=\"#F66151\">$headers<\/font>[] = <font color=\"#A2734C\">&apos;Content-type: text\/html; charset=utf-8&apos;<\/font>;\n<font color=\"#F66151\">$headers<\/font>[] = <font color=\"#A2734C\">&quot;To: $recipient_email&quot;<\/font>;\n<font color=\"#F66151\">$headers<\/font>[] = <font color=\"#A2734C\">&quot;From: $contact_email&quot;<\/font>;\n<font color=\"#F66151\">$header<\/font> = <font color=\"#33C7DE\">implode<\/font>(<font color=\"#A2734C\">&apos;\\r\\n&apos;<\/font>, <font color=\"#F66151\">$headers<\/font>);\n\n<font color=\"#33C7DE\">mail<\/font>(<font color=\"#F66151\">$recipient_email<\/font>, <font color=\"#F66151\">$subject<\/font>, <font color=\"#F66151\">$message<\/font>, <font color=\"#F66151\">$header<\/font>);\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">index.php<\/h2>\n\n\n\n<p>O arquivo index.php cont\u00e9m a l\u00f3gica principal:<\/p>\n\n\n\n<pre><font color=\"#33C7DE\">&lt;?php<\/font>\n\n<font color=\"#33C7DE\">session_start<\/font>();\n\n<font color=\"#F66151\">$errors<\/font> = [];\n<font color=\"#F66151\">$inputs<\/font> = [];\n\n<font color=\"#F66151\">$request_method<\/font> = <font color=\"#33C7DE\">strtoupper<\/font>(<font color=\"#F66151\">$_SERVER<\/font>[<font color=\"#A2734C\">&apos;REQUEST_METHOD&apos;<\/font>]);\n\n<font color=\"#2A7BDE\">if<\/font> (<font color=\"#F66151\">$request_method<\/font> === <font color=\"#A2734C\">&apos;GET&apos;<\/font>) {\n\n    \/\/ show the message\n    <font color=\"#2A7BDE\">if<\/font> (<font color=\"#33C7DE\">isset<\/font>(<font color=\"#F66151\">$_SESSION<\/font>[<font color=\"#A2734C\">&apos;message&apos;<\/font>])) {\n        <font color=\"#F66151\">$message<\/font> = <font color=\"#F66151\">$_SESSION<\/font>[<font color=\"#A2734C\">&apos;message&apos;<\/font>];\n        <font color=\"#33C7DE\">unset<\/font>(<font color=\"#F66151\">$_SESSION<\/font>[<font color=\"#A2734C\">&apos;message&apos;<\/font>]);\n    } <font color=\"#2A7BDE\">elseif<\/font> (<font color=\"#33C7DE\">isset<\/font>(<font color=\"#F66151\">$_SESSION<\/font>[<font color=\"#A2734C\">&apos;inputs&apos;<\/font>]) &amp;&amp; <font color=\"#33C7DE\">isset<\/font>(<font color=\"#F66151\">$_SESSION<\/font>[<font color=\"#A2734C\">&apos;errors&apos;<\/font>])) {\n        <font color=\"#F66151\">$errors<\/font> = <font color=\"#F66151\">$_SESSION<\/font>[<font color=\"#A2734C\">&apos;errors&apos;<\/font>];\n        <font color=\"#33C7DE\">unset<\/font>(<font color=\"#F66151\">$_SESSION<\/font>[<font color=\"#A2734C\">&apos;errors&apos;<\/font>]);\n        <font color=\"#F66151\">$inputs<\/font> = <font color=\"#F66151\">$_SESSION<\/font>[<font color=\"#A2734C\">&apos;inputs&apos;<\/font>];\n        <font color=\"#33C7DE\">unset<\/font>(<font color=\"#F66151\">$_SESSION<\/font>[<font color=\"#A2734C\">&apos;inputs&apos;<\/font>]);\n    }\n    \/\/ show the form\n    <font color=\"#2A7BDE\">require_once<\/font> <font color=\"#F66151\">__DIR__<\/font> . <font color=\"#A2734C\">&apos;\/inc\/get.php&apos;<\/font>;\n} <font color=\"#2A7BDE\">elseif<\/font> (<font color=\"#F66151\">$request_method<\/font> === <font color=\"#A2734C\">&apos;POST&apos;<\/font>) {\n    \/\/ check the honeypot and validate the field\n    <font color=\"#2A7BDE\">require_once<\/font> <font color=\"#F66151\">__DIR__<\/font> . <font color=\"#A2734C\">&apos;\/inc\/post.php&apos;<\/font>;\n\n    <font color=\"#2A7BDE\">if<\/font> (!<font color=\"#F66151\">$errors<\/font>) {\n        \/\/ send an email\n        <font color=\"#2A7BDE\">require_once<\/font> <font color=\"#F66151\">__DIR__<\/font> . <font color=\"#A2734C\">&apos;\/inc\/mail.php&apos;<\/font>;\n        \/\/ set the message\n        <font color=\"#F66151\">$_SESSION<\/font>[<font color=\"#A2734C\">&apos;message&apos;<\/font>] =  <font color=\"#A2734C\">&apos;Thanks for contacting us! We will be in touch with you shortly.&apos;<\/font>;\n    } <font color=\"#2A7BDE\">else<\/font> {\n        <font color=\"#F66151\">$_SESSION<\/font>[<font color=\"#A2734C\">&apos;errors&apos;<\/font>] =   <font color=\"#F66151\">$errors<\/font>;\n        <font color=\"#F66151\">$_SESSION<\/font>[<font color=\"#A2734C\">&apos;inputs&apos;<\/font>] =   <font color=\"#F66151\">$inputs<\/font>;\n    }\n\n    <font color=\"#33C7DE\">header<\/font>(<font color=\"#A2734C\">&apos;Location: index.php&apos;<\/font>, <font color=\"#2A7BDE\">true<\/font>, <font color=\"#2A7BDE\">303<\/font>);\n    <font color=\"#2A7BDE\">exit<\/font>;\n}\n<\/pre>\n\n\n\n<p>Como funciona?<\/p>\n\n\n\n<p>Primeiro, mostre o formul\u00e1rio de contato se o m\u00e9todo de solicita\u00e7\u00e3o HTTP for GET. Al\u00e9m disso, obtenha os dados $message, $errors e $inputs do $_SESSION.<\/p>\n\n\n\n<p>Segundo, manipule o envio do formul\u00e1rio se o m\u00e9todo de solicita\u00e7\u00e3o HTTP for POST, envie um e-mail se n\u00e3o houver erro e redirecione para o formul\u00e1rio de contato. Observe que usamos a t\u00e9cnica PRG (Post-Redirect-Get) para evitar o problema de envio duplo.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n","protected":false},"excerpt":{"rendered":"<p>Fun\u00e7\u00f5es do Nosso Formul\u00e1rio O formul\u00e1rio de exemplo abaixo possui as seguintes funcionalidades: Valida\u00e7\u00e3o de formul\u00e1rio Envio de mensagem por e-mail Prevenir SPAM Impedir envio duplo Nossos Arquivos e Pastas para Nosso Formul\u00e1rio \u251c\u2500\u2500 config \u2502\u00a0\u00a0 \u2514\u2500\u2500 app.php \u251c\u2500\u2500 css \u2502\u00a0\u00a0 \u2514\u2500\u2500 style.css \u251c\u2500\u2500 inc \u2502\u00a0\u00a0 \u251c\u2500\u2500 cabecalho.php \u2502\u00a0\u00a0 \u251c\u2500\u2500 footer.php \u2502\u00a0\u00a0 \u251c\u2500\u2500 get.php \u2502\u00a0\u00a0&#8230;<\/p>\n<p class=\"more-link-wrap\"><a href=\"https:\/\/categoriaoutros.com.br\/?p=5218\" class=\"more-link\">Read More<span class=\"screen-reader-text\"> &ldquo;PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido&rdquo;<\/span> &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,1622],"tags":[2286,1623,2288,2291,2289,2287],"class_list":["post-5218","post","type-post","status-publish","format-standard","hentry","category-informatica-dicas","category-php","tag-exemplo-de-formulario-em-php","tag-php","tag-php-envio-de-mensagem-por-e-mail","tag-php-impedir-envio-duplo","tag-php-prevenir-spam","tag-php-validacao-de-formulario"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido - Categoria Outros<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/categoriaoutros.com.br\/?p=5218\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido - Categoria Outros\" \/>\n<meta property=\"og:description\" content=\"Fun\u00e7\u00f5es do Nosso Formul\u00e1rio O formul\u00e1rio de exemplo abaixo possui as seguintes funcionalidades: Valida\u00e7\u00e3o de formul\u00e1rio Envio de mensagem por e-mail Prevenir SPAM Impedir envio duplo Nossos Arquivos e Pastas para Nosso Formul\u00e1rio \u251c\u2500\u2500 config \u2502\u00a0\u00a0 \u2514\u2500\u2500 app.php \u251c\u2500\u2500 css \u2502\u00a0\u00a0 \u2514\u2500\u2500 style.css \u251c\u2500\u2500 inc \u2502\u00a0\u00a0 \u251c\u2500\u2500 cabecalho.php \u2502\u00a0\u00a0 \u251c\u2500\u2500 footer.php \u2502\u00a0\u00a0 \u251c\u2500\u2500 get.php \u2502\u00a0\u00a0...Read More &ldquo;PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido&rdquo; &raquo;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/categoriaoutros.com.br\/?p=5218\" \/>\n<meta property=\"og:site_name\" content=\"Categoria Outros\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/categoriaoutros\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-06T17:15:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-06T17:32:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/pinguim-paginas-padrao.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1022\" \/>\n\t<meta property=\"og:image:height\" content=\"722\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Categoria: Outros\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CategoriaOutros\" \/>\n<meta name=\"twitter:site\" content=\"@CategoriaOutros\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Categoria: Outros\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=5218#article\",\"isPartOf\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=5218\"},\"author\":{\"name\":\"Categoria: Outros\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/ba0f432708449436912bd6736864bb40\"},\"headline\":\"PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido\",\"datePublished\":\"2022-09-06T17:15:13+00:00\",\"dateModified\":\"2022-09-06T17:32:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=5218\"},\"wordCount\":454,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/#organization\"},\"keywords\":[\"exemplo de formul\u00e1rio em php.\",\"php\",\"php Envio de mensagem por e-mail\",\"php Impedir envio duplo\",\"php Prevenir SPAM\",\"php Valida\u00e7\u00e3o de formul\u00e1rio\"],\"articleSection\":[\"Inform\u00e1tica\",\"PHP\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/categoriaoutros.com.br\/?p=5218#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=5218\",\"url\":\"https:\/\/categoriaoutros.com.br\/?p=5218\",\"name\":\"PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido - Categoria Outros\",\"isPartOf\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/#website\"},\"datePublished\":\"2022-09-06T17:15:13+00:00\",\"dateModified\":\"2022-09-06T17:32:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=5218#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/categoriaoutros.com.br\/?p=5218\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=5218#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/categoriaoutros.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#website\",\"url\":\"https:\/\/categoriaoutros.com.br\/\",\"name\":\"Categoria Outros\",\"description\":\"Assuntos Diversos\",\"publisher\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/categoriaoutros.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#organization\",\"name\":\"Categoria Outros\",\"alternateName\":\"Categoria Outros\",\"url\":\"https:\/\/categoriaoutros.com.br\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/categoriaoutros-logo.jpg\",\"contentUrl\":\"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/categoriaoutros-logo.jpg\",\"width\":400,\"height\":400,\"caption\":\"Categoria Outros\"},\"image\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/categoriaoutros\",\"https:\/\/twitter.com\/CategoriaOutros\",\"https:\/\/br.pinterest.com\/CategoriaOutros\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/ba0f432708449436912bd6736864bb40\",\"name\":\"Categoria: Outros\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ed97775f0ab50750ed638ed3417ea85e19ced2c648da167a108e393ae5fd9e33?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ed97775f0ab50750ed638ed3417ea85e19ced2c648da167a108e393ae5fd9e33?s=96&d=mm&r=g\",\"caption\":\"Categoria: Outros\"},\"sameAs\":[\"http:\/\/categoriaoutros.com.br\"],\"url\":\"https:\/\/categoriaoutros.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido - Categoria Outros","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/categoriaoutros.com.br\/?p=5218","og_locale":"pt_BR","og_type":"article","og_title":"PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido - Categoria Outros","og_description":"Fun\u00e7\u00f5es do Nosso Formul\u00e1rio O formul\u00e1rio de exemplo abaixo possui as seguintes funcionalidades: Valida\u00e7\u00e3o de formul\u00e1rio Envio de mensagem por e-mail Prevenir SPAM Impedir envio duplo Nossos Arquivos e Pastas para Nosso Formul\u00e1rio \u251c\u2500\u2500 config \u2502\u00a0\u00a0 \u2514\u2500\u2500 app.php \u251c\u2500\u2500 css \u2502\u00a0\u00a0 \u2514\u2500\u2500 style.css \u251c\u2500\u2500 inc \u2502\u00a0\u00a0 \u251c\u2500\u2500 cabecalho.php \u2502\u00a0\u00a0 \u251c\u2500\u2500 footer.php \u2502\u00a0\u00a0 \u251c\u2500\u2500 get.php \u2502\u00a0\u00a0...Read More &ldquo;PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido&rdquo; &raquo;","og_url":"https:\/\/categoriaoutros.com.br\/?p=5218","og_site_name":"Categoria Outros","article_publisher":"https:\/\/www.facebook.com\/categoriaoutros","article_published_time":"2022-09-06T17:15:13+00:00","article_modified_time":"2022-09-06T17:32:01+00:00","og_image":[{"width":1022,"height":722,"url":"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/pinguim-paginas-padrao.webp","type":"image\/webp"}],"author":"Categoria: Outros","twitter_card":"summary_large_image","twitter_creator":"@CategoriaOutros","twitter_site":"@CategoriaOutros","twitter_misc":{"Escrito por":"Categoria: Outros","Est. tempo de leitura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/categoriaoutros.com.br\/?p=5218#article","isPartOf":{"@id":"https:\/\/categoriaoutros.com.br\/?p=5218"},"author":{"name":"Categoria: Outros","@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/ba0f432708449436912bd6736864bb40"},"headline":"PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido","datePublished":"2022-09-06T17:15:13+00:00","dateModified":"2022-09-06T17:32:01+00:00","mainEntityOfPage":{"@id":"https:\/\/categoriaoutros.com.br\/?p=5218"},"wordCount":454,"commentCount":0,"publisher":{"@id":"https:\/\/categoriaoutros.com.br\/#organization"},"keywords":["exemplo de formul\u00e1rio em php.","php","php Envio de mensagem por e-mail","php Impedir envio duplo","php Prevenir SPAM","php Valida\u00e7\u00e3o de formul\u00e1rio"],"articleSection":["Inform\u00e1tica","PHP"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/categoriaoutros.com.br\/?p=5218#respond"]}]},{"@type":"WebPage","@id":"https:\/\/categoriaoutros.com.br\/?p=5218","url":"https:\/\/categoriaoutros.com.br\/?p=5218","name":"PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido - Categoria Outros","isPartOf":{"@id":"https:\/\/categoriaoutros.com.br\/#website"},"datePublished":"2022-09-06T17:15:13+00:00","dateModified":"2022-09-06T17:32:01+00:00","breadcrumb":{"@id":"https:\/\/categoriaoutros.com.br\/?p=5218#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/categoriaoutros.com.br\/?p=5218"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/categoriaoutros.com.br\/?p=5218#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/categoriaoutros.com.br\/"},{"@type":"ListItem","position":2,"name":"PHP: Exemplo de Formul\u00e1rio com Valida\u00e7\u00e3o, Prote\u00e7\u00e3o Contra Spam e Envio Repetido"}]},{"@type":"WebSite","@id":"https:\/\/categoriaoutros.com.br\/#website","url":"https:\/\/categoriaoutros.com.br\/","name":"Categoria Outros","description":"Assuntos Diversos","publisher":{"@id":"https:\/\/categoriaoutros.com.br\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/categoriaoutros.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/categoriaoutros.com.br\/#organization","name":"Categoria Outros","alternateName":"Categoria Outros","url":"https:\/\/categoriaoutros.com.br\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/logo\/image\/","url":"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/categoriaoutros-logo.jpg","contentUrl":"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/categoriaoutros-logo.jpg","width":400,"height":400,"caption":"Categoria Outros"},"image":{"@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/categoriaoutros","https:\/\/twitter.com\/CategoriaOutros","https:\/\/br.pinterest.com\/CategoriaOutros\/"]},{"@type":"Person","@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/ba0f432708449436912bd6736864bb40","name":"Categoria: Outros","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ed97775f0ab50750ed638ed3417ea85e19ced2c648da167a108e393ae5fd9e33?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ed97775f0ab50750ed638ed3417ea85e19ced2c648da167a108e393ae5fd9e33?s=96&d=mm&r=g","caption":"Categoria: Outros"},"sameAs":["http:\/\/categoriaoutros.com.br"],"url":"https:\/\/categoriaoutros.com.br\/?author=1"}]}},"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/posts\/5218","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5218"}],"version-history":[{"count":4,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/posts\/5218\/revisions"}],"predecessor-version":[{"id":5223,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/posts\/5218\/revisions\/5223"}],"wp:attachment":[{"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}