Contact form not sending full submission data via php


#1

I have an HTML contact form that uses javascript for a change function. I have a dropdown for the subject and based on what option the person chooses different fields are displayed. For example if they choose Bug report different fields appear than selecting Add my group. Whenever a user fills out the form not and it gets emailed to me their answers to the questions based on the subject theyve selected dont get emailed to me.

I have included the code below, any help appreciated.

HTML

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
    $("#select").change(function () {
        if ($(this).val() == "subject1") {
            $("#EVENT").show();
        } else {
            $("#EVENT").hide();
        }
        if ($(this).val() == "subject2") {
            $("#GROUPCLUBS").show();
        } else {
            $("#GROUPCLUBS").hide();
        }
        if ($(this).val() == "subject3") {
            $("#DIRECTORY").show();
        } else {
            $("#DIRECTORY").hide();
        }
        if ($(this).val() == "subject4") {
            $("#BUG").show();
        } else {
            $("#BUG").hide();
        }                     
    });
});
</script>

<form name="contactform" method="post" action="contact.php">
<table width="450px">
<tr>
 <td valign="top">
  <label for="name">Name *</label>
 </td>
 <td valign="top">
  <input  type="text" name="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="subject">Subject *</label>
</td>
 <td valign="top">

<select name="subject" id="select">
  <option value="">-- select an option --</option>
  <option value="subject1">Add an Event</option>
  <option value="subject2">Add my Group or Club</option>
  <option value="subject3">I want listed in the Business Directory</option>
  <option value="subject4">Submit a Bug Report</option>
  <option value="subject5">Other Questions</option>
</select>

<div id="EVENT" style="display: none">
<label for="EventDate">Event Date</label>
<input type="text" name="eventdate" />
<br>
<label for="EventTime">Event Time</label>
<input type="text" name="eventtime" />
<br>
<label for="EventLocation">Event Location</label>
<input type="text" name="eventlocation" />
<br>
<label for="EventDescription">Event Description</label>
<input type="text" name="eventdescription" />
<br>
<label for="Ticketinfo">Ticket Information</label>
<input type="text" name="eventticketinfo" />
<br>
<label for="ExtraInfo">Extra Info</label>
<input type="text" name="extrainfo" />
<br>
<label for="Website">Website</label>
<input type="text" name="website" />
<br>
<label for="ContactInfo">Contact Info</label>
<input type="text" name="contact" />
</div> 


<div id="GROUPCLUBS" style="display: none">
<label for="ClubDescription">Club Description</label>
<input type="text" name="clubdescription" />
<br>
<label for="Meet">When does the club meet?</label>
<input type="text" name="meeting" />
<br>
<label for="Location">Location</label>
<input type="text" name="location" />
<br>
<label for="Cost">Cost of joining</label>
<input type="text" name="cost" />
<br>
<label for="ExtraInfo">Extra Info</label>
<input type="text" name="extrainfo" />
<br>
<label for="ContactInfo">Contact Info</label>
<input type="text" name="contact" />
</div> 


<div id="DIRECTORY" style="display: none">
<label for="BusinessDescription">Business Description</label>
<input type="text" name="businessdescription" />
<br>
<label for="BusinessLocation">Business Location</label>
<input type="text" name="location" />
<br>
<label for="OpeningHours">Opening Hours</label>
<input type="text" name="openinghours" />
<br>
<label for="Website">Website</label>
<input type="text" name="website" />
<br>
<label for="ContactInfo">Contact Info</label>
<input type="text" name="contact" />
</div> 


<div id="BUG" style="display: none">
<label for="device">Device</label>
<input type="text" name="device" />
<br>
<label for="info"></label>
<strong>Please provide more details in the message box below</strong>
</div> 
</td>
</tr>


<tr>
 <td valign="top">
  <label for="message">Message *</label>
 </td>
 <td valign="top">
  <textarea  name="message" maxlength="1000" cols="25" rows="6"></textarea>
 </td>
