Copy link to clipboard
Copied
Hello All,
First time I've done a mail form so not sure if this is what is supposed to happen. When an email is received via the mail form it has 'submit submit' at the bottom of the message and I'd like to get rid of it if poss.
The code is:
<div id="form"><form id="contactform" name="contactform" method="post" action="FormToEmail.php">
<label>Your Name:<br />
<input name="name" type="text" id="name" />
<br />
</label>
<br />
<label>Your Email Address:<br />
<input name="email" type="text" id="email" />
</label>
<br />
<br />
<label>Your Message:<br />
<textarea name="message" cols="50" rows="10" id="message"></textarea>
</label>
<br />
<br />
<input type="submit" name="Submit" value="Submit" />
And the php is:
$errors = array();
// Remove $_COOKIE elements from $_REQUEST.
if(count($_COOKIE)){foreach(array_keys($_COOKIE) as $value){unset($_REQUEST[$value]);}}
// Check all fields for an email header.
function recursive_array_check_header($element_value)
{
global $set;
if(!is_array($element_value)){if(preg_match("/(%0A|%0D|\n+|\r+)(content-type:|to:|cc:|bcc:)/i",$element_value)){$set = 1;}}
else
{
foreach($element_value as $value){if($set){break;} recursive_array_check_header($value);}
}
}
recursive_array_check_header($_REQUEST);
if($set){$errors[] = "You cannot send an email header";}
unset($set);
// Validate email field.
if(isset($_REQUEST['email']) && !empty($_REQUEST['email']))
{
if(preg_match("/(%0A|%0D|\n+|\r+|:)/i",$_REQUEST['email'])){$errors[] = "Email address may not contain a new line or a colon";}
$_REQUEST['email'] = trim($_REQUEST['email']);
if(substr_count($_REQUEST['email'],"@") != 1 || stristr($_REQUEST['email']," ")){$errors[] = "Email address is invalid";}else{$exploded_email = explode("@",$_REQUEST['email']);if(empty($exploded_email[0]) || strlen($exploded_email[0]) > 64 || empty($exploded_email[1])){$errors[] = "Email address is invalid";}else{if(substr_count($exploded_email[1],".") == 0){$errors[] = "Email address is invalid";}else{$exploded_domain = explode(".",$exploded_email[1]);if(in_array("",$exploded_domain)){$errors[] = "Email address is invalid";}else{foreach($exploded_domain as $value){if(strlen($value) > 63 || !preg_match('/^[a-z0-9-]+$/i',$value)){$errors[] = "Email address is invalid"; break;}}}}}}
}
// Check referrer is from same site.
if(!(isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && stristr($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST']))){$errors[] = "You must enable referrer logging to use the form";}
// Check for a blank form.
function recursive_array_check_blank($element_value)
{
global $set;
if(!is_array($element_value)){if(!empty($element_value)){$set = 1;}}
else
{
foreach($element_value as $value){if($set){break;} recursive_array_check_blank($value);}
}
}
recursive_array_check_blank($_REQUEST);
if(!$set){$errors[] = "You cannot send a blank form";}
unset($set);
// Display any errors and exit if errors exist.
if(count($errors)){foreach($errors as $value){print "$value<br>";} exit;}
if(!defined("PHP_EOL")){define("PHP_EOL", strtoupper(substr(PHP_OS,0,3) == "WIN") ? "\r\n" : "\n");}
// Build message.
function build_message($request_input){if(!isset($message_output)){$message_output ="";}if(!is_array($request_input)){$message_output = $request_input;}else{foreach($request_input as $key => $value){if(!empty($value)){if(!is_numeric($key)){$message_output .= str_replace("_"," ",ucfirst($key)).": ".build_message($value).PHP_EOL.PHP_EOL;}else{$message_output .= build_message($value).", ";}}}}return rtrim($message_output,", ");}
$message = build_message($_REQUEST);
$message = $message . PHP_EOL.PHP_EOL."-- ".PHP_EOL."";
$message = stripslashes($message);
$subject = "TOP FLOOR WEBSITE ENQUIRY";
$headers = "From: " . $_REQUEST['email'];
mail($my_email,$subject,$message,$headers);
?>
Thanks alot in advance
Oops. I warned you that I hadn't tested it. There was a missing closing parenthesis. But the condition I added was off anyway. I tested this one in an echo to the browser.
function build_message($request_input) {
if(!isset($message_output)) {
$message_output ="";
}
if(!is_array($request_input)) {
$message_output = $request_input;
}
else{
foreach($request_input as $key => $value) {
if ('submit' != strtolower($key)) {
if(!empty($value)) {
if(!is_numeric($key)) {
...
Copy link to clipboard
Copied
Wow. Not much defeats legibilty quite as well as avoiding line feeds and indention in recursive code! (and inserting multiple blank lines? Was that this online editor?)
Anyway, I did not test this, but try replacing your build_message function,
function build_message($request_input){if(!isset($message_output)){$message_output ="";}if(!is_array($request_input)){$message_output = $request_input;}else{foreach($request_input as $key => $value){if(!empty($value)){if(!is_numeric($key)){$message_output .= str_replace("_"," ",ucfirst($key)).": ".build_message($value).PHP_EOL.PHP_EOL;}else{$message_output .= build_message($value).", ";}}}}return rtrim($message_output,", ");}
With this:
function build_message($request_input) {
if(!isset($message_output)) {
$message_output ="";
}
if(!is_array($request_input)) {
$message_output = $request_input;
}
else{
foreach($request_input as $key => $value) {
if(!empty($value)) {
if(!is_numeric($key)) {
$message_output .= str_replace("_"," ",ucfirst($key)).": ".build_message($value).PHP_EOL.PHP_EOL;
}
else {
if ($key != strtolower('submit') {
$message_output .= build_message($value).", ";
}
}
}
}
}
return rtrim($message_output,", ");
}
(Added condition for 'submit')
Also, I highly recommend replacing all those $_REQUEST with $_POST or $_GET, whichever is appropriate for your form.
--
Mark A. Boyd
Keep-On-Learnin' 🙂
If you are reading this via email, be aware that it may not be an accurate representation of my message. Login to read the actual message and/or to reply.
Copy link to clipboard
Copied
Hello Mark
Thank you very much for your answer. As I had no idea on how to do a contact from with code I just googled away until I came up with this and downloaded it!
Anyway, I have instigated the code you gave me but I am getting:
Parse error: syntax error, unexpected '{' in /home/greenpat/public_html/topfloor/FormToEmail.php on line 118
As I mentioned, this is the first time I have done a mail form so I am completely in the dark on this and I very much
appreciate your help. Consequently, could you expand on :
Also, I highly recommend replacing all those $_REQUEST with $_POST or $_GET, whichever is appropriate for your form.
Thank you very much in advance
Copy link to clipboard
Copied
Oops. I warned you that I hadn't tested it. There was a missing closing parenthesis. But the condition I added was off anyway. I tested this one in an echo to the browser.
function build_message($request_input) {
if(!isset($message_output)) {
$message_output ="";
}
if(!is_array($request_input)) {
$message_output = $request_input;
}
else{
foreach($request_input as $key => $value) {
if ('submit' != strtolower($key)) {
if(!empty($value)) {
if(!is_numeric($key)) {
$message_output .= str_replace("_"," ",ucfirst($key)).": ".build_message($value).PHP_EOL.PHP_EOL;
}
else {
$message_output .= build_message($value).", ";
}
}
}
}
}
return rtrim($message_output,", ");
}--
Mark A. Boyd
Keep-On-Learnin' 🙂
If you are reading this via email, be aware that it may not be an accurate representation of my message. Login to read the actual message and/or to reply.
Copy link to clipboard
Copied
And to answer your other question, your form is using method="post", so it would be best to check the $_POST array. The $_REQUEST array contains data from several different places and it just makes sense to check for inputs where you expect them.
http://us2.php.net/manual/en/reserved.variables.request.php
http://us2.php.net/manual/en/reserved.variables.post.php
http://us2.php.net/manual/en/reserved.variables.get.php
--
Mark A. Boyd
Keep-On-Learnin' 🙂
If you are reading this via email, be aware that it may not be an accurate representation of my message. Login to read the actual message and/or to reply.
Find more inspiration, events, and resources on the new Adobe Community
Explore Now