Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 325
  • Last Modified:

if then statement within html email message

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
lepirtle
Asked:
lepirtle
  • 2
1 Solution
 
Frosty555Commented:
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
 
Frosty555Commented:
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
 
lepirtleAuthor Commented:
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
 
Chris SandriniSenior System EngineerCommented:
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

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now