How do I output form values in html php email?

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
Subyne Simean
Forum Newbie
Posts: 19
Joined: Tue May 09, 2006 1:59 pm

How do I output form values in html php email?

Post by Subyne Simean »

Hi, I have a form which uses the following form field names:

name
age
dob
interests
comments

What I am trying to do is output the values of the form into a html email to my personal email address. I have found this code to send a html email but I'm not sure how I output the values into the html.

I would be very grateful if someone could help me with this :)

Here's the PHP code for the html email:

Code: Select all

<?
    //change this to your email.
    $to = "a.mcleod4@ntlworld.com";
    $from = "noreply@myserver.com";
    $subject = "New message!";

    //begin of HTML message
    $message = <<<EOF
<html>
<body>
I would like to list the user's form input values here, that can be placed in html tables etc...
</body>
</html>
EOF;
   //end of message
    $headers  = "From: $from\r\n";
    $headers .= "Content-type: text/html\r\n";

    //options to send to cc+bcc
    //$headers .= "Cc: [email][/email]";
    //$headers .= "Bcc: [email][/email]";
    
    // now lets send the email.
    mail($to, $subject, $message, $headers);
?>
User avatar
RobertGonzalez
Site Administrator
Posts: 14293
Joined: Tue Sep 09, 2003 6:04 pm
Location: Fremont, CA, USA

Post by RobertGonzalez »

Remember to make sure to clean your vars before sending to prevent malicious people passing bad data.

Code: Select all

<?php
$name = $_POST['name'];
$age = $_POST['age'];
$dob = $_POST['dob'];
$interests = $_POST['interests'];
$comments = $_POST['comments'];
?>
Once the vars are assigned the values from the form, use them how you will throughout the script.

Also, you may want to check out d11wtq's SwiftMailer class for a neat PHP based mailing application. It is in the code Snippets section of this community.
Flamie
Forum Contributor
Posts: 166
Joined: Mon Mar 01, 2004 3:19 pm

Post by Flamie »

yes, what everah said but then you need to do this to have them into your 1 $message variable:
$message = "name: ".$name."<br> age: ".$age". etc etc
This way you'll have the whole message in 1 variable and you can send it afterwards.
Good luck :)
Subyne Simean
Forum Newbie
Posts: 19
Joined: Tue May 09, 2006 1:59 pm

thanks

Post by Subyne Simean »

Thanks you have solved that for me! One thing... I have a text area for the comments. When I use carriage returns in the textarea, they are not replicated when sending the email. All the text just looks bunched up.

Is there an easy way to output the exact way someone types their message?
User avatar
Chris Corbyn
Breakbeat Nuttzer
Posts: 13098
Joined: Wed Mar 24, 2004 7:57 am
Location: Melbourne, Australia

Re: thanks

Post by Chris Corbyn »

Subyne Simean wrote:Thanks you have solved that for me! One thing... I have a text area for the comments. When I use carriage returns in the textarea, they are not replicated when sending the email. All the text just looks bunched up.

Is there an easy way to output the exact way someone types their message?
nl2br() will sort out the line breaks for you. If you want full on strucutures the same as the user types them try downloading a WYSIWYG editor like TinyMCE - it's pretty neat :)
Subyne Simean
Forum Newbie
Posts: 19
Joined: Tue May 09, 2006 1:59 pm

Post by Subyne Simean »

sorry mate, how do i use that nl2br() thingy?
User avatar
Chris Corbyn
Breakbeat Nuttzer
Posts: 13098
Joined: Wed Mar 24, 2004 7:57 am
Location: Melbourne, Australia

Post by Chris Corbyn »

Subyne Simean wrote:sorry mate, how do i use that nl2br() thingy?

Code: Select all

$string = "some string\nwith new lines\n in it";

echo nl2br($string);

/*
some string<br />
with new lines<br />
in it
*/
User avatar
RobertGonzalez
Site Administrator
Posts: 14293
Joined: Tue Sep 09, 2003 6:04 pm
Location: Fremont, CA, USA

Post by RobertGonzalez »

