Testing some HTML/PHP

Soldato
Joined
18 Aug 2011
Posts
2,853
Location
Norfolk
I was after a little help if possible please. I have created a php form for a webpage and tested it using XAMPP and it looks like all the variable etc return the correct data, but I don't have the facility to send the form by Email locally.

Is there any kind soul out there with the relevant hardware/software that could test this for me please?

Code:
<style> 
.error {
	color:#FF0000;
}
</style>
		
		<?php
			// define variables and set to empty values
			$nameErr = $emailErr = "";
			$name = $email = $comment = "";

			if ($_SERVER["REQUEST_METHOD"] == "POST") 
			{
   				if (empty($_POST["name"])) 
				{
     				$nameErr = "Name is required";
   				} 
				else 
				{
     				$name = test_input($_POST["name"]);
     				// check if name only contains letters and whitespace
     				if (!preg_match("/^[a-zA-Z ]*$/",$name)) 
					{
       					$nameErr = "Only letters and white space allowed"; 
     				}
   				}
   
   				if (empty($_POST["email"])) 
				{
     				$emailErr = "Email is required";
   				} 
				else 
				{
     				$email = test_input($_POST["email"]);
     				// check if e-mail address is well-formed
     				if (!filter_var($email, FILTER_VALIDATE_EMAIL)) 
					{
       					$emailErr = "Invalid email format"; 
     				}
   				}
     
   				if (empty($_POST["comment"])) 
				{
     				$comment = "";
   				} 
				else 
				{
     				$comment = test_input($_POST["comment"]);
   				}
			}

			function test_input($data) 
			{
   				$data = trim($data);
   				$data = stripslashes($data);
   				$data = htmlspecialchars($data);
   				return $data;
			}
		?>

	<p><span class="error">* required field.</span></p>
	
	<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> 
	
   	<label>Name:</label> <input type="text" name="name">
   	<span class="error">* <?php echo $nameErr;?></span>
   	<br><br>

   	<label>E-mail:</label> <input type="text" name="email">
   	<span class="error">* <?php echo $emailErr;?></span>
   	<br><br>

   	<label>Comment:</label> <textarea name="comment" rows="5" cols="40"></textarea>
   	<br><br>

	<input id="submit" input type="submit" name="submit" value="Submit">
	<br><br>
	</form>
	
	<?php
		//email the site owner
		$to      = '[email protected]';
		$subject = 'QUESTION TO ABC';
		$message = '$name has asked: "$comment."';
		$headers = 'From: $email' . "\r\n" .
		'Reply-To: [email][email protected][/email]' . "\r\n" .
		'X-Mailer: PHP/' . phpversion();

		mail($to, $subject, $message, $headers);
	
		//email the site visitor
		$userto      = '$email';
		$usersubject = 'Thank you for contacting ABC';
		$usermessage = 'Thank you, $name, for contacting ABC. Your query will be answered as soon as possible.';
		
		mail($userto, $usersubject, $usermessage, $headers);
	?> 
	
<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $comment;
echo "<br>";
echo $subject, $message;
echo "<br>";
echo $usersubject, $usermessage;
?>


Obviously the last bit was for testing purposes.


Do I need to create a $userheaders too?


Currently I think the code only checks for a valid e-mail format e.g:
[email protected]

Or does it check the email address exists e.g:
[email protected]

If not I guess an if{} would be useful?


Thanks a lot.
 
I'm guessing XAMPP is running under Windows? If so, Windows doesn't have a mail server. You need a local SMTP server or you need to setup sendmail.

There's a nice tutorial here.

Thanks.

I installed the test mail server tool and changed some of the XAMPP files.

It seems to work.

I seem to get (as the owner):
title: QUESTION TO ABC
content: $name has asked: "$comment."

I'd expect it to be something like "Jane has asked: Can you do XYZ please"

I seem to get (as the visitor):
title: Thank you for contacting ABC
content: Thank you, $name, for contacting ABC. Your query will be answered as soon as possible.


I would expect $name and $comment to be populated and return as per the entered String?

code below is:
PHP:
<style> 
.error {
	color:#FF0000;
}
</style>
		
		<?php
			// define variables and set to empty values
			$nameErr = $emailErr = "";
			$name = $email = $comment = "";

			if ($_SERVER["REQUEST_METHOD"] == "POST") 
			{
   				if (empty($_POST["name"])) 
				{
     				$nameErr = "Name is required";
   				} 
				else 
				{
     				$name = test_input($_POST["name"]);
     				// check if name only contains letters and whitespace
     				if (!preg_match("/^[a-zA-Z ]*$/",$name)) 
					{
       					$nameErr = "Only letters and white space allowed"; 
     				}
   				}
   
   				if (empty($_POST["email"])) 
				{
     				$emailErr = "Email is required";
   				} 
				else 
				{
     				$email = test_input($_POST["email"]);
     				// check if e-mail address is well-formed
     				if (!filter_var($email, FILTER_VALIDATE_EMAIL)) 
					{
       					$emailErr = "Invalid email format"; 
     				}
   				}
     
   				if (empty($_POST["comment"])) 
				{
     				$comment = "";
   				} 
				else 
				{
     				$comment = test_input($_POST["comment"]);
   				}
			}

			function test_input($data) 
			{
   				$data = trim($data);
   				$data = stripslashes($data);
   				$data = htmlspecialchars($data);
   				return $data;
			}
		?>

	<p><span class="error">* required field.</span></p>
	
	<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> 
	
   	<label>Name:</label> <input type="text" name="name">
   	<span class="error">* <?php echo $nameErr;?></span>
   	<br><br>

   	<label>E-mail:</label> <input type="text" name="email">
   	<span class="error">* <?php echo $emailErr;?></span>
   	<br><br>

   	<label>Comment:</label> <textarea name="comment" rows="5" cols="40"></textarea>
   	<br><br>

	<input id="submit" input type="submit" name="submit" value="Submit">
	<br><br>
	</form>
	
	<?php
		//email the site owner
		$to      = '[email protected]';
		$subject = 'QUESTION TO ABC';
		$message = '$name has asked: "$comment."';
		$headers = 'From: $email' . "\r\n" .
		'Reply-To: [email protected]' . "\r\n" .
		'X-Mailer: PHP/' . phpversion();

		mail($to, $subject, $message, $headers);
	
		//email the site visitor
		$userto      = '$email';
		$usersubject = 'Thank you for contacting ABC';
		$usermessage = 'Thank you, $name, for contacting ABC. Your query will be answered as soon as possible.';
		
		mail($userto, $usersubject, $usermessage, $headers);
	?>
 
On a side note the php code is in the .html.

I created a .htaccess file and it seems to prevent it from taking ages to load.

Is this the best move or would a separate php file be better?
 
Cheers again. All working.

Just a quick question. This bit:

PHP:
$headers = "From: $email" . "\r\n" .
		'Reply-To: [email protected]' . "\r\n" .
		'X-Mailer: PHP/' . phpversion();

Obviously tells the site owner that $email has emailed. I have done a similar thing for the other end:

PHP:
$userheaders = 'From: [email protected]' . "\r\n" .
		'Reply-To: [email protected]' . "\r\n" .
		'X-Mailer: PHP/' . phpversion();

The
PHP:
'Reply-To: [email protected]'
what is this?
 
Back
Top Bottom