Link to home
Start Free TrialLog in
Avatar of kingsburymedia
kingsburymediaFlag for Canada

asked on

Mail script error checking problem

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

Avatar of Michal-Drozd
Michal-Drozd
Flag of Czechia image

first do not use $HTTP_POST_VARS, it is deprecated, use $POST instead for grabbing values from post form
Avatar of kingsburymedia

ASKER

Ah yes, much appreciated. Still doesn't solve the problem but thanks for the heads up!
sorry i mean $_POST, dont $POST
try it
I figured you meant $_POST :) I did try it and it still doesn't work.
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
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
ASKER CERTIFIED SOLUTION
Avatar of Michal-Drozd
Michal-Drozd
Flag of Czechia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
That did it, thanks a ton. I forgot that I was only checking for variables in the createForm function.

Cheers!!
Thanks, glad you spotted that!!