Solved

if then statement within html email message

Posted on 2012-04-07
4
316 Views
Last Modified: 2012-06-21
I have a form which collects a user’s area code, exchange, station, and optional extension number. These variables are then used in an html mail script which emails those 3 or four fields to me. My mail script works fine as follows:

$to  = 'myname@mydomain.com';
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers .= 'From: my namee <myname@mydomain.com>' . "\r\n";
$subject = 'The subject line';
$message = "
<html>
<head>
<title>HTML email</title>
</head>
<body>
<table>
<tr>
<td>Telephone:</td><td>".$areacode."-".$exchange."-".$station." ".$_POST['extension']."</td></tr>
</table>
</body>
</html>
";
mail($to, $subject, $message, $headers);

But, because the $_POST['extension'] variable may not contain any characters, I thought I’d dress-up my script by writing an “if-then” statement that says something like
 if (strlen($_POST['extension']) > 0 then the output should be
areacode-exchange-station ext nnn (where nnn is the optional extension number that may or may not be provided) and if the strlen($_POST['extension'])  is < 1 then the output should be simply
areacode-exchange-station

I have tried every combination of writing an if-then statement and escaping the quotes that I am ashamed to admit how much time I’ve wasted.

Might someone provide direction?
Thanks.
0
Comment
Question by:lepirtle
  • 2
4 Comments
 
LVL 31

Expert Comment

by:Frosty555
ID: 37820464
It would be more elegant if you broke up that $message variable into a few statements rather than having the entire thing be one big huge statement, but you can do it with the ternary operator:

$to  = 'myname@mydomain.com';
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers .= 'From: my namee <myname@mydomain.com>' . "\r\n";
$subject = 'The subject line';

$telephone = $areacode . "-" . $exchange . "-" . $station . (strlen($_POST['extension']) > 0 ? (" ext " . $_POST['extension']) : $_POST['extension']);

$message = "
<html>
<head>
<title>HTML email</title>
</head>
<body>
<table>
<tr>
<td>Telephone:</td><td>$telephone</td></tr>
</table>
</body>
</html>
";

Open in new window


The important part of the statement is the ternary operator used in this part of the expression:

(strlen($_POST['extension']) > 0 ? (" ext " . $_POST['extension']) : "") 

Open in new window


Which states

IF the statement:
     strlen($_POST['extension']) > 0
evaluates to TRUE then output:
     ("ext " . $_POST['extension'])
otherwise, output
     ""    <-- empty string
0
 
LVL 31

Accepted Solution

by:
Frosty555 earned 500 total points
ID: 37820468
I think this is a bit more error-proof and a bit more readable, though:

...

$telephone = $areacode . "-" . $exchange . "-" . $station;
if( array_key_exists('extension', $_POST) ) {
   if( strlen($_POST['extension'] > 0 ) {
        $telephone = $telephone . " ext " . $_POST['extension'];
   }
}

...

Open in new window


When you're talking about "optional" form parameters, it is important to test whether the post variable actually exists or not. If the 'extension' parameter was never passed in the form then your code will throw a warning since $_POST['extension'] would be indexing a non-existent index in the $_POST array. The code above tests for that and behaves correctly.
0
 

Author Closing Comment

by:lepirtle
ID: 37821278
Frosty555,
Thanks very much! I tried both solutions and they each work the way I want. Note for anyone else regarding this: the 2nd solution, line #5 is missing a ")", it should read:
   if( strlen($_POST['extension']) > 0 ) {

I also want to thank you for the explanation you provided in solution #1 because I didn't know about ternary operators but reading your very thoughtful plain-english explanation helped me understand.
0
 
LVL 11

Expert Comment

by:un1x86
ID: 37822643
also a very elegant way is to use empty()

This will check if $_POST['extesion'] is actually set and if it has a value in it.

For example

if ( !empty($_POST['extension']) )
{
  $telephone = $telephone . " ext " . $_POST['extension'];   
}

Open in new window

0

Featured Post

NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

Question has a verified solution.

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

Generating table dynamically is the most common issue faced by php developers.... So it seems there is a need of an article that explains the basic concept of generating tables dynamically. It just requires a basic knowledge of html and little maths…
Password hashing is better than message digests or encryption, and you should be using it instead of message digests or encryption.  Find out why and how in this article, which supplements the original article on PHP Client Registration, Login, Logo…
The viewer will learn how to count occurrences of each item in an array.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

810 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