Solved

if then statement within html email message

Posted on 2012-04-07
4
321 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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

SharePoint Admin?

Enable Your Employees To Focus On The Core With Intuitive Onscreen Guidance That is With You At The Moment of Need.

Question has a verified solution.

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

Since pre-biblical times, humans have sought ways to keep secrets, and share the secrets selectively.  This article explores the ways PHP can be used to hide and encrypt information.
Introduction This article is intended for those who are new to PHP error handling (https://www.experts-exchange.com/articles/11769/And-by-the-way-I-am-New-to-PHP.html).  It addresses one of the most common problems that plague beginning PHP develop…
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

737 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