0

For my local scouts group me and a friend of mine are organising a little event next year. I wanted to create a simple webpage with the necessary information and a simple form at the bottom with which they can sign themselves up for the event.

I already have a running webserver at home, running Debian with Apache 2 en PHP5.

I created the webpage and wanted to add the form at the bottom. At http://www.freecontactform.com/html_form.php i found a form which ticks the boxes for me. I followed the instructions there, pasting the following part in my html webpage, at the bottom, but above the tag:

<form name="htmlform" method="post" action="html_form_send.php">
<table width="450px">
</tr>
<tr>
 <td valign="top">
  <label for="first_name">First Name *</label>
 </td>
 <td valign="top">
  <input  type="text" name="first_name" maxlength="50" size="30">
 </td>
</tr>

<tr>
 <td valign="top"">
  <label for="last_name">Last Name *</label>
 </td>
 <td valign="top">
  <input  type="text" name="last_name" maxlength="50" size="30">
 </td>
</tr>
<tr>
 <td valign="top">
  <label for="email">Email Address *</label>
 </td>
 <td valign="top">
  <input  type="text" name="email" maxlength="80" size="30">
 </td>

</tr>
<tr>
 <td valign="top">
  <label for="telephone">Telephone Number</label>
 </td>
 <td valign="top">
  <input  type="text" name="telephone" maxlength="30" size="30">
 </td>
</tr>
<tr>
 <td valign="top">
  <label for="comments">Comments *</label>
 </td>
 <td valign="top">
  <textarea  name="comments" maxlength="1000" cols="25" rows="6"></textarea>
 </td>

</tr>
<tr>
 <td colspan="2" style="text-align:center">
  <input type="submit" value="Submit">   ( <a href="http://www.freecontactform.com/html_form.php">HTML Form</a> )
 </td>
</tr>
</table>
</form>

Next, i created a php-file called html_form_send.php and pasted the following code in it:

        <?php
if(isset($_POST['email'])) {
     
    // CHANGE THE TWO LINES BELOW
    $email_to = "you@yourdomain.com";
     
    $email_subject = "website html form submissions";
     
     
    function died($error) {
        // your error code can go here
        echo "We are very sorry, but there were error(s) found with the form you submitted. ";
        echo "These errors appear below.<br /><br />";
        echo $error."<br /><br />";
        echo "Please go back and fix these errors.<br /><br />";
        die();
    }
     
    // validation expected data exists
    if(!isset($_POST['first_name']) ||
        !isset($_POST['last_name']) ||
        !isset($_POST['email']) ||
        !isset($_POST['telephone']) ||
        !isset($_POST['comments'])) {
        died('We are sorry, but there appears to be a problem with the form you submitted.');       
    }
     
    $first_name = $_POST['first_name']; // required
    $last_name = $_POST['last_name']; // required
    $email_from = $_POST['email']; // required
    $telephone = $_POST['telephone']; // not required
    $comments = $_POST['comments']; // required
     
    $error_message = "";
    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
  if(!preg_match($email_exp,$email_from)) {
    $error_message .= 'The Email Address you entered does not appear to be valid.<br />';
  }
    $string_exp = "/^[A-Za-z .'-]+$/";
  if(!preg_match($string_exp,$first_name)) {
    $error_message .= 'The First Name you entered does not appear to be valid.<br />';
  }
  if(!preg_match($string_exp,$last_name)) {
    $error_message .= 'The Last Name you entered does not appear to be valid.<br />';
  }
  if(strlen($comments) < 2) {
    $error_message .= 'The Comments you entered do not appear to be valid.<br />';
  }
  if(strlen($error_message) > 0) {
    died($error_message);
  }
    $email_message = "Form details below.\n\n";
     
    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
    }
     
    $email_message .= "First Name: ".clean_string($first_name)."\n";
    $email_message .= "Last Name: ".clean_string($last_name)."\n";
    $email_message .= "Email: ".clean_string($email_from)."\n";
    $email_message .= "Telephone: ".clean_string($telephone)."\n";
    $email_message .= "Comments: ".clean_string($comments)."\n";
     
     
// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);  
?>
 
<!-- place your own success html below -->
 
Thank you for contacting us. We will be in touch with you very soon.
 
<?php
}
die();
?>

Within that file i changed the

// CHANGE THE TWO LINES BELOW
$email_to = "you@yourdomain.com";
     
$email_subject = "website html form submissions";

lines, to match my email address and desired subject.

Next, i saved both files and browsed to my webpage. The page shows up fine and so does the form. But no email had made it to my inbox so far after filling in the form and hit "Submit".

Now, i don't have any experience in sending e-mails from my server and don't know whether there is any configuration to be done, or whether i have to install some program or server whatsoever. I'm probably completely missing something, but after trying several forms i found i'm getting a little frustrated and started to wonder whether you guys can help me out :-).

Kind regards! Wouter Janssen.

  • 1
    Remove the `@` on the `mail()` call. Then test the result of the call. Its not super helpful, but it may at least give you a clue. _Question_ Do you have a mail server, as `mail()` only passes mail from PHP to the local configured mail server. – RiggsFolly Oct 22 '15 at 10:54
  • Instead of "@mail(...)" checkout value returned from function mail "echo mail(...)". If returns 1 all is working okay. – Nuno Costa Oct 22 '15 at 10:55
  • BTW: It is **die** and not **died** – B001ᛦ Oct 22 '15 at 11:05

1 Answers1

-1

I already have a running webserver at home, running Debian with Apache 2 en PHP5.

Are you talking about a local webserver? Like Xampp, Wamp etc.? If yes, you have to configure its mail "module". You can find how to do it with a Google search.

Theraloss
  • 700
  • 2
  • 7
  • 30