Solved

Form to different email depending on Postcode

Posted on 2011-02-22
10
325 Views
Last Modified: 2012-05-11
Hello

I have a form on a website which when filled out sends an email.  What I would like to do is change it so that the form is sent to a different email address depending on the inputted postcode.  Is this something easily achievable, and where would I start?

The form code is below:

<form action="confirmation.php" method="post" name="NewsletterSignup.php">
  <span id="sprytextfield1">
  <label for="name">Full Name</label>
  *<br />
<input name="name" type="text" id="name" size="30" />
  <span class="textfieldRequiredMsg">A value is required.</span></span>
  <br /><br />
  <span id="sprytextfield2">
  <label for="email">Email Address*<br />
  </label>
  
  <input name="email" type="text" id="email" size="30" />
  <span class="textfieldRequiredMsg">A value is required.</span></span>
   <br /><br />
    <span id="sprytextfield3">
  <label for="address">Address*<br />
  </label>
  <textarea name="address" cols="30" rows="3" id="address"></textarea>
  <span class="textfieldRequiredMsg">A value is required.</span></span>
  <br />
  <br />
      <span id="sprytextfield4">
    <label for="postcode">Postcode*<br />
    </label>
  <input name="postcode" type="text" id="postcode" size="30" />
  <span class="textfieldRequiredMsg">A value is required.</span></span>
      <p><br />
        <br />
        <label>Telephone Number</label>
   <br />
        <input name="telephone" type="text" size="30" />
        <br /><br />
        <label>Type of Business<br />
        </label>
        <select name="business">
          <option value="Mobile">Mobile</option>
          <option value="Salon">Salon</option>
          <option value="Home">Home</option>
          <option value="Other">Other</option>
        </select>
        <br />
        <br />
        <label>Number of tans done per week </label>
        <br />
        <input name="tansperweek" type="text" size="30" />
<br /><br />
<p>Please choose below if you would like to be contacted about our offers and events. We will never use your address for anything but information about our products.</p>
<br />
  
  <select name="offers">
    <option value="YES, please add me to your list." selected="selected">YES, please add me to your list.</option>
    <option value="NO thanks, please do not add me to your list.">NO thanks, please do not add me to your list.</option>
  </select>
  <br /><br />
  
  
  <input name="signup" type="submit" value="Sign Up Now" />
</form>
 

Open in new window


And the action it calls to send the email:

<?php

$my_email = "mail@mydomain.com";

/*

Enter the continue link to offer the user after the form is sent.  If you do not change this, your visitor will be given a continue link to your homepage.

If you do change it, remove the "/" symbol below and replace with the name of the page to link to, eg: "mypage.htm" or "http://www.elsewhere.com/page.htm"

*/



/*

Step 3:

Save this file (FormToEmail.php) and upload it together with your webpage containing the form to your webspace.  IMPORTANT - The file name is case sensitive!  You must save it exactly as it is named above!  Do not put this script in your cgi-bin directory (folder) it may not work from there.

THAT'S IT, FINISHED!

You do not need to make any changes below this line.

*/

$errors = array();

// Remove $_COOKIE elements from $_REQUEST.

if(count($_COOKIE)){foreach(array_keys($_COOKIE) as $value){unset($_REQUEST[$value]);}}

// Check all fields for an email header.

function recursive_array_check_header($element_value)
{

global $set;

if(!is_array($element_value)){if(preg_match("/(%0A|%0D|\n+|\r+)(content-type:|to:|cc:|bcc:)/i",$element_value)){$set = 1;}}
else
{

foreach($element_value as $value){if($set){break;} recursive_array_check_header($value);}

}

}

recursive_array_check_header($_REQUEST);

if($set){$errors[] = "You cannot send an email header";}

unset($set);

// Validate email field.

if(isset($_REQUEST['email']) && !empty($_REQUEST['email']))
{

if(preg_match("/(%0A|%0D|\n+|\r+|:)/i",$_REQUEST['email'])){$errors[] = "Email address may not contain a new line or a colon";}

$_REQUEST['email'] = trim($_REQUEST['email']);

if(substr_count($_REQUEST['email'],"@") != 1 || stristr($_REQUEST['email']," ")){$errors[] = "Email address is invalid";}else{$exploded_email = explode("@",$_REQUEST['email']);if(empty($exploded_email[0]) || strlen($exploded_email[0]) > 64 || empty($exploded_email[1])){$errors[] = "Email address is invalid";}else{if(substr_count($exploded_email[1],".") == 0){$errors[] = "Email address is invalid";}else{$exploded_domain = explode(".",$exploded_email[1]);if(in_array("",$exploded_domain)){$errors[] = "Email address is invalid";}else{foreach($exploded_domain as $value){if(strlen($value) > 63 || !preg_match('/^[a-z0-9-]+$/i',$value)){$errors[] = "Email address is invalid"; break;}}}}}}

}

