I've been writing some code to send emails from a site. The base code worked perfectly, I then added some small bits for checking the inputted data is right and it's now just displaying that the page isn't working. This is the first time I've used PHP so am quite new to it all, although I can't see any errors with the code?
<?php
if(isset($_POST['submitButton'])){
function errorMessage($error) {
echo 'Apologies but the request has not been successful<br/>';
echo 'Please see below, amend and then resubmit<br/><ul>';
echo $error . '</ul>';
die();
}
$error_message = ""; // set the error message as empty
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; // string to look for
$string_exp = "/^[A-Za-z .'-]+$/"; // string to look for
$contact_exp = '/^[0-9]/';
$subject = " Request"; // subject of their email to me
$subject2 = "Copy of your Request"; // subject of the email back to them
$to = "myemail"; // this is my Email address
$from = $_POST['emailAddressField']; // this is the requesters Email address
if (!preg_match($email_exp,$from)) {
$error_message . = '<li>The Email Address you entered does not appear to be valid.</li>';
}
$first_name = $_POST['firstNameField']; // this is their first name
if (!preg_match($string_exp,$first_name)) {
$error_message . = '<li>The first name you entered does not appear to be valid.</li>';
}
$last_name = $_POST['surnameField']; // this is their surname
if (!preg_match($string_exp,$last_name)) {
$error_message . = '<li>The surname you entered does not appear to be valid.</li>';
}
$contact_number = $_POST['contactNumberField']; // this is their contact number
if (!preg_match($contact_exp,$contact_number)){
$error_message . = '<li>The contact number you entered does not appear to be valid.</li>';
}
$details_field = $_POST['detailsField']; // this is the details
if (strlen($details_field) < 10) {
$error_message . = '<li>Please give more details, at least 10 characters.</li>';
}
$message = $first_name . " " . $last_name . " (" . $contact_number . ") wrote the following:" . "
" . $details_field; // message of email to me
$message2 = "Here is a copy of your request " . $first_name . " (" . $contact_number . ").
" . $details_field . "
Many thanks"; // message of email to requester
$headers = "From:" . $from; // message of email header to me
$headers2 = "From:" . $to; // message of email header to requester
// if there have been errors, then display error message and end
if(strlen($error_message) > 0) {
errorMessage($error_message);
}
// send the emails
mail($to,$subject,$message,$headers);
mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender
echo "Request sent. Thank you " . $first_name . ", I will contact you shortly.";
}
?>
Works perfectly:
<?php
if(isset($_POST['submitButton'])){
$subject = "Request"; // subject of their email to me
$subject2 = "Copy of your Request"; // subject of the email back to them
$to = "myemail"; // this is my Email address
$from = $_POST['emailAddressField']; // this is the requesters Email address
$first_name = $_POST['firstNameField']; // this is their first name
$last_name = $_POST['surnameField']; // this is their surname
$contact_number = $_POST['contactNumberField']; // this is their contact number
$details_field = $_POST['detailsField']; // this is the details
$message = $first_name . " " . $last_name . " (" . $contact_number . ") wrote the following:" . "
" . $details_field; // message of email to me
$message2 = "Here is a copy of your request " . $first_name . " (" . $contact_number . ").
" . $details_field . "
Many thanks"; // message of email to requester
$headers = "From:" . $from; // message of email header to me
$headers2 = "From:" . $to; // message of email header to requester
// send the emails
mail($to,$subject,$message,$headers);
mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender
echo "Request sent. Thank you " . $first_name . ", I will contact you shortly.";
}
?>
Can anyone help me with finding this annoying error?
Everywhere you have . =
, needs to be changed to .=
i.e.
$error_message . = '<li>The Email Address you entered does not appear to be valid.</li>';
should be
$error_message .= '<li>The Email Address you entered does not appear to be valid.</li>';
In order to be able to debug php, you need somewhere you can run it locally and view the error messages. When I run the file, I get: Parse error: syntax error, unexpected '=' in temp.php on line 23
which tells you exactly where to find the syntax problem.
Your problem is with how you set your $error_message variable, your code is:
$error_message . = '<your error message here>';
but you cannot have a space between the "." and the "="
Change those lines to:
$error_message .= '<your error message here>';
Refer to this link to enable error_reporting in your php script: PHP Error Reporting