Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

if then statement within html email message

Posted on 2012-04-07
4
Medium Priority
?
324 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 2000 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:Chris Sandrini
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

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

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

Build an array called $myWeek which will hold the array elements Today, Yesterday and then builds up the rest of the week by the name of the day going back 1 week.   (CODE) (CODE) Then you just need to pass your date to the function. If i…
Originally, this post was published on Monitis Blog, you can check it here . In business circles, we sometimes hear that today is the “age of the customer.” And so it is. Thanks to the enormous advances over the past few years in consumer techno…
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 look for a specific file type in a local or remote server directory using PHP.
Suggested Courses

609 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