// Check referrer is from same site.

if(!(isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && stristr($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST']))){$errors[] = "You must enable referrer logging to use the form";}

// Check for a blank form.

function recursive_array_check_blank($element_value)
{

global $set;

if(!is_array($element_value)){if(!empty($element_value)){$set = 1;}}
else
{

foreach($element_value as $value){if($set){break;} recursive_array_check_blank($value);}

}

}

recursive_array_check_blank($_REQUEST);

if(!$set){$errors[] = "You cannot send a blank form";}

unset($set);

// Display any errors and exit if errors exist.

if(count($errors)){foreach($errors as $value){print "$value<br>";} exit;}

if(!defined("PHP_EOL")){define("PHP_EOL", strtoupper(substr(PHP_OS,0,3) == "WIN") ? "\r\n" : "\n");}

// Build message.

function build_message($request_input){if(!isset($message_output)){$message_output ="";}if(!is_array($request_input)){$message_output = $request_input;}else{foreach($request_input as $key => $value){if(!empty($value)){if(!is_numeric($key)){$message_output .= str_replace("_"," ",ucfirst($key)).": ".build_message($value).PHP_EOL.PHP_EOL;}else{$message_output .= build_message($value).", ";}}}}return rtrim($message_output,", ");}

$message = build_message($_REQUEST);

$message = $message . PHP_EOL.PHP_EOL."-- ".PHP_EOL."";

$message = stripslashes($message);

$subject = "Newsletter Signup Form";

$headers = "From: " . $_REQUEST['email'];

mail($my_email,$subject,$message,$headers);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

        <?php include('_inc/global.php'); ?>
        
<link href="css/style2.css" rel="stylesheet" type="text/css" />

	<script type="text/javascript" src="js/jquery.js"></script>
	<script type="text/javascript" src="js/jquery-easing-1.3.pack.js"></script>
	<script type="text/javascript" src="js/jquery-easing-compatibility.1.2.pack.js"></script>
	<script type="text/javascript" src="js/coda-slider.1.1.1.pack.js"></script>
	<script type="text/javascript" src="js/ix-slider.js"></script>

</head>

<body>

<div id="outer-wrapper">

	<div id="inner-wrapper">    <div id="header">
    <div id="headerL"><h1 id="logo"></h1></div>    <div id="headerM"></div>
    <div id="headerR"><h2 id="Blogo"></h2></div>
    </div>
        <div id="top-menu"><?php include('_inc/menu.php'); ?></div>
        <div id="content-wrapper">
        <div id="side-bar">
        
		<?php include('_inc/sidepanel-child.php'); ?>

        <?php include('_inc/sidepanel2.php'); ?>


        </div>
        <div id="content"> 
          <h1>Thank you<br />
          </h1>
          <p><br />
          Thank you for your enquiry. We will get back to you very shortly.<br />
  <br />
  <br />
          </p>
          <p>&nbsp;</p>
          <p><img src="images/layout/mail.jpg" alt="Thank you mail" width="306" height="285" class="mail" /></p>
          <h1>&nbsp;</h1>
          <p><br />
            <br />
          </p>
        </div>
        <div id="content-end-spacer"></div>
        <div id="clear"></div>
        <div id="box-wrapper">
         <?php include('_inc/4b3.php'); ?>
        </div>        <div id="quick-wrapper">
          
        </div>
        <div id="qclear"></div>        
        <div id="footer-wrapper">
        <?php include('_inc/footer_nav.php'); ?>
        </div>
		</div>

	</div>
</div>
</body>
</html>

Open in new window


Many Thanks for any assistance.
0
Comment
Question by:JakeSpencer
  • 3
  • 2
  • 2
  • +3
10 Comments
 
LVL 20

Expert Comment

by:Mark Brady
ID: 34949641
Well I guess you would start at the top of the processing form. You will need to check which postcode was submitted, then change the $my_email value depending on which postcode was submitted.

first, work out which postcodes will be sent to which email address. Perhaps create an array to store the postcodes for each email address you wish to send to then do a simple "if()" statement to workout which email address to use.

if($_REQUEST['postcode'] /////blah blah then set the email adresss
{
$my_email = "email1@yourdomain.com";
}else{
$my_email = "email2@yourdomain.com";
}

Then your script will send to the right email address. So create several arrays to hold the different groups of postcodes, then you can search each array for the posted (submitted) postcode and use that in your if statement.

Hope this helps
0
 
LVL 1

Expert Comment

by:DoCBReeD
ID: 34949653
Are you looking to do a small handful of postcodes? if so use the following, or are you looking to do a greater list that needs a database involved?

if(isset($_POST['postcode'])){
    switch($_POST['postcode']){
        case '54313' : $my_email = "54313@mydomain.com"; break;
        case '54312' : $my_email = "54312@mydomain.com"; break;
        case '54311' : $my_email = "54311@mydomain.com"; break;
        default : $my_email = "mail@mydomain.com"; break;
    }
}else{
    $my_email = "mail@mydomain.com";
}

Open in new window

0
 
LVL 10

Expert Comment

by:jfromanski
ID: 34950012
At the very beginning of php file replace
$my_email = "mail@mydomain.com";

with following code
$postcode = $_POST['postcode'];
if( $postcode=='ABC' ){
  $my_email = "mail@mydomain.com";
}
elseif( $postcode=='DEF' ){
  $my_email = "mail@otherdomain.com";
}
elseif( .... // code other possibilities

Open in new window

0
 

Author Comment

by:JakeSpencer
ID: 34950099
Thanks for the help guys.  I've just been informed that we only split the leads by the first 2 letters of the postcode.  

So if postcode is WR51BG it needs to only use the first 2 characters (WR) and ignore the rest.  If the postcode is B60 1TY it only needs to use the B and strip out the rest.

Does this make it much harder?

Thanks again
0
 
LVL 20

Expert Comment

by:Mark Brady
ID: 34950116
Does this make it much harder? <- Can you differentiate between different post codes using only 1 letter? If so then most of our examples above will work.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:JakeSpencer
ID: 34950240
Because we use postcode zones to assign emails, the 1st 2 (or) 1 letters of the postcode will suffice.

Is there a way to tell the script to drop everything after the 1st 2 characters (or 1 if the 2nd character is a number)?

Many Thanks, I really appreciate the help.
0
 
LVL 34

Expert Comment

by:Beverley Portlock
ID: 34950440
If these are UK postcodes then you split them up using a regular expression

<?php

     $pattern = '#^([a-z]+)[0-9]+[a-z]?\s*[0-9]{1}[a-z]{2}$#i';

     preg_match( $pattern, "B60 1ty", $match );
     echo $match [1] . "<br/>";

     preg_match( $pattern, "WR51BG", $match );
     echo $match [1] . "<br/>";

Open in new window

0
 
LVL 108

Expert Comment

by:Ray Paseur
ID: 34950849
If you want only the first character of the postcode, you can use substr($thing, 0, 1); and for the first two characters you can use substr($thing, 0, 2);

To know if the second character is a number, you can do something like this (string positions are numbered from zero):

$second = substr($thing,1,1);
if (preg_match('/[0-9]/', $second)) { /* THE SECOND POSITION IS A NUMBER */ }

See:
http://us.php.net/manual/en/function.substr.php
http://us.php.net/manual/en/function.preg-match.php
0
 
LVL 1

Accepted Solution

by:
DoCBReeD earned 500 total points
ID: 34950902
Here you go bud...

if(isset($_POST['postcode'])){ 
    $postcode = $_POST['postcode'];
    if(substr(strtolower($postcode), 0, 2) == 'wr'){ 
        $my_email = "WR@mydomain.com"; //EMAIL FOR WR
    }elseif(substr(strtolower($postcode), 0, 1) == 'b'){
        $my_email = "B@mydomain.com"; //EMAIL FOR B
    }else{
        $my_email = "Default@mydomain.com"; //DEFAULT EMAIL
    }
}else{
    $my_email = "Default@mydomain.com"; //IF POSTCODE WASNT ENTERED AT ALL
}

Open in new window

0
 

Author Comment

by:JakeSpencer
ID: 34959327
THAT IS BRILLIANT!!!!!  Many Thanks
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Is your Office 365 signature not working the way you want it to? Are signature updates taking up too much of your time? Let's run through the most common problems that an IT administrator can encounter when dealing with Office 365 email signatures.
Find out what you should include to make the best professional email signature for your organization.
The viewer will receive an overview of the basics of CSS showing inline styles. In the head tags set up your style tags: (CODE) Reference the nav tag and set your properties.: (CODE) Set the reference for the UL element and styles for it to ensu…
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now