2014-10-12 2 views
0

$source 변수로 인해 문의 양식에 문제가 있습니다. 그것은 내가 소스를 선택해야합니다 오류를 던질 계속 .. 또한 내가 오류 검사기를 가져 가면, 그것은 전자 메일의 메시지에 포함되지 않는거야.PHP 문의 양식이 올바르게 작동하지 않습니다.

<!-- 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

당신이 입력 코드가 우연히 $의 source''에 대한 오류를 던지고 어떤 라인 – Sean

+0

@Sean 재 게시라는 이름의 입력을 가지고 그 양식 코드를 게시 할 수 ? 그것은 실제로 무엇을 말하는가? –

+0

와 소스 – Rasclatt

답변

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); 
    } 
관련 문제