Matt Mullenweg (of WordPress fame) developed a cool little snippet that is a bit more advanced version of nl2br(). I have used it a couple and it is pretty clean.

He has a few other neat little code bits if your interested in those as well.
Subyne Simean
Forum Newbie
Posts: 19
Joined: Tue May 09, 2006 1:59 pm

Post by Subyne Simean »

Code: Select all

<?
    //change this to your email.
    $to = "a.mcleod4@ntlworld.com";
    $from = "noreply@myserver.com";
    $subject = "new message";

$name = $_POST['name'];
$age = $_POST['age'];
$dob = $_POST['dob'];
$interests = $_POST['interests'];
$comments = $_POST['comments'];

function wpautop($pee, $br = 1) {
        $pee = $pee . "\n"; // just to make things a little easier, pad the end
        $pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
        // Space things out a little
        $pee = 

preg_replace('!(<(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|selec

t|form|blockquote|address|math|p|h[1-6])[^>]*>)!', "\n$1", $pee); 
        $pee = 

preg_replace('!(</(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|sele

ct|form|blockquote|address|math|p|h[1-6])>)!', "$1\n\n", $pee);
        $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines 
        $pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
        $pee = preg_replace('/\n?(.+?)(?:\n\s*\n|\z)/s', "<p>$1</p>\n", $pee); // make paragraphs, 

including one at the end 
        $pee = preg_replace('|<p>\s*?</p>|', '', $pee); // under certain strange conditions it could 

create a P of entirely whitespace 
        $pee = 

preg_replace('!<p>\s*(</?(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|h

r|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)\s*</p>!', "$1", $pee); // don't pee all 

over a tag
        $pee = preg_replace("|<p>(<li.+?)</p>|", "$1", $pee); // problem with nested lists
        $pee = preg_replace('|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $pee);
        $pee = str_replace('</blockquote></p>', '</p></blockquote>', $pee);
        $pee = 

preg_replace('!<p>\s*(</?(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|h

r|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)!', "$1", $pee);
        $pee = 

preg_replace('!(</?(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|sel

ect|form|blockquote|address|math|p|h[1-6])[^>]*>)\s*</p>!', "$1", $pee); 
        if ($br) $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line 

breaks
        $pee = 

preg_replace('!(</?(?:table|thead|tfoot|caption|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|

blockquote|address|math|p|h[1-6])[^>]*>)\s*<br />!', "$1", $pee);
        $pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)!', '$1', $pee);
        $pee = preg_replace('!(<pre.*?>)(.*?)</pre>!ise', " stripslashes('$1') .  

stripslashes(clean_pre('$2'))  . '</pre>' ", $pee);

        return $pee; 
}
    //begin of HTML message
    $message = <<<EOF
<html>
<head>
<style type="text/css">
body, td { background-color: white; font-family: Verdana; font-size: 12px; color: black; }
table { border: 3 double black; width: 400px; }
td { border: 1 solid black; padding: 4px; }
.heading { font-weight: bold; font-size: 16px; }
</style>
</head>
<body>
<table>
<tr>
<td colspan="2" class="heading">Smart Recruitmat (UK) Ltd</td>
</tr>
<tr>
<td><strong>Visitor name:</strong></td>
<td>$name</td>
</tr>
<tr>
<td><strong>Age:</strong></td>
<td>$age</td>
</tr>
<tr>
<td><strong>DOB:</strong></td>
<td><a href="mailto:$mail">$dob</a></td>
</tr>
<tr>
<td><strong>Interests:</strong></td>
<td>$interests</td>
</tr>
<tr>
<td><strong>Comments:</strong></td>
<td>$comments</td>
</tr>
</table>
EOF;
   //end of message
    $headers  = "From: $from\r\n";
    $headers .= "Content-type: text/html\r\n";

    //options to send to cc+bcc
    //$headers .= "Cc: [email][/email]";
    //$headers .= "Bcc: [email][/email]";
    header("Location: thankyou.html");

    // now lets send the email.
    mail($to, $subject, $message, $headers);
    
