2014-10-12 88 views
0

由于某种原因,$source变量导致我的联系表单出现问题。它继续抛出一个错误,我应该选择一个源。另外,如果我带走错误检查器,它不会被包含在电子邮件的消息中。PHP Contact form not functioning right

<!-- HTML --> 
    <label for="source" accesskey="H">How did you find us?</label> 
    <select name="source" id="source"> 
     <option value="Google">Google</option> 
     <option value="Bing">Bing</option> 
     <option value="Yahoo">Yahoo</option> 
    </select> 


    <?php 

     if(!$_POST) exit; 

    // Email address verification, do not edit. 
    function isEmail($email) { 
    return(preg_match("/^[-_.[:alnum:]][email protected]((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+ (ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email)); 
    } 

    if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n"); 

    $name  = $_POST['name']; 
    $email = $_POST['email']; 
    $phone = $_POST['phone']; 
    $subject = $_POST['subject']; 
    $source = $_POST['source']; 
    $comments = $_POST['comments']; 
    $verify = $_POST['verify']; 

    if(trim($name) == '') { 
    echo '<div class="error_message">Attention! You must enter your name.</div>'; 
    exit(); 
    } else if(trim($email) == '') { 
    echo '<div class="error_message">Attention! Please enter a valid email address.</div>'; 
    exit(); 
    } else if(trim($phone) == '') { 
    echo '<div class="error_message">Attention! Please enter a valid phone number.</div>'; 
    exit(); 
    } else if(!is_numeric($phone)) { 
    echo '<div class="error_message">Attention! Phone number can only contain digits.</div>'; 
    exit(); 
    } else if(!isEmail($email)) { 
    echo '<div class="error_message">Attention! You have enter an invalid e-mail address, try again. </div>'; 
    exit(); 
    } 

    if(trim($subject) == '') { 
    echo '<div class="error_message">Attention! Please enter a subject.</div>'; 
    exit(); 
    }else if(trim($source) == '') { 
    echo '<div class="error_message">Attention! Please enter a Source.</div>'; 
    exit(); 
    }else if(trim($comments) == '') { 
    echo '<div class="error_message">Attention! Please enter your message.</div>'; 
    exit(); 
    } else if(!isset($verify) || trim($verify) == '') { 
    echo '<div class="error_message">Attention! Please enter the verification number.</div>'; 
    exit(); 
    } else if(trim($verify) != '4') { 
    echo '<div class="error_message">Attention! The verification number you entered is incorrect.  </div>'; 
    exit(); 
     } 

    if(get_magic_quotes_gpc()) { 
     $comments = stripslashes($comments); 
     } 


     $address = "[email protected]"; 


     $e_subject = 'You\'ve been contacted by ' . $name . '.'; 



     $e_body = "You have been contacted by $name with regards to $subject, their $source additional  message is as follows." . PHP_EOL . PHP_EOL; 
     $e_content = "\"$comments\"" . PHP_EOL . PHP_EOL; 
     $e_reply = "You can contact $name via email, $email or via phone $phone"; 

     $msg = wordwrap($e_body . $e_content . $e_reply, 70); 

     $headers = "From: $email" . PHP_EOL; 
     $headers .= "Reply-To: $email" . PHP_EOL; 
     $headers .= "MIME-Version: 1.0" . PHP_EOL; 
     $headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL; 
     $headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL; 

     if(mail($address, $e_subject, $msg, $headers)) { 

     // Email has sent successfully, echo a success page. 

     echo "<fieldset>"; 
     echo "<div id='success_page'>"; 
     echo "<h1>Email Sent Successfully.</h1>"; 
     echo "<p>Thank you <strong>$name</strong>, your message has been submitted to us.</p>"; 
     echo "</div>"; 
     echo "</fieldset>"; 

     } else { 

     echo 'ERROR!'; 

     } 
+0

您可以发布您形式的代码,有一个名为源 – Sean 2014-10-12 04:35:21

+0

@Sean转贴与输入代码 – 2014-10-12 04:51:20

+0

哪一行是偶然引发错误的'$ source'输入?它实际上说了什么? – Rasclatt 2014-10-12 05:15:03

回答

0

试试这个课程。我已经测试过它,它工作。如果您有任何问题,让我知道:

if(isset($_POST['email'])) { 
    class Emailer 
     { 
      protected $error; 
      protected $printpre; 

      // I would personally do jQuery validation instead of custom validation via php 
      // If you still want to do your own validation, you may want to modify error 
      // handling to include more options. I just did valid or invalid, not into 
      // specifics like you've done. 
      protected function SanVals($key,$type = 'txt') 
       { 
        if(isset($_POST[$key])) { 
          // Strip out html tags 
          if($type == 'txt') {       
            $postval = strip_tags($_POST[$key]); 
            $retval  = (!empty($postval))? $postval:''; 
           } 
          // Strip out everything but numbers 
          elseif($type == 'tel') { 
            $postval = preg_replace('/[^0-9]/',"",$_POST[$key]); 
            $retval  = (!empty($postval) && is_numeric($postval) && strlen($postval) >= 7)? $postval:""; 
           } 

          // Save to error array for reporting 
          if(empty($retval)) { 
            $this->error[$key] = $key; 
           } 
         } 

        return (isset($retval) && !empty($retval))? $retval:""; 
       } 

      protected $address; 
      protected $headers; 
      protected $e_subject; 
      protected $msg; 
      protected $name; 

      public function execute($printpre = false) 
       { 
        // This just notifies the error reporting to print an 
        //array (for troubleshooting) 
        $this->printpre = $printpre; 
        // Double check on email set 
        if(isset($_POST['email'])) { 
          // Do a filter validation on email 
          if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 

            if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n"); 
            // Basic sanitize/empty check 
            $sendname = $this->SanVals('name'); 
            $email  = $_POST['email']; 
            $phone  = $this->SanVals('phone','tel'); 
            $subject = $this->SanVals('subject'); 
            $source  = $this->SanVals('source'); 
            $comments = $this->SanVals('comments'); 
            $verify  = $this->SanVals('verify'); 
            // If there are any empties, throw errors 
            if(isset($this->error) && !empty($this->error)) 
             $this->ErrorReport(); 
            else { 
              if(get_magic_quotes_gpc()) 
               $comments = stripslashes($comments); 
              // Save all necessary values to class globals 
              $this->name   = $sendname; 
              $this->address  = "[email protected]"; 
              $this->e_subject = "You've been contacted by ".$this->name; 
              $e_body    = "You have been contacted by $name with regards to $subject, their $source additional message is as follows." . PHP_EOL . PHP_EOL; 
              $e_content   = $comments.PHP_EOL.PHP_EOL; 
              $e_reply   = "You can contact $name via email, $email or via phone $phone"; 
              $this->msg   = wordwrap($e_body.$e_content.$e_reply, 70); 
              $this->headers  = "From: $email" . PHP_EOL; 
              $this->headers  .= "Reply-To: $email" . PHP_EOL; 
              $this->headers  .= "MIME-Version: 1.0" . PHP_EOL; 
              $this->headers  .= "Content-type: text/plain; charset=utf-8" . PHP_EOL; 
              $this->headers  .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL; 
              // Send the email method 
              $this->Send(); 
             } 
           } 
          else { 
            // If email address is missing, send that back as error 
            $this->error[] = 'email'; 
            $this->ErrorReport(); 
           } 
         } 
       } 

      protected function ErrorReport() 
       { 
        $message['name']  = 'Attention! You must enter your name'; 
        $message['email']  = 'Attention! Please enter a valid email address'; 
        $message['phone']  = 'Attention! Please enter a valid phone number (digits only)'; 
        $message['subject']  = 'Attention! Please enter a subject'; 
        $message['source']  = 'Attention! Please enter a Source'; 
        $message['comments'] = 'Attention! Please enter your message'; 
        $message['verify']  = 'Attention! Please enter a valid verification number'; 

        if(isset($this->error) && !empty($this->error)) { 
          foreach($this->error as $value) { 
            if(isset($message[$value])) 
             $errorSet[] = '<div class="error_message">'.$message[$value].'</div>'; 
           } 

          echo implode("<br />\r\n",$errorSet); 

          if($this->printpre == true || $this->printpre == 1) { ?> 
            <pre> 
            <?php print_r($_POST); ?> 
            <?php print_r($errorSet); ?> 
            </pre><?php 
           } 

          exit; 
         } 
       } 

      public function Send() 
       { 
        if(!empty($this->address)) { 
          if(mail($this->address, $this->e_subject, $this->msg, $this->headers)) { 
            // Email has sent successfully, echo a success page. ?> 
            <fieldset> 
             <div id='success_page'> 
              <h1>Email Sent Successfully.</h1> 
              <p>Thank you <strong><?php echo $this->name; ?></strong>, your message has been submitted to us.</p> 
             </div> 
            </fieldset><?php 

           } 
          else { ?> 
          <h2>An unexpected error occurred.</h2> 
          <p>Please contact a system admin</p> 
          <?php 
           } 
         } 
       } 
     } 

     // Initiate emailer 
     $emailer = new Emailer(); 

     // Execute with printing error enabled. Turn value from 1 to 0 for no array displays 
     $emailer->execute(1); 
    }