{"id":2435,"date":"2021-08-05T09:49:05","date_gmt":"2021-08-05T09:49:05","guid":{"rendered":"https:\/\/phptutorial.net\/?page_id=2435"},"modified":"2025-04-08T04:13:41","modified_gmt":"2025-04-08T04:13:41","slug":"php-contact-form","status":"publish","type":"page","link":"https:\/\/www.phptutorial.net\/php-tutorial\/php-contact-form\/","title":{"rendered":"PHP Contact Form"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you&#8217;ll learn how to build a contact form in PHP that includes form validation, sending email, honeypot, etc.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='introduction-to-the-php-contact-form'>Introduction to the PHP contact form <a href=\"#introduction-to-the-php-contact-form\" class=\"anchor\" id=\"introduction-to-the-php-contact-form\" title=\"Anchor for Introduction to the PHP contact form\">#<\/a><\/h2>\n\n\n\n<p>A contact form allows visitors of a website to leave messages. Typically, a contact form has the name, email, subject, and message input fields:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/phptutorial.net\/app\/contact-form\/\"><img loading=\"lazy\" decoding=\"async\" width=\"491\" height=\"715\" src=\"https:\/\/phptutorial.net\/wp-content\/uploads\/2021\/08\/php-contact-form.png\" alt=\"PHP contact form\" class=\"wp-image-2437\" srcset=\"https:\/\/www.phptutorial.net\/wp-content\/uploads\/2021\/08\/php-contact-form.png 491w, https:\/\/www.phptutorial.net\/wp-content\/uploads\/2021\/08\/php-contact-form-206x300.png 206w\" sizes=\"auto, (max-width: 491px) 100vw, 491px\" \/><\/a><\/figure>\n\n\n\n<p>The visitors need to fill out these fields and click the submit (or send) button to send a message. In PHP, you can <a href=\"https:\/\/phptutorial.net\/php-tutorial\/php-form-validation\/\">validate the form data<\/a> and <a href=\"https:\/\/phptutorial.net\/php-tutorial\/php-mail\/\">send the message to an email address<\/a>.<\/p>\n\n\n\n<p>The contact form is a target for spammers who use spambots to send unsolicited messages for advertising, phishing, spreading malware, etc.<\/p>\n\n\n\n<p>A spambot is software that automates the spam activities like filling out and submitting contact forms automatically.<\/p>\n\n\n\n<p>To build a spam-free contact form, you can add a captcha to it. Sometimes, captchas are very difficult to read. Hence, they do not create a good experience for legitimate users.<\/p>\n\n\n\n<p>To avoid using a captcha while protecting the contact form from spam, you can use a honeypot to trick spambots.<\/p>\n\n\n\n<p>A honeypot is a field on the form that the visitor cannot see, but spambots can. When a spambot sees the honeypot field, it fills the field with a value. In PHP, you can check if the honeypot has a value and skip sending the message.<\/p>\n\n\n\n<p>To create a honeypot, you need to have a CSS class that completely hide the honeypot field as follows:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-class\">.user-cannot-see<\/span> {\n    <span class=\"hljs-attribute\">display<\/span>:none\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>And you have a honeypot field on the form:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"nickname\"<\/span> <span class=\"hljs-attr\">aria-hidden<\/span>=<span class=\"hljs-string\">\"true\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"user-cannot-see\"<\/span>&gt;<\/span> Nickname\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\"<\/span> \n           <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"nickname\"<\/span> \n           <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"nickname\"<\/span> \n           <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"user-cannot-see\"<\/span> \n           <span class=\"hljs-attr\">autocomplete<\/span>=<span class=\"hljs-string\">\"off\"<\/span> \n           <span class=\"hljs-attr\">tabindex<\/span>=<span class=\"hljs-string\">\"-1\"<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Note that the name of the honeypot should look legitimate. Recently, the spambot has become smarter that can detect the honeypot.<\/p>\n\n\n\n<p>To deal with these smart spambots, you need a smart honeypot. For example, a smart honeypot may have a different name for each request. Additionally, its location on the form is changed randomly.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='creating-the-contact-form'>Creating the contact form <a href=\"#creating-the-contact-form\" class=\"anchor\" id=\"creating-the-contact-form\" title=\"Anchor for Creating the contact form\">#<\/a><\/h2>\n\n\n\n<p>We&#8217;ll build a <a href=\"https:\/\/phptutorial.net\/app\/contact-form\/\" target=\"_blank\" rel=\"noreferrer noopener\">contact form<\/a> as shown in the following picture:<\/p>\n\n\n\n<p>The contact form has the following features:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Form validation<\/li>\n\n\n\n<li>Sending message via email.<\/li>\n\n\n\n<li>Prevent spam using the honeypot technique.<\/li>\n\n\n\n<li>Prevent double submit.<\/li>\n<\/ul>\n\n\n\n<p>Here&#8217;s the complete contact form:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-meta\">&lt;?php<\/span>\n\nsession_start();\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">check_honeypot<\/span><span class=\"hljs-params\">()<\/span><\/span>{\n    <span class=\"hljs-comment\">\/\/ check the honeypot<\/span>\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'honeypot'<\/span>)){\n        $honeypot = trim($_POST&#91;<span class=\"hljs-string\">'honeypot'<\/span>]);\n        <span class=\"hljs-keyword\">if<\/span> ($honeypot) {\n            header($_SERVER&#91;<span class=\"hljs-string\">'SERVER_PROTOCOL'<\/span>] . <span class=\"hljs-string\">' 405 Method Not Allowed'<\/span>);\n            <span class=\"hljs-keyword\">exit<\/span>;\n        }\n    }\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">send_email<\/span><span class=\"hljs-params\">($from_email, $message, $subject, $recipient_email)<\/span> <\/span>{\n    <span class=\"hljs-comment\">\/\/ Email header<\/span>\n    $headers&#91;] = <span class=\"hljs-string\">'MIME-Version: 1.0'<\/span>;\n    $headers&#91;] = <span class=\"hljs-string\">'Content-type: text\/html; charset=utf-8'<\/span>;\n    $headers&#91;] = <span class=\"hljs-string\">\"To: $recipient_email\"<\/span>;\n    $headers&#91;] = <span class=\"hljs-string\">\"From: $from_email\"<\/span>;\n    $header = implode(<span class=\"hljs-string\">'\\r\\n'<\/span>, $headers);\n\n    <span class=\"hljs-comment\">\/\/ send email<\/span>\n    mail($recipient_email, $subject, $message, $header);\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">validate<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n\n    $inputs = &#91;];\n    $errors = &#91;];   \n\n    <span class=\"hljs-comment\">\/\/ validate name<\/span>\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'name'<\/span>)) {\n        $inputs&#91;<span class=\"hljs-string\">'name'<\/span>] = trim($_POST&#91;<span class=\"hljs-string\">'name'<\/span>]);\n        <span class=\"hljs-keyword\">if<\/span> (trim($inputs&#91;<span class=\"hljs-string\">'name'<\/span>]) === <span class=\"hljs-string\">''<\/span>) {\n            $errors&#91;<span class=\"hljs-string\">'name'<\/span>] = <span class=\"hljs-string\">'Please enter your name'<\/span>;\n        }    \n    }\n\n    <span class=\"hljs-comment\">\/\/ validate email<\/span>\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'email'<\/span>)) {\n        $inputs&#91;<span class=\"hljs-string\">'email'<\/span>] = trim($_POST&#91;<span class=\"hljs-string\">'email'<\/span>]);\n        <span class=\"hljs-comment\">\/\/ validate email<\/span>\n        <span class=\"hljs-keyword\">if<\/span> (!filter_var($inputs&#91;<span class=\"hljs-string\">'email'<\/span>], FILTER_VALIDATE_EMAIL)) {\n            $errors&#91;<span class=\"hljs-string\">'email'<\/span>] = <span class=\"hljs-string\">'Please enter a valid email address'<\/span>;\n        }\n    } <span class=\"hljs-keyword\">else<\/span> {\n        $errors&#91;<span class=\"hljs-string\">'email'<\/span>] = <span class=\"hljs-string\">'Please enter your address'<\/span>;\n    }\n\n\n    <span class=\"hljs-comment\">\/\/ validate subject<\/span>\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'subject'<\/span>)) {\n        $inputs&#91;<span class=\"hljs-string\">'subject'<\/span>] = trim($_POST&#91;<span class=\"hljs-string\">'subject'<\/span>]);\n        <span class=\"hljs-keyword\">if<\/span> (trim($inputs&#91;<span class=\"hljs-string\">'subject'<\/span>]) === <span class=\"hljs-string\">''<\/span>) {\n            $errors&#91;<span class=\"hljs-string\">'subject'<\/span>] = <span class=\"hljs-string\">'Please enter a subject'<\/span>;\n        }    \n    } <span class=\"hljs-keyword\">else<\/span>{\n        $errors&#91;<span class=\"hljs-string\">'subject'<\/span>] = <span class=\"hljs-string\">'Please enter a subject'<\/span>;\n    }\n\n    <span class=\"hljs-comment\">\/\/ validate message<\/span>\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'message'<\/span>)) {\n        $inputs&#91;<span class=\"hljs-string\">'message'<\/span>] = trim($_POST&#91;<span class=\"hljs-string\">'message'<\/span>]);\n        <span class=\"hljs-keyword\">if<\/span> (trim($inputs&#91;<span class=\"hljs-string\">'message'<\/span>]) === <span class=\"hljs-string\">''<\/span>) {\n            $errors&#91;<span class=\"hljs-string\">'message'<\/span>] = <span class=\"hljs-string\">'Please enter a message'<\/span>;\n        }    \n    } <span class=\"hljs-keyword\">else<\/span> {\n        $errors&#91;<span class=\"hljs-string\">'message'<\/span>] = <span class=\"hljs-string\">'Please enter a message'<\/span>;\n    }\n\n    <span class=\"hljs-keyword\">return<\/span> &#91;$inputs, $errors];\n}\n\n\n$request_method = $_SERVER&#91;<span class=\"hljs-string\">'REQUEST_METHOD'<\/span>];\n\n\n<span class=\"hljs-keyword\">if<\/span>($request_method === <span class=\"hljs-string\">'POST'<\/span>) {\n   \n    $config = &#91;\n        <span class=\"hljs-string\">'mail'<\/span> =&gt; &#91;\n            <span class=\"hljs-string\">'to_email'<\/span> =&gt; <span class=\"hljs-string\">'webmaster@phptutorial.net'<\/span>\n        ]\n    ];\n\n    <span class=\"hljs-comment\">\/\/ check honeypot<\/span>\n    check_honeypot();\n\n    <span class=\"hljs-comment\">\/\/ validate inputs<\/span>\n    &#91;$inputs, $errors] = validate();\n\n    <span class=\"hljs-keyword\">if<\/span>(<span class=\"hljs-keyword\">empty<\/span>($errors)) {\n        <span class=\"hljs-comment\">\/\/ send email<\/span>\n        $from_email = $inputs&#91;<span class=\"hljs-string\">'email'<\/span>];\n        $subject = $inputs&#91;<span class=\"hljs-string\">'subject'<\/span>];\n        $message = nl2br(htmlspecialchars($inputs&#91;<span class=\"hljs-string\">'message'<\/span>]));\n        \n        send_email($from_email, $message, $subject, $config&#91;<span class=\"hljs-string\">'mail'<\/span>]&#91;<span class=\"hljs-string\">'to_email'<\/span>]);\n\n        <span class=\"hljs-comment\">\/\/ success message<\/span>\n        $_SESSION&#91;<span class=\"hljs-string\">'success_message'<\/span>] =  <span class=\"hljs-string\">'Thanks for contacting us! We will be in touch with you shortly.'<\/span>;\n\n    } <span class=\"hljs-keyword\">else<\/span> {\n\n        $_SESSION&#91;<span class=\"hljs-string\">'error_message'<\/span>] =  <span class=\"hljs-string\">'Please fix the following errors'<\/span>;\n        $_SESSION&#91;<span class=\"hljs-string\">'errors'<\/span>] =   $errors;\n        $_SESSION&#91;<span class=\"hljs-string\">'inputs'<\/span>] =   $inputs;\n        \n    }\n\n    header(<span class=\"hljs-string\">'Location: '<\/span> . $_SERVER&#91;<span class=\"hljs-string\">'PHP_SELF'<\/span>], <span class=\"hljs-keyword\">true<\/span>, <span class=\"hljs-number\">303<\/span>);\n    <span class=\"hljs-keyword\">exit<\/span>;   \n    \n\n} <span class=\"hljs-keyword\">if<\/span>($request_method === <span class=\"hljs-string\">'GET'<\/span>) {\n\n    <span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-keyword\">isset<\/span>($_SESSION&#91;<span class=\"hljs-string\">'success_message'<\/span>])) {\n        $success_message = $_SESSION&#91;<span class=\"hljs-string\">'success_message'<\/span>];\n        <span class=\"hljs-keyword\">unset<\/span>($_SESSION&#91;<span class=\"hljs-string\">'success_message'<\/span>]);\n\n    } <span class=\"hljs-keyword\">elseif<\/span> (<span class=\"hljs-keyword\">isset<\/span>($_SESSION&#91;<span class=\"hljs-string\">'inputs'<\/span>],$_SESSION&#91;<span class=\"hljs-string\">'errors'<\/span>])) {\n        $error_message = $_SESSION&#91;<span class=\"hljs-string\">'error_message'<\/span>];\n        $errors = $_SESSION&#91;<span class=\"hljs-string\">'errors'<\/span>];\n        $inputs = $_SESSION&#91;<span class=\"hljs-string\">'inputs'<\/span>];\n        <span class=\"hljs-keyword\">unset<\/span>($_SESSION&#91;<span class=\"hljs-string\">'errors'<\/span>], $_SESSION&#91;<span class=\"hljs-string\">'inputs'<\/span>], $_SESSION&#91;<span class=\"hljs-string\">'error_message'<\/span>]);\n    }\n}\n\n<span class=\"hljs-meta\">?&gt;<\/span>\n&lt;!DOCTYPE html&gt;\n&lt;html lang=<span class=\"hljs-string\">\"en\"<\/span>&gt;\n&lt;head&gt;\n    &lt;meta charset=<span class=\"hljs-string\">\"UTF-8\"<\/span>&gt;\n    &lt;meta name=<span class=\"hljs-string\">\"viewport\"<\/span> content=<span class=\"hljs-string\">\"width=device-width, initial-scale=1.0\"<\/span>&gt;\n    &lt;link rel=<span class=\"hljs-string\">\"stylesheet\"<\/span> href=<span class=\"hljs-string\">\"css\/style.css\"<\/span>&gt;\n    &lt;title&gt;PHP Contact Form&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;main&gt;\n        <span class=\"hljs-meta\">&lt;?php<\/span> <span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-keyword\">isset<\/span>($success_message)) : <span class=\"hljs-meta\">?&gt;<\/span>\n        &lt;div <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span>=\"<span class=\"hljs-title\">alert<\/span> <span class=\"hljs-title\">alert<\/span>-<span class=\"hljs-title\">success<\/span>\"&gt;\n            &lt;?= $<span class=\"hljs-title\">success_message<\/span> ?&gt;\n        &lt;\/<span class=\"hljs-title\">div<\/span>&gt;\n        &lt;?<span class=\"hljs-title\">php<\/span> <span class=\"hljs-title\">endif<\/span> ?&gt;\n\n         &lt;?<span class=\"hljs-title\">php<\/span> <span class=\"hljs-title\">if<\/span> (<span class=\"hljs-title\">isset<\/span>($<span class=\"hljs-title\">error_message<\/span>)) : ?&gt;\n        &lt;<span class=\"hljs-title\">div<\/span> <span class=\"hljs-title\">class<\/span>=\"<span class=\"hljs-title\">alert<\/span> <span class=\"hljs-title\">alert<\/span>-<span class=\"hljs-title\">error<\/span>\"&gt;\n            &lt;?= $<span class=\"hljs-title\">error_message<\/span> ?&gt;\n        &lt;\/<span class=\"hljs-title\">div<\/span>&gt;\n        &lt;?<span class=\"hljs-title\">php<\/span> <span class=\"hljs-title\">endif<\/span> ?&gt;\n\n        &lt;<span class=\"hljs-title\">form<\/span> <span class=\"hljs-title\">action<\/span>=\"&lt;?= <span class=\"hljs-title\">htmlspecialchars<\/span>($<span class=\"hljs-title\">_SERVER<\/span>&#91;'<span class=\"hljs-title\">PHP_SELF<\/span>']) ?&gt;\" <span class=\"hljs-title\">method<\/span>=\"<span class=\"hljs-title\">post<\/span>\"&gt;\n            &lt;<span class=\"hljs-title\">header<\/span>&gt;\n                &lt;<span class=\"hljs-title\">h1<\/span>&gt;<span class=\"hljs-title\">Send<\/span> <span class=\"hljs-title\">Us<\/span> <span class=\"hljs-title\">a<\/span> <span class=\"hljs-title\">Message<\/span>&lt;\/<span class=\"hljs-title\">h1<\/span>&gt;\n            &lt;\/<span class=\"hljs-title\">header<\/span>&gt;\n\n            &lt;<span class=\"hljs-title\">div<\/span>&gt;\n                &lt;<span class=\"hljs-title\">label<\/span> <span class=\"hljs-title\">for<\/span>=\"<span class=\"hljs-title\">name<\/span>\"&gt;<span class=\"hljs-title\">Name<\/span>:&lt;\/<span class=\"hljs-title\">label<\/span>&gt;\n                &lt;<span class=\"hljs-title\">input<\/span> <span class=\"hljs-title\">type<\/span>=\"<span class=\"hljs-title\">text<\/span>\" <span class=\"hljs-title\">value<\/span>=\"&lt;?= $<span class=\"hljs-title\">inputs<\/span>&#91;'<span class=\"hljs-title\">name<\/span>'] ?? '' ?&gt;\" <span class=\"hljs-title\">name<\/span>=\"<span class=\"hljs-title\">name<\/span>\" <span class=\"hljs-title\">id<\/span>=\"<span class=\"hljs-title\">name<\/span>\" <span class=\"hljs-title\">placeholder<\/span>=\"<span class=\"hljs-title\">Full<\/span> <span class=\"hljs-title\">name<\/span>\"&gt;\n                &lt;<span class=\"hljs-title\">small<\/span>&gt;&lt;?= $<span class=\"hljs-title\">errors<\/span>&#91;'<span class=\"hljs-title\">name<\/span>'] ?? '' ?&gt;&lt;\/<span class=\"hljs-title\">small<\/span>&gt;\n            &lt;\/<span class=\"hljs-title\">div<\/span>&gt;\n\n            &lt;<span class=\"hljs-title\">div<\/span>&gt;\n                &lt;<span class=\"hljs-title\">label<\/span> <span class=\"hljs-title\">for<\/span>=\"<span class=\"hljs-title\">email<\/span>\"&gt;<span class=\"hljs-title\">Email<\/span>:&lt;\/<span class=\"hljs-title\">label<\/span>&gt;\n                &lt;<span class=\"hljs-title\">input<\/span> <span class=\"hljs-title\">type<\/span>=\"<span class=\"hljs-title\">email<\/span>\" <span class=\"hljs-title\">name<\/span>=\"<span class=\"hljs-title\">email<\/span>\" <span class=\"hljs-title\">id<\/span>=\"<span class=\"hljs-title\">email<\/span>\" <span class=\"hljs-title\">value<\/span>=\"&lt;?= $<span class=\"hljs-title\">inputs<\/span>&#91;'<span class=\"hljs-title\">email<\/span>'] ?? '' ?&gt;\" <span class=\"hljs-title\">placeholder<\/span>=\"<span class=\"hljs-title\">Email<\/span> <span class=\"hljs-title\">address<\/span>\"&gt;\n                &lt;<span class=\"hljs-title\">small<\/span>&gt;&lt;?= $<span class=\"hljs-title\">errors<\/span>&#91;'<span class=\"hljs-title\">email<\/span>'] ?? '' ?&gt;&lt;\/<span class=\"hljs-title\">small<\/span>&gt;\n            &lt;\/<span class=\"hljs-title\">div<\/span>&gt;\n\n            &lt;<span class=\"hljs-title\">div<\/span>&gt;\n                &lt;<span class=\"hljs-title\">label<\/span> <span class=\"hljs-title\">for<\/span>=\"<span class=\"hljs-title\">subject<\/span>\"&gt;<span class=\"hljs-title\">Subject<\/span>:&lt;\/<span class=\"hljs-title\">label<\/span>&gt;\n                &lt;<span class=\"hljs-title\">input<\/span> <span class=\"hljs-title\">type<\/span>=\"<span class=\"hljs-title\">subject<\/span>\" <span class=\"hljs-title\">name<\/span>=\"<span class=\"hljs-title\">subject<\/span>\" <span class=\"hljs-title\">id<\/span>=\"<span class=\"hljs-title\">subject<\/span>\" <span class=\"hljs-title\">value<\/span>=\"&lt;?= $<span class=\"hljs-title\">inputs<\/span>&#91;'<span class=\"hljs-title\">subject<\/span>'] ?? '' ?&gt;\" <span class=\"hljs-title\">placeholder<\/span>=\"<span class=\"hljs-title\">Enter<\/span> <span class=\"hljs-title\">a<\/span> <span class=\"hljs-title\">subject<\/span>\"&gt;\n                &lt;<span class=\"hljs-title\">small<\/span>&gt;&lt;?= $<span class=\"hljs-title\">errors<\/span>&#91;'<span class=\"hljs-title\">subject<\/span>'] ?? '' ?&gt;&lt;\/<span class=\"hljs-title\">small<\/span>&gt;\n            &lt;\/<span class=\"hljs-title\">div<\/span>&gt;\n\n            &lt;<span class=\"hljs-title\">div<\/span>&gt;\n                &lt;<span class=\"hljs-title\">label<\/span> <span class=\"hljs-title\">for<\/span>=\"<span class=\"hljs-title\">message<\/span>\"&gt;<span class=\"hljs-title\">Message<\/span>:&lt;\/<span class=\"hljs-title\">label<\/span>&gt;\n                &lt;<span class=\"hljs-title\">textarea<\/span> <span class=\"hljs-title\">id<\/span>=\"<span class=\"hljs-title\">message<\/span>\" <span class=\"hljs-title\">name<\/span>=\"<span class=\"hljs-title\">message<\/span>\" <span class=\"hljs-title\">rows<\/span>=\"5\"&gt;&lt;?= $<span class=\"hljs-title\">inputs<\/span>&#91;'<span class=\"hljs-title\">message<\/span>'] ?? '' ?&gt;&lt;\/<span class=\"hljs-title\">textarea<\/span>&gt;\n                &lt;<span class=\"hljs-title\">small<\/span>&gt;&lt;?= $<span class=\"hljs-title\">errors<\/span>&#91;'<span class=\"hljs-title\">message<\/span>'] ?? '' ?&gt;&lt;\/<span class=\"hljs-title\">small<\/span>&gt;\n            &lt;\/<span class=\"hljs-title\">div<\/span>&gt;\n\n            &lt;<span class=\"hljs-title\">label<\/span> <span class=\"hljs-title\">for<\/span>=\"<span class=\"hljs-title\">nickname<\/span>\" <span class=\"hljs-title\">aria<\/span>-<span class=\"hljs-title\">hidden<\/span>=\"<span class=\"hljs-title\">true<\/span>\" <span class=\"hljs-title\">class<\/span>=\"<span class=\"hljs-title\">user<\/span>-<span class=\"hljs-title\">cannot<\/span>-<span class=\"hljs-title\">see<\/span>\"&gt; <span class=\"hljs-title\">Nickname<\/span>\n                &lt;<span class=\"hljs-title\">input<\/span> <span class=\"hljs-title\">type<\/span>=\"<span class=\"hljs-title\">text<\/span>\" <span class=\"hljs-title\">name<\/span>=\"<span class=\"hljs-title\">nickname<\/span>\" <span class=\"hljs-title\">id<\/span>=\"<span class=\"hljs-title\">nickname<\/span>\" <span class=\"hljs-title\">class<\/span>=\"<span class=\"hljs-title\">user<\/span>-<span class=\"hljs-title\">cannot<\/span>-<span class=\"hljs-title\">see<\/span>\" <span class=\"hljs-title\">tabindex<\/span>=\"-1\" <span class=\"hljs-title\">autocomplete<\/span>=\"<span class=\"hljs-title\">off<\/span>\"&gt;\n            &lt;\/<span class=\"hljs-title\">label<\/span>&gt;\n\n            &lt;<span class=\"hljs-title\">button<\/span> <span class=\"hljs-title\">type<\/span>=\"<span class=\"hljs-title\">submit<\/span>\"&gt;<span class=\"hljs-title\">Send<\/span> <span class=\"hljs-title\">Message<\/span>&lt;\/<span class=\"hljs-title\">button<\/span>&gt;\n        &lt;\/<span class=\"hljs-title\">form<\/span>&gt;\n    &lt;\/<span class=\"hljs-title\">main<\/span>&gt;\n&lt;\/<span class=\"hljs-title\">body<\/span>&gt;\n&lt;\/<span class=\"hljs-title\">html<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>How it works.<\/p>\n\n\n\n<p>The <code>$errors<\/code> array stores the error messages. Each item has a key that is the field name and a value which is an error message. For example, the <code>$erros['name']<\/code> stores the error message of the <code>name<\/code> field:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$errors&#91;<span class=\"hljs-string\">'name'<\/span>] = <span class=\"hljs-string\">'Please enter your name'<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>$inputs<\/code> array stores the input values. Each item is a key-value pair of the input name and value.<\/p>\n\n\n\n<p>For each field in the HTML form, we display the input value and the validation error message if it has. For example, the following display the name input field with a value that comes from the $inputs array and error message that comes from the $errors array:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">&lt;div&gt;\n    &lt;label <span class=\"hljs-keyword\">for<\/span>=<span class=\"hljs-string\">\"name\"<\/span>&gt;Name:&lt;\/label&gt;\n    &lt;input type=<span class=\"hljs-string\">\"text\"<\/span> value=<span class=\"hljs-string\">\"&lt;?= $inputs&#91;'name'] ?? '' ?&gt;\"<\/span> name=<span class=\"hljs-string\">\"name\"<\/span> id=<span class=\"hljs-string\">\"name\"<\/span> placeholder=<span class=\"hljs-string\">\"Full name\"<\/span>&gt;\n    &lt;small&gt;<span class=\"hljs-meta\">&lt;?<\/span>= $errors&#91;<span class=\"hljs-string\">'name'<\/span>] ?? <span class=\"hljs-string\">''<\/span> <span class=\"hljs-meta\">?&gt;<\/span>&lt;\/small&gt;\n&lt;\/div&gt;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Notice that we use the <a href=\"https:\/\/phptutorial.net\/php-tutorial\/php-null-coalescing-operator\/\">null coalescing operator<\/a> (<code>??<\/code>)&nbsp;to display the input value and error message if it is set and not <code>null<\/code>.<\/p>\n\n\n\n<p>When the users submit the form sucessfully, we display the success messasge on the top of the contact form:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-meta\">&lt;?php<\/span> <span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-keyword\">isset<\/span>($success_message)) : <span class=\"hljs-meta\">?&gt;<\/span>\n   &lt;div <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span>=\"<span class=\"hljs-title\">alert<\/span> <span class=\"hljs-title\">alert<\/span>-<span class=\"hljs-title\">success<\/span>\"&gt;\n       &lt;?= $<span class=\"hljs-title\">success_message<\/span> ?&gt;\n   &lt;\/<span class=\"hljs-title\">div<\/span>&gt;\n&lt;?<span class=\"hljs-title\">php<\/span> <span class=\"hljs-title\">endif<\/span> ?&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If there are errors, we display the error message:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-meta\">&lt;?php<\/span> <span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-keyword\">isset<\/span>($error_message)) : <span class=\"hljs-meta\">?&gt;<\/span>\n        &lt;div <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span>=\"<span class=\"hljs-title\">alert<\/span> <span class=\"hljs-title\">alert<\/span>-<span class=\"hljs-title\">error<\/span>\"&gt;\n            &lt;?= $<span class=\"hljs-title\">error_message<\/span> ?&gt;\n        &lt;\/<span class=\"hljs-title\">div<\/span>&gt;\n&lt;?<span class=\"hljs-title\">php<\/span> <span class=\"hljs-title\">endif<\/span> ?&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>On top of the file, we start the session by calling the session_start() function:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">session_start();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The check_honeypot() function checks the honeypot and returns 405 HTTP status code if the honeypot has a value:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">check_honeypot<\/span><span class=\"hljs-params\">()<\/span><\/span>{\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'honeypot'<\/span>)){\n        $honeypot = trim($_POST&#91;<span class=\"hljs-string\">'honeypot'<\/span>]);\n        <span class=\"hljs-keyword\">if<\/span> ($honeypot) {\n            header($_SERVER&#91;<span class=\"hljs-string\">'SERVER_PROTOCOL'<\/span>] . <span class=\"hljs-string\">' 405 Method Not Allowed'<\/span>);\n            <span class=\"hljs-keyword\">exit<\/span>;\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>validate()<\/code> function validates each field in the form and returns an array that has two items: <code>$inputs<\/code> and <code>$errors<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">validate<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n\n    $inputs = &#91;];\n    $errors = &#91;];   \n\n    <span class=\"hljs-comment\">\/\/ validate name<\/span>\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'name'<\/span>)) {\n        $inputs&#91;<span class=\"hljs-string\">'name'<\/span>] = trim($_POST&#91;<span class=\"hljs-string\">'name'<\/span>]);\n        <span class=\"hljs-keyword\">if<\/span> (trim($inputs&#91;<span class=\"hljs-string\">'name'<\/span>]) === <span class=\"hljs-string\">''<\/span>) {\n            $errors&#91;<span class=\"hljs-string\">'name'<\/span>] = <span class=\"hljs-string\">'Please enter your name'<\/span>;\n        }    \n    }\n\n    <span class=\"hljs-comment\">\/\/ validate email<\/span>\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'email'<\/span>)) {\n        $inputs&#91;<span class=\"hljs-string\">'email'<\/span>] = trim($_POST&#91;<span class=\"hljs-string\">'email'<\/span>]);\n        <span class=\"hljs-comment\">\/\/ validate email<\/span>\n        <span class=\"hljs-keyword\">if<\/span> (!filter_var($inputs&#91;<span class=\"hljs-string\">'email'<\/span>], FILTER_VALIDATE_EMAIL)) {\n            $errors&#91;<span class=\"hljs-string\">'email'<\/span>] = <span class=\"hljs-string\">'Please enter a valid email address'<\/span>;\n        }\n    } <span class=\"hljs-keyword\">else<\/span> {\n        $errors&#91;<span class=\"hljs-string\">'email'<\/span>] = <span class=\"hljs-string\">'Please enter your address'<\/span>;\n    }\n\n\n    <span class=\"hljs-comment\">\/\/ validate subject<\/span>\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'subject'<\/span>)) {\n        $inputs&#91;<span class=\"hljs-string\">'subject'<\/span>] = trim($_POST&#91;<span class=\"hljs-string\">'subject'<\/span>]);\n        <span class=\"hljs-keyword\">if<\/span> (trim($inputs&#91;<span class=\"hljs-string\">'subject'<\/span>]) === <span class=\"hljs-string\">''<\/span>) {\n            $errors&#91;<span class=\"hljs-string\">'subject'<\/span>] = <span class=\"hljs-string\">'Please enter a subject'<\/span>;\n        }    \n    } <span class=\"hljs-keyword\">else<\/span>{\n        $errors&#91;<span class=\"hljs-string\">'subject'<\/span>] = <span class=\"hljs-string\">'Please enter a subject'<\/span>;\n    }\n\n    <span class=\"hljs-comment\">\/\/ validate message<\/span>\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'message'<\/span>)) {\n        $inputs&#91;<span class=\"hljs-string\">'message'<\/span>] = trim($_POST&#91;<span class=\"hljs-string\">'message'<\/span>]);\n        <span class=\"hljs-keyword\">if<\/span> (trim($inputs&#91;<span class=\"hljs-string\">'message'<\/span>]) === <span class=\"hljs-string\">''<\/span>) {\n            $errors&#91;<span class=\"hljs-string\">'message'<\/span>] = <span class=\"hljs-string\">'Please enter a message'<\/span>;\n        }    \n    } <span class=\"hljs-keyword\">else<\/span> {\n        $errors&#91;<span class=\"hljs-string\">'message'<\/span>] = <span class=\"hljs-string\">'Please enter a message'<\/span>;\n    }\n\n    <span class=\"hljs-keyword\">return<\/span> &#91;$inputs, $errors];\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>send_email()<\/code> function sends an email to a <code>$recipient_email<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">send_email<\/span><span class=\"hljs-params\">($from_email, $message, $subject, $recipient_email)<\/span> <\/span>{\n    <span class=\"hljs-comment\">\/\/ Email header<\/span>\n    $headers&#91;] = <span class=\"hljs-string\">'MIME-Version: 1.0'<\/span>;\n    $headers&#91;] = <span class=\"hljs-string\">'Content-type: text\/html; charset=utf-8'<\/span>;\n    $headers&#91;] = <span class=\"hljs-string\">\"To: $recipient_email\"<\/span>;\n    $headers&#91;] = <span class=\"hljs-string\">\"From: $from_email\"<\/span>;\n    $header = implode(<span class=\"hljs-string\">'\\r\\n'<\/span>, $headers);\n\n    <span class=\"hljs-comment\">\/\/ send email<\/span>\n    mail($recipient_email, $subject, $message, $header);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>We store the HTTP request in the $request_method variable:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$request_method = $_SERVER&#91;<span class=\"hljs-string\">'REQUEST_METHOD'<\/span>];<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If the HTTP request is POST, we check the honeypot, validate data, and send email if there is no error. We use sessions to store messages, $errors and $inputs:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">if<\/span>($request_method === <span class=\"hljs-string\">'POST'<\/span>) {\n   \n    $config = &#91;\n        <span class=\"hljs-string\">'mail'<\/span> =&gt; &#91;\n            <span class=\"hljs-string\">'to_email'<\/span> =&gt; <span class=\"hljs-string\">'webmaster@phptutorial.net'<\/span>\n        ]\n    ];\n\n    <span class=\"hljs-comment\">\/\/ check honeypot<\/span>\n    check_honeypot();\n\n    <span class=\"hljs-comment\">\/\/ validate inputs<\/span>\n    &#91;$inputs, $errors] = validate();\n\n    <span class=\"hljs-keyword\">if<\/span>(<span class=\"hljs-keyword\">empty<\/span>($errors)) {\n        <span class=\"hljs-comment\">\/\/ send email<\/span>\n        $from_email = $inputs&#91;<span class=\"hljs-string\">'email'<\/span>];\n        $subject = $inputs&#91;<span class=\"hljs-string\">'subject'<\/span>];\n        $message = nl2br(htmlspecialchars($inputs&#91;<span class=\"hljs-string\">'message'<\/span>]));\n        send_email($from_email, $message, $subject, $config&#91;<span class=\"hljs-string\">'mail'<\/span>]&#91;<span class=\"hljs-string\">'to_email'<\/span>]);\n        \n        $_SESSION&#91;<span class=\"hljs-string\">'success_message'<\/span>] =  <span class=\"hljs-string\">'Thanks for contacting us! We will be in touch with you shortly.'<\/span>;\n\n    } <span class=\"hljs-keyword\">else<\/span> {\n\n        $_SESSION&#91;<span class=\"hljs-string\">'error_message'<\/span>] =  <span class=\"hljs-string\">'Please fix the following errors'<\/span>;\n        $_SESSION&#91;<span class=\"hljs-string\">'errors'<\/span>] =   $errors;\n        $_SESSION&#91;<span class=\"hljs-string\">'inputs'<\/span>] =   $inputs;\n        \n    }\n\n    header(<span class=\"hljs-string\">'Location: '<\/span> . $_SERVER&#91;<span class=\"hljs-string\">'PHP_SELF'<\/span>], <span class=\"hljs-keyword\">true<\/span>, <span class=\"hljs-number\">303<\/span>);\n    <span class=\"hljs-keyword\">exit<\/span>; \n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If the HTTP request is GET, we get values out of the <code>$_SESSION<\/code> and assign them to corresponding variables:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">elseif<\/span>($request_method === <span class=\"hljs-string\">'GET'<\/span>) {\n    <span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-keyword\">isset<\/span>($_SESSION&#91;<span class=\"hljs-string\">'success_message'<\/span>])) {\n        $success_message = $_SESSION&#91;<span class=\"hljs-string\">'success_message'<\/span>];\n        <span class=\"hljs-keyword\">unset<\/span>($_SESSION&#91;<span class=\"hljs-string\">'success_message'<\/span>]);\n\n    } <span class=\"hljs-keyword\">elseif<\/span> (<span class=\"hljs-keyword\">isset<\/span>($_SESSION&#91;<span class=\"hljs-string\">'inputs'<\/span>],$_SESSION&#91;<span class=\"hljs-string\">'errors'<\/span>])) {\n        $error_message = $_SESSION&#91;<span class=\"hljs-string\">'error_message'<\/span>];\n        $errors = $_SESSION&#91;<span class=\"hljs-string\">'errors'<\/span>];\n        $inputs = $_SESSION&#91;<span class=\"hljs-string\">'inputs'<\/span>];\n        <span class=\"hljs-keyword\">unset<\/span>($_SESSION&#91;<span class=\"hljs-string\">'errors'<\/span>], $_SESSION&#91;<span class=\"hljs-string\">'inputs'<\/span>], $_SESSION&#91;<span class=\"hljs-string\">'error_message'<\/span>]);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><a href=\"https:\/\/phptutorial.net\/wp-content\/uploads\/2025\/04\/contact.zip\" target=\"_blank\" rel=\"noreferrer noopener\">Download the contact form<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='organize-the-code'>Organize the code <a href=\"#organize-the-code\" class=\"anchor\" id=\"organize-the-code\" title=\"Anchor for Organize the code\">#<\/a><\/h2>\n\n\n\n<p>First, create the following folders &amp; files:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\u251c\u2500\u2500 config\n|  \u2514\u2500\u2500 app.php\n\u251c\u2500\u2500 css\n|  \u2514\u2500\u2500 style.css\n\u251c\u2500\u2500 inc\n|  \u251c\u2500\u2500 footer.php\n|  \u251c\u2500\u2500 form.php\n|  \u251c\u2500\u2500 get.php\n|  \u251c\u2500\u2500 header.php\n|  \u251c\u2500\u2500 mail.php\n|  \u2514\u2500\u2500 post.php\n\u2514\u2500\u2500 index.php<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id='header-php'>header.php <a href=\"#header-php\" class=\"anchor\" id=\"header-php\" title=\"Anchor for header.php\">#<\/a><\/h3>\n\n\n\n<p>The <code>header.php<\/code> file contains the header part of the contact form:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-meta\">&lt;!DOCTYPE <span class=\"hljs-meta-keyword\">html<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">html<\/span> <span class=\"hljs-attr\">lang<\/span>=<span class=\"hljs-string\">\"en\"<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">charset<\/span>=<span class=\"hljs-string\">\"UTF-8\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"viewport\"<\/span> <span class=\"hljs-attr\">content<\/span>=<span class=\"hljs-string\">\"width=device-width, initial-scale=1.0\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">link<\/span> <span class=\"hljs-attr\">rel<\/span>=<span class=\"hljs-string\">\"stylesheet\"<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"css\/style.css\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">title<\/span>&gt;<\/span>PHP Contact Form<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">title<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">main<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id='footer-php'>footer.php <a href=\"#footer-php\" class=\"anchor\" id=\"footer-php\" title=\"Anchor for footer.php\">#<\/a><\/h3>\n\n\n\n<p>The <code>footer.php<\/code> file contains the enclosing tags of the header&#8217;s tags:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">main<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">html<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id='get-php'>get.php <a href=\"#get-php\" class=\"anchor\" id=\"get-php\" title=\"Anchor for get.php\">#<\/a><\/h3>\n\n\n\n<p>The <code>get.php<\/code> file handle when the HTTP request is GET:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-meta\">&lt;?php<\/span>\n\n<span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-keyword\">isset<\/span>($_SESSION&#91;<span class=\"hljs-string\">'success_message'<\/span>])) {\n    $success_message = $_SESSION&#91;<span class=\"hljs-string\">'success_message'<\/span>];\n    <span class=\"hljs-keyword\">unset<\/span>($_SESSION&#91;<span class=\"hljs-string\">'success_message'<\/span>]);\n} <span class=\"hljs-keyword\">elseif<\/span> (<span class=\"hljs-keyword\">isset<\/span>($_SESSION&#91;<span class=\"hljs-string\">'inputs'<\/span>], $_SESSION&#91;<span class=\"hljs-string\">'errors'<\/span>])) {\n    $error_message = $_SESSION&#91;<span class=\"hljs-string\">'error_message'<\/span>];\n    $errors = $_SESSION&#91;<span class=\"hljs-string\">'errors'<\/span>];\n    $inputs = $_SESSION&#91;<span class=\"hljs-string\">'inputs'<\/span>];\n    <span class=\"hljs-keyword\">unset<\/span>($_SESSION&#91;<span class=\"hljs-string\">'errors'<\/span>], $_SESSION&#91;<span class=\"hljs-string\">'inputs'<\/span>], $_SESSION&#91;<span class=\"hljs-string\">'error_message'<\/span>]);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id='post-php'>post.php <a href=\"#post-php\" class=\"anchor\" id=\"post-php\" title=\"Anchor for post.php\">#<\/a><\/h3>\n\n\n\n<p>The <code>post.php<\/code> handles the form submission and sending email:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-meta\">&lt;?php<\/span>\n\n$config = <span class=\"hljs-keyword\">require_once<\/span> <span class=\"hljs-keyword\">__DIR__<\/span> . <span class=\"hljs-string\">'\/..\/config\/app.php'<\/span>;\n\n<span class=\"hljs-comment\">\/\/ Check honeypot<\/span>\ncheck_honeypot();\n\n<span class=\"hljs-comment\">\/\/ Validate inputs<\/span>\n&#91;$inputs, $errors] = validate();\n\n<span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-keyword\">empty<\/span>($errors)) {\n    <span class=\"hljs-comment\">\/\/ Send email<\/span>\n    $from_email = $inputs&#91;<span class=\"hljs-string\">'email'<\/span>];\n    $subject = $inputs&#91;<span class=\"hljs-string\">'subject'<\/span>];\n    $message = nl2br(htmlspecialchars($inputs&#91;<span class=\"hljs-string\">'message'<\/span>]));\n    send_email($from_email, $message, $subject, $config&#91;<span class=\"hljs-string\">'mail'<\/span>]&#91;<span class=\"hljs-string\">'to_email'<\/span>]);\n\n    $_SESSION&#91;<span class=\"hljs-string\">'success_message'<\/span>] = <span class=\"hljs-string\">'Thanks for contacting us! We will be in touch with you shortly.'<\/span>;\n} <span class=\"hljs-keyword\">else<\/span> {\n    $_SESSION&#91;<span class=\"hljs-string\">'error_message'<\/span>] = <span class=\"hljs-string\">'Please fix the following errors'<\/span>;\n    $_SESSION&#91;<span class=\"hljs-string\">'errors'<\/span>] = $errors;\n    $_SESSION&#91;<span class=\"hljs-string\">'inputs'<\/span>] = $inputs;\n}\n\nheader(<span class=\"hljs-string\">'Location: '<\/span> . $_SERVER&#91;<span class=\"hljs-string\">'PHP_SELF'<\/span>], <span class=\"hljs-keyword\">true<\/span>, <span class=\"hljs-number\">303<\/span>);\n<span class=\"hljs-keyword\">exit<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id='app-php'>app.php <a href=\"#app-php\" class=\"anchor\" id=\"app-php\" title=\"Anchor for app.php\">#<\/a><\/h3>\n\n\n\n<p>The <code>app.php<\/code> stores the configuration information e.g., the receiver&#8217;s email address:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-meta\">&lt;?php<\/span>\n\n<span class=\"hljs-keyword\">return<\/span> &#91;\n    <span class=\"hljs-string\">'mail'<\/span> =&gt; &#91;\n        <span class=\"hljs-string\">'to_email'<\/span> =&gt; <span class=\"hljs-string\">'webmaster@phptutorial.net'<\/span>\n    ]\n];<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id='functions-php'>functions.php <a href=\"#functions-php\" class=\"anchor\" id=\"functions-php\" title=\"Anchor for functions.php\">#<\/a><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-meta\">&lt;?php<\/span>\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">check_honeypot<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'honeypot'<\/span>)){\n        $honeypot = trim($_POST&#91;<span class=\"hljs-string\">'honeypot'<\/span>]);\n        <span class=\"hljs-keyword\">if<\/span> ($honeypot) {\n            header($_SERVER&#91;<span class=\"hljs-string\">'SERVER_PROTOCOL'<\/span>] . <span class=\"hljs-string\">' 405 Method Not Allowed'<\/span>);\n            <span class=\"hljs-keyword\">exit<\/span>;\n        }\n    }\n}\n\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">validate<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n\n    $inputs = &#91;];\n    $errors = &#91;];   \n\n    <span class=\"hljs-comment\">\/\/ validate name<\/span>\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'name'<\/span>)) {\n        $inputs&#91;<span class=\"hljs-string\">'name'<\/span>] = trim($_POST&#91;<span class=\"hljs-string\">'name'<\/span>]);\n        <span class=\"hljs-keyword\">if<\/span> (trim($inputs&#91;<span class=\"hljs-string\">'name'<\/span>]) === <span class=\"hljs-string\">''<\/span>) {\n            $errors&#91;<span class=\"hljs-string\">'name'<\/span>] = <span class=\"hljs-string\">'Please enter your name'<\/span>;\n        }    \n    }\n\n    <span class=\"hljs-comment\">\/\/ validate email<\/span>\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'email'<\/span>)) {\n        $inputs&#91;<span class=\"hljs-string\">'email'<\/span>] = trim($_POST&#91;<span class=\"hljs-string\">'email'<\/span>]);\n        <span class=\"hljs-comment\">\/\/ validate email<\/span>\n        <span class=\"hljs-keyword\">if<\/span> (!filter_var($inputs&#91;<span class=\"hljs-string\">'email'<\/span>], FILTER_VALIDATE_EMAIL)) {\n            $errors&#91;<span class=\"hljs-string\">'email'<\/span>] = <span class=\"hljs-string\">'Please enter a valid email address'<\/span>;\n        }\n    } <span class=\"hljs-keyword\">else<\/span> {\n        $errors&#91;<span class=\"hljs-string\">'email'<\/span>] = <span class=\"hljs-string\">'Please enter your address'<\/span>;\n    }\n\n\n    <span class=\"hljs-comment\">\/\/ validate subject<\/span>\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'subject'<\/span>)) {\n        $inputs&#91;<span class=\"hljs-string\">'subject'<\/span>] = trim($_POST&#91;<span class=\"hljs-string\">'subject'<\/span>]);\n        <span class=\"hljs-keyword\">if<\/span> (trim($inputs&#91;<span class=\"hljs-string\">'subject'<\/span>]) === <span class=\"hljs-string\">''<\/span>) {\n            $errors&#91;<span class=\"hljs-string\">'subject'<\/span>] = <span class=\"hljs-string\">'Please enter a subject'<\/span>;\n        }    \n    } <span class=\"hljs-keyword\">else<\/span>{\n        $errors&#91;<span class=\"hljs-string\">'subject'<\/span>] = <span class=\"hljs-string\">'Please enter a subject'<\/span>;\n    }\n\n    <span class=\"hljs-comment\">\/\/ validate message<\/span>\n    <span class=\"hljs-keyword\">if<\/span>(filter_has_var(INPUT_POST, <span class=\"hljs-string\">'message'<\/span>)) {\n        $inputs&#91;<span class=\"hljs-string\">'message'<\/span>] = trim($_POST&#91;<span class=\"hljs-string\">'message'<\/span>]);\n        <span class=\"hljs-keyword\">if<\/span> (trim($inputs&#91;<span class=\"hljs-string\">'message'<\/span>]) === <span class=\"hljs-string\">''<\/span>) {\n            $errors&#91;<span class=\"hljs-string\">'message'<\/span>] = <span class=\"hljs-string\">'Please enter a message'<\/span>;\n        }    \n    } <span class=\"hljs-keyword\">else<\/span> {\n        $errors&#91;<span class=\"hljs-string\">'message'<\/span>] = <span class=\"hljs-string\">'Please enter a message'<\/span>;\n    }\n\n    <span class=\"hljs-keyword\">return<\/span> &#91;$inputs, $errors];\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">send_email<\/span><span class=\"hljs-params\">($from_email, $message, $subject, $recipient_email)<\/span> <\/span>{\n    <span class=\"hljs-comment\">\/\/ Email header<\/span>\n    $headers&#91;] = <span class=\"hljs-string\">'MIME-Version: 1.0'<\/span>;\n    $headers&#91;] = <span class=\"hljs-string\">'Content-type: text\/html; charset=utf-8'<\/span>;\n    $headers&#91;] = <span class=\"hljs-string\">\"To: $recipient_email\"<\/span>;\n    $headers&#91;] = <span class=\"hljs-string\">\"From: $from_email\"<\/span>;\n    $header = implode(<span class=\"hljs-string\">'\\r\\n'<\/span>, $headers);\n\n    <span class=\"hljs-comment\">\/\/ send email<\/span>\n    mail($recipient_email, $subject, $message, $header);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id='index-php'>index.php <a href=\"#index-php\" class=\"anchor\" id=\"index-php\" title=\"Anchor for index.php\">#<\/a><\/h3>\n\n\n\n<p>The <code>index.php<\/code> file contains the main logic:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-meta\">&lt;?php<\/span>\n\nsession_start();\n\n<span class=\"hljs-keyword\">require_once<\/span> <span class=\"hljs-keyword\">__DIR__<\/span> . <span class=\"hljs-string\">'\/inc\/functions.php'<\/span>;\n\n$request_method = strtoupper($_SERVER&#91;<span class=\"hljs-string\">'REQUEST_METHOD'<\/span>]);\n \n<span class=\"hljs-keyword\">if<\/span> ($request_method === <span class=\"hljs-string\">'POST'<\/span>) {\n    <span class=\"hljs-keyword\">require_once<\/span> <span class=\"hljs-keyword\">__DIR__<\/span> . <span class=\"hljs-string\">'\/inc\/post.php'<\/span>;\n} <span class=\"hljs-keyword\">elseif<\/span> ($request_method === <span class=\"hljs-string\">'GET'<\/span>) {\n    <span class=\"hljs-keyword\">require_once<\/span> <span class=\"hljs-keyword\">__DIR__<\/span> . <span class=\"hljs-string\">'\/inc\/get.php'<\/span>;\n} \n\n\n<span class=\"hljs-keyword\">require_once<\/span> <span class=\"hljs-keyword\">__DIR__<\/span> . <span class=\"hljs-string\">'\/inc\/header.php'<\/span>;\n<span class=\"hljs-keyword\">require_once<\/span> <span class=\"hljs-keyword\">__DIR__<\/span> . <span class=\"hljs-string\">'\/inc\/form.php'<\/span>;\n<span class=\"hljs-keyword\">require_once<\/span> <span class=\"hljs-keyword\">__DIR__<\/span> . <span class=\"hljs-string\">'\/inc\/footer.php'<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><a href=\"https:\/\/phptutorial.net\/wp-content\/uploads\/2025\/04\/contact-form.zip\" target=\"_blank\" rel=\"noreferrer noopener\">Download the contact form<\/a><\/p>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Did you find this tutorial useful?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"2435\"\n\t\t\t\tdata-post-url=\"https:\/\/www.phptutorial.net\/php-tutorial\/php-contact-form\/\"\n\t\t\t\tdata-post-title=\"PHP Contact Form\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"2435\"\n\t\t\t\tdata-post-url=\"https:\/\/www.phptutorial.net\/php-tutorial\/php-contact-form\/\"\n\t\t\t\tdata-post-title=\"PHP Contact Form\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\n\t\t\t<button class=\"btn btn-primary wth-btn-submit\">Send<\/button>\n\t\t\t<button class=\"btn wth-btn-cancel\">Cancel<\/button>\n\t\t\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>in this tutorial, you&#8217;ll learn how to build a contact form in PHP that includes form validation, sending email, honeypot, etc.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":15,"menu_order":96,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2435","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/pages\/2435","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/comments?post=2435"}],"version-history":[{"count":5,"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/pages\/2435\/revisions"}],"predecessor-version":[{"id":3295,"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/pages\/2435\/revisions\/3295"}],"up":[{"embeddable":true,"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/pages\/15"}],"wp:attachment":[{"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/media?parent=2435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}