?>
I added that code &pee thingy into my php file... should it just work or do I need to do something else? Sorry guys, I'm bleedin' useless!
User avatar
RobertGonzalez
Site Administrator
Posts: 14293
Joined: Tue Sep 09, 2003 6:04 pm
Location: Fremont, CA, USA

Post by RobertGonzalez »

At the top of the script include the wpautop function...

Code: Select all

<?php
function wpautop($pee, $br = 1) {
	$pee = $pee . "\n"; // just to make things a little easier, pad the end
	$pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
	// Space things out a little
	$pee = preg_replace('!(<(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)!', "\n$1", $pee); 
	$pee = preg_replace('!(</(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])>)!', "$1\n\n", $pee);
	$pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines 
	$pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
	$pee = preg_replace('/\n?(.+?)(?:\n\s*\n|\z)/s', "<p>$1</p>\n", $pee); // make paragraphs, including one at the end 
	$pee = preg_replace('|<p>\s*?</p>|', '', $pee); // under certain strange conditions it could create a P of entirely whitespace 
	$pee = preg_replace('!<p>\s*(</?(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|hr|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)\s*</p>!', "$1", $pee); // don't pee all over a tag
	$pee = preg_replace("|<p>(<li.+?)</p>|", "$1", $pee); // problem with nested lists
	$pee = preg_replace('|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $pee);
	$pee = str_replace('</blockquote></p>', '</p></blockquote>', $pee);
	$pee = preg_replace('!<p>\s*(</?(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|hr|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)!', "$1", $pee);
	$pee = preg_replace('!(</?(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)\s*</p>!', "$1", $pee); 
	if ($br) $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks
	$pee = preg_replace('!(</?(?:table|thead|tfoot|caption|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)\s*<br />!', "$1", $pee);
	$pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)!', '$1', $pee);
	$pee = preg_replace('!(<pre.*?>)(.*?)</pre>!ise', " stripslashes('$1') .  stripslashes(clean_pre('$2'))  . '</pre>' ", $pee);

	return $pee; 
}
?>
Then in your code, run your comments through the function...

Code: Select all

<?php
 //change this to your email.
$to = "a.mcleod4@ntlworld.com";
$from = "noreply@myserver.com";
$subject = "new message";

$name = $_POST['name'];
$age = $_POST['age'];
$dob = $_POST['dob'];
$interests = wpauto($_POST['interests']);
$comments = wpautop($_POST['comments']);

    //begin of HTML message
    $message = <<<EOF
<html>
<head>
<style type="text/css">
body, td { background-color: white; font-family: Verdana; font-size: 12px; color: black; }
table { border: 3 double black; width: 400px; }
td { border: 1 solid black; padding: 4px; }
.heading { font-weight: bold; font-size: 16px; }
</style>
</head>
<body>
<table>
<tr>
<td colspan="2" class="heading">Smart Recruitmat (UK) Ltd</td>
</tr>
<tr>
<td><strong>Visitor name:</strong></td>
<td>$name</td>
</tr>
<tr>
<td><strong>Age:</strong></td>
<td>$age</td>
</tr>
<tr>
<td><strong>DOB:</strong></td>
<td><a href="mailto:$mail">$dob</a></td>
</tr>
<tr>
<td><strong>Interests:</strong></td>
<td>$interests</td>
</tr>
<tr>
<td><strong>Comments:</strong></td>
<td>$comments</td>
</tr>
</table>
EOF;
   //end of message
    $headers  = "From: $from\r\n";
    $headers .= "Content-type: text/html\r\n";

    //options to send to cc+bcc
    //$headers .= "Cc: [email][/email]";
    //$headers .= "Bcc: [email][/email]";
    header("Location: thankyou.html");

    // now lets send the email.
    mail($to, $subject, $message, $headers);
   
?>
Subyne Simean
Forum Newbie
Posts: 19
Joined: Tue May 09, 2006 1:59 pm

Post by Subyne Simean »

I bow to you
User avatar
RobertGonzalez
Site Administrator
Posts: 14293
Joined: Tue Sep 09, 2003 6:04 pm
Location: Fremont, CA, USA

Post by RobertGonzalez »

Glad it worked.
Post Reply