Solved

Mail script error checking problem

Posted on 2009-07-07
10
271 Views
Last Modified: 2012-05-07
Hi, I have a form mailer that I'm completely stumped on. It landed on my desk and I can't figure out what's wrong with it. It continually gives me empty field errors even when they're populated and won't send the email.

I'm sure someone here will have it sorted out in ten seconds but I'm more of a graphics guy and I'm just not seeing what's wrong. Any help would be appreciated!

Thanks in advance!
<?php
 

function createForm() { // grab variables from posted form, if any exist

	$name = $_POST['name'];

	$phone = $_POST['phone'];

	$email = $_POST['email'];

	$comments = $_POST['comments'];
 
 

	// build the form, populate the fields if needed

	echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="POST">

	<p>FULL NAME:<br />

	<input name="name" type="text" id="name" size="40" value="' . $name . '"></p>

	<p>TELEPHONE:<br />

	<input name="phone" type="text" id="phone" size="40" value="' . $phone . '"></p>

	<p>EMAIL ADDRESS:<br />

	<input name="email" type="text" id="email" size="40" value="' . $email . '"></p>

	<p>QUESTION/COMMENT:<br />

	<textarea name="comments" id="comments" rows="5" style="width:100%;">' . $comments . '</textarea></p>

	<p><input type="submit" name="submit" value="Submit">&nbsp;<input type="reset" name="reset" value="Clear"></p>

	</form>';

} // end function createForm()

				

// if submit has been pressed 

if(isset($_POST['submit'])) {

	echo '<ul>';

				  

	// make sure all required fields are filled in and display errors if empty

	if(empty($name)) {

		$field1 = "0";

		echo '<li class="red strong">Name is required.</li>';

		} else {

		$field1 = "1"; }

		

	if(empty($phone)) {

		$field2 = "0";

		echo '<li class="red strong">Phone Number is required.</li>';

		} else {

		$field2 = "1"; }

				

	if(empty($email)) {

		$field3 = "0";	

		echo '<li class="red strong">Email Address is required.</li>';

		} else {

		$field3 = "1";	}

				

	if(empty($comments)) {

		$field4 = "0";

		echo '<li class="red strong">Comments are required.</li>';

		} else {

		$field4 = "1"; }

					

		echo '</ul>';

	

	// if any required fields are missing

	if(($field1=="0") || ($field2=="0") || ($field3=="0") || ($field4=="0")) {

		createForm();

		}

	

	// if all required fields are there

	if(($field1=="1") && ($field2=="1") && ($field3=="1") && ($field4=="1")) {

	

		// recipients email address

		$recipient = 'me@site.com';

	

		$name = $HTTP_POST_VARS['name'];

		$email = $HTTP_POST_VARS['email'];

		$phone = $HTTP_POST_VARS['phone'];

		$comments = $HTTP_POST_VARS['comments'];	

		

		// format the message for mail

		$comments = stripslashes($comments);

		$now = date('l F dS, Y g:i:s a');

		$message = "The following is a message from the website sent on $now.\n\nFrom: $name\nEmail: $email\nPhone Number: $phone\n\n\n$comments";

		

		// add email subject and headers

		$subject = "Email from website";

		$headers = "From: $name <$email>\n";

		$headers .= "Reply-To: $email\r\n";

	

		// sends the mail

		mail($recipient,$subject,$message,$headers);

		

		echo "<p class=\"strong bigger red\">Your email has been sent!</p>";

		echo "<p>Thank you for contacting us. We will do our best to reply to you as soon as is possible. For the quickest service, feel free to give us a phone call.</p>";

		echo "<p><a href=\"contact.php\">Send another message &#187;</a></p>";

		}

	} else {	

		createForm(); 

	} 			

?>

Open in new window

0
Comment
Question by:kingsburymedia
  • 5
  • 5
10 Comments
 
LVL 3

Expert Comment

by:Michal-Drozd
ID: 24797451
first do not use $HTTP_POST_VARS, it is deprecated, use $POST instead for grabbing values from post form
0
 
LVL 5

Author Comment

by:kingsburymedia
ID: 24797470
Ah yes, much appreciated. Still doesn't solve the problem but thanks for the heads up!
0
 
LVL 3

Expert Comment

by:Michal-Drozd
ID: 24797521
sorry i mean $_POST, dont $POST
0
 
LVL 3

Expert Comment

by:Michal-Drozd
ID: 24797523
try it
0
 
LVL 5

Author Comment

by:kingsburymedia
ID: 24797557
I figured you meant $_POST :) I did try it and it still doesn't work.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 3

Expert Comment

by:Michal-Drozd
ID: 24797800
code is working fine, i tested it on my server

mail($recipient,$subject,$message,$headers) is called with right parameters (i injected some debug echos)

so problem is only with mail function
0
 
LVL 5

Author Comment

by:kingsburymedia
ID: 24797846
I know the posting is working fine because when it returns the 'no value' error for the field checking, it POSTS the previous values back into the fields, even though the error checking tells me they are empty LOL

It's still just not working for me. I wonder if it's difference between PHP versions that is causing the anomolies between us. I'm using PHP Version 5.2.5
0
 
LVL 3

Accepted Solution

by:
Michal-Drozd earned 500 total points
ID: 24798031
i am using php5.2.9-2 but it should have same behaviour

i see next problem in code

why u check variables like $name, $phone, $email...when they werent set ?

i mean line like following:
if(empty($name)) {

Open in new window

0
 
LVL 5

Author Comment

by:kingsburymedia
ID: 24798738
That did it, thanks a ton. I forgot that I was only checking for variables in the createForm function.

Cheers!!
0
 
LVL 5

Author Closing Comment

by:kingsburymedia
ID: 31600747
Thanks, glad you spotted that!!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

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…
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…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

920 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

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now