</tr>
<tr>
 <td colspan="2" style="text-align:center">
  <input type="submit" value="Submit"> 
 </td>
</tr>
</table>
</form>

PHP

<?php

if(isset($_POST['email'])) {
 
    $email_to = "david@davidsthompson.co.uk";
    $email_subject = "New Contact Form";
 
    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 />";
        echo "Please go back and fix these errors.<br /><br />";
        die();
    }
 
 
    // validation expected data exists
    if(!isset($_POST['name']) ||
        !isset($_POST['email']) ||
        !isset($_POST['subject']) ||
        !isset($_POST['message'])) {
        died('We are sorry, but there appears to be a problem with the form you submitted.');       
    }
 
     
 
    $name = $_POST['name']; // required
    $email_from = $_POST['email']; // required
    $subject = $_POST['subject']; // required 
    $message = $_POST['message']; // required 
 
    $error_message = "";
    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
 
  
    $string_exp = "/^[A-Za-z .'-]+$/";
 
  if(!preg_match($string_exp,$name)) {
    $error_message .= 'The Name you entered does not appear to be valid.<br />';
  }
 
  if(!preg_match($email_exp,$email_from)) {
    $error_message .= 'The Email Address you entered does not appear to be valid.<br />';
  }
  
    if(strlen($subject) < 2) {
    $error_message .= 'The Subject you entered does not appear to be valid.<br />';
  }
 
 
  if(strlen($message) < 2) {
    $error_message .= 'The Message you entered does 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 .= "Name: ".clean_string($name)."\n";
    $email_message .= "Email: ".clean_string($email_from)."\n";
    $email_message .= "Subject: ".clean_string($subject)."\n";
    $email_message .= "Message: ".clean_string($message)."\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);  
?>
 
<!-- include your own success html here -->
 
Thank you for contacting us. We will be in touch with you very soon.
 
<?php
 
}
?>

From the picture below you can see the information fields arnt being emailed.

form


#2

Well, it is doing exactly what you told it too. You are only pulling these form fields:

$name = $_POST['name']; // required
$email_from = $_POST['email']; // required
$subject = $_POST['subject']; // required 
$message = $_POST['message']; // required 

You do not pull out the others such as Event-Date or Event-Description or any others.
And, therefore they are not displayed anywhere because you did not put them into your email at all.
You need to make a full list of all the fields you use no matter which subject is used and pull them all out
of the form. Then, add them all to your email. The only ones that will contain data are the ones that show.
So, if you select the buglist one, those fields will show and be in the posted form. The others from the add
an event will not be posted as they are not showing on the page. Make sense? But, you need to add them
in your email somewhere. Hope that helps. If not, ask further questions! We are here to help!


#3

Perfect thank you!

Do you know what if/else code I should use do the email received only contains fields that text has been entered in as at the minute it sends all fields.

Regards
David


#4

I recommend that you read the detailed reply you got on one of the other help forums, where someone pointed out the problems that there are now, including having duplicate field names, and a way to implement this without writing out a bunch of conditional logic.

Once someone selects a subject, some or all of the form fields for that subject will be ‘required’. You need to validate the form fields for the selected subject and ignore the form fields for the non-selected subjects. You cannot just ignore all the empty form fields. The reply in the other forum lists a method of doing this selective validation, that can also be used to dynamically build the message body, without writing out a bunch of conditional logic.


#5

Well, if you posted to other sites, see what they said. I always still help everyone here, so…

You have form fields such as these:




<input type=“text” name="eventticketinf>


BUT, you never retrieve them from the form and never place them into your email. You need to add code to retrieve all of them, like $extrainfo = $_POST[“extrainfo”]; and then place the $extrainfo into your email.
If you want to check for this in the POSTED data, you do something loosely like:
if ( isset($_POST[“extrainfo”])) { $email_message .= “\r\nExtra Info: " . $_POST[”“extrainfo”] . “\r\n”;
which you would need to do for ALL inputs in your form. Then ALL data would be displayed in your email.

Think this out a bit and try again and let us know of your issues with it are afterwards…