Skip to content
Advertisement

Submit button is downloading the php instead of running it

I’m trying to make a contact form for my website but when I press submit, the php file is downloaded instead of being ran. I am using chrome but don’t think that should matter I think there’s a syntax error but I’ve messed around with removing, adding and stuff and even when there is no syntax errors, it still downloads the file rather than runs it And, yes…it is the exact name of the php file (SendEmail.php)

HTML

<form name="contactform" method="post" action="SendEmail.php">
 <div class="ContactHeaders">Name:</div>
 <input type="text" name="Name" class="ContactBoxes"/>
 <div class="ContactHeaders">Email:</div>
 <input type="text" name="Email" class="ContactBoxes"/>
 <div class="ContactHeaders">Message:</div>
   <div style="width:100%">
   <textarea name="Message" maxlength="1000"></textarea>
   </div>
 <div style="width: 100%">
 <input type="submit" class="Submitbtn" value="Submit">
 </div>
</form>

PHP

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


    $email_to = "email@domain.com";
    $email_subject = "Website Contact";


    function died($error) {

        echo "We are very sorry, but there were error(s) found with the form you submitted.";
        echo "These errors appear below.<br /><br />";
        echo $error."<br /><br />";
        echo "Please go back and fix these errors.<br /><br />";
        die();
    }

    // validation expected data exists
    if(!isset($_POST['Name']) ||
        !isset($_POST['Email']) ||
        !isset($_POST['Message'])) {
        died('Sorry, but there appears to be a problem with the form you submitted.');       
    }

    $first_name = $_POST['Name']; // required
    $last_name = $_POST['Email']; // required
    $email_from = $_POST['Message']; // required

    $error_message = "";
    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}$/';
  if(!preg_match($email_exp,$Email)) {
    $error_message .= 'The Email Address you entered does not appear to be valid.<br />';
  }
    $string_exp = "/^[A-Za-z .'-]+$/";
  if(!preg_match($string_exp,$Name)) {
    $error_message .= 'The First Name you entered does not appear to be valid.<br />';
  }

  if(strlen($Message) < 10) {
    $error_message .= 'The message you entered does not appear to be valid.<br />';
  }
  if(strlen($error_message) > 0) {
    died($error_message);
  }

    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
    }


    $Name .= clean_string($Name)."n";
    $Email .= clean_string($Email)."n";
    $Message .= clean_string($Message)."n";


//email headers
$headers = 'From: '.$Email."rn".
'Reply-To: '.$Email."rn" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $Message, $headers);  
?>

Thank you for contacting me. I will be in touch with you very soon.

<?php 
}
?>

I can’t find what’s wrong!!!

Advertisement

Answer

If the actual php soure code is being downloaded, you have some configuration issues on your webserver, but I won’t go into that here.

I do suggest you remove the @ infront of the mail command though, since that surpresses errors you might be having.

One of the errors ie. you are surpressing is the fact that yo u dont’ have a $Message variable, considering the fact that your code says: $email_from = $_POST['Message']; // required.

Aside from that: I suggest you read up about naming conventions concerning upper/lower case characters. It makes debugging code quite a bit easier. Try http://framework.zend.com/manual/1.12/en/coding-standard.naming-conventions.html for starters.

PS. You do actually have a $Message variable, but its empty.

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement