2017-10-10 58 views
-2

因此,我正在做一個聯繫表單,當我們點擊提交時,它應該發送一封電子郵件給管理員,包括輸入。電子郵件功能已經正常工作,我缺少的是驗證,以檢查輸入字段是否爲空。我嘗試在輸入標籤中添加所需的屬性。它在本地主機上工作,但由於某種原因,不在服務器上。此外,它還需要彈出一條消息,確認您已提交表單。我在這裏使用了onclick函數。但我無法澄清它是否有效,因爲它只需在提交成功並且沒有空字段時彈出消息。郵件表單發送成功消息,並檢查是否輸入!空

這是我使用的代碼。連接已經建立。

<!---Mail Starts--> 
<?php 
if (isset($_POST['submit'])) { 
$headers = "MIME-Version: 1.0" . "\r\n"; 
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n"; 
$headers .= 'From: Client<' . $_POST['mail'] . '>' . "\r\n"; 
$headers .= 'Reply-To: ' . $_POST['mail'] . "\r\n"; 
$headers .= 'X-Mailer: PHP/' . phpversion() . "\r\n"; 

$to = '[email protected]'; 
$subject = "Send Us A Smile - ".$_POST['name']; 
$message = " 
<html> 
<body> 
<div style='font-family:arial;width:100%;padding:5px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;'> 
    <div style='margin:0 auto;max-width:500px;padding:5px;text-align:center;background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#741C57), to(#360d29));background: -moz-linear-gradient(90deg, #360d29, #741C57);color:#fff;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:15px;'> 
    </div> 
    <div style='text-align:center;padding:5px;color:#666;background-color:rgba(255,255,240,1);max-width:460px;margin:0 auto; border:2px solid #000;border-radius:0 0 5px 5px;'> 
     <h2 style='font-weight:200;line-height:.3em;'> 
      Send Us A Smile <br> 
     </h2> 

     <p style='text-align:left;'> 
      Name : " . $_POST['name'] . "<br> 
      Email : " . $_POST['mail'] . "<br> 
      Subject : " . $_POST['subject'] . "<br> 
      Message : " . $_POST['message'] . " 
     </p> 
    </div> 
</div> 
</body> 
</html> 
"; 

mail($to,$subject,$message,$headers); 

} 
?> 
<!---Mail Ends--> 
<div class="full" id="contactForm"> 
      <div> 
      <form name ="contact" action="" method="POST"> 
         <input type="hidden" name="recipient" value="[email protected]"> 
         <input type="hidden" name="subject" value="Webmail"> 
         <div class="eight-eight"> 
          <label class="two-eight" for="name">Name</label> 
          <input class="six-eight" type="text" name="name" placeholder="Your name" required oninvalid="this.setCustomValidity('Please enter your Name here')" oninput="setCustomValidity('')"/> 
         </div> 
         <div class="eight-eight"> 
          <label class="two-eight" for="name">Subject</label> 
           <select id="subject" name="subject"> 
            <option value="">Choose a service..</option> 
<option value="">Option 1..</option> 
<option value="">Option 2..</option> 
            <option value="others">Others</option> 
           </select> 
         </div> 

         <div class="eight-eight"> 
          <label class="two-eight" for="name">Message</label> 
          <textarea class="six-eight" placeholder="Your message" name="message" required oninvalid="this.setCustomValidity('May we know what your message is?')" oninput="setCustomValidity('')"/></textarea> 
         </div> 

         <div class="eight-eight"> 
          <label class="two-eight" for="name">Email</label> 
          <input class="six-eight" type="mail" name="mail" placeholder="Your email address" required oninvalid="this.setCustomValidity('Please enter your Email Address here')" oninput="setCustomValidity('')"/> 
         </div> 

         <input type="submit" name = "submit" value="Send" onclick="hgsubmit()"> 
         <input type="hidden" name="redirect" value="http://www.email.com"> 
      </form> 
      </div> 
     </div> 

有沒有不同的方式來做到這一點?

+1

確實有辦法做到這一點,但它會涉及到你的一部分編碼。對於驗證,您不能隱式地信任客戶端驗證。您需要包含服務器端代碼來檢查值是否已提交。例如,您目前檢查'isset($ _ POST ['submit'])'以查看錶單是否完全發佈。您可以執行類似的檢查以查看錶單中是否發佈了特定的數據元素,您可以檢查發佈的字符串的長度等。構建邏輯以執行檢查並相應地發送或不發送消息。 – David

回答

-1

下面是我用作我內部開發工具的一部分的驗證器。它是一個服務器端,也是一個更大框架的一部分,但它可以適合你。

<?php 

/* 
* 
* @Class Name:InputValidation 
* @Framework:Mlisoft MLM 4.0 
* @Date Created: 18, August, 2017 
* @Version: 1.0 
* @Contributor: Adeniyi Anthony A <[email protected]> 
* @[email protected] 
* 
*/ 

class InputValidation 
{ 
    /* 
    * ---------------------------------------------------------------- 
    * Validate form input 
    * ---------------------------------------------------------------- 
    */ 

    /* 
    * Validate form input 
    * @param array $data 
    * @param array $exceptionList 
    * @param array $alias 
    * @param array $filters 
    * @return array 
    */ 
    public function validateInputs(array $data, array $exceptionList = null, array $alias = null, array $filters = null) 
    { 
     if ($data == null || $data == "" || !$data || !is_array($data)) { 
      return array(
       'status' => false, 
       'msg' => 'Invalid data provided', 
      ); 
     } 
     $errorList = null; 
     foreach ($data as $curData => $value) { 
      $exceptCurrent = false; 

      if ($value == "") { 
       /* 
       * check if this is part of the exception 
       */ 
       if ($exceptionList !== null) { 
        foreach ($exceptionList as $curExcept) { 
         /* 
         * case insensitive search 
         */ 
         if ($curData == $curExcept) { 
          $exceptCurrent = true; 
          break; 
         } 
        } 
       } 

       if ($exceptCurrent === false) { 
        if ($alias != null && isset($alias[$curData])) { 
         $name = $alias[$curData]; 
        } else { 
         $name = $curData; 
        } 
        $errorList[] = array(
         'name' => $name, 
         'value' => $value, 
        ); 
       } 
      } 

      /* 
      * finally, lets validate filters if they are passed 
      */ 
      if ($filters != null && isset($filters[$curData])) { 
       /* 
       * check the filter validations 
       */ 
       $curFilter = $filters[$curData]; 
       /* 
       * go over the filter, and validate each filter 
       * parameter provided 
       */ 
       foreach ($curFilter as $key => $paramValue) { 
        if (!isset($name)) { 
         $name = $curData; 
        } 

        if ($key == "must") { 
         /* 
         * validate must contain the exact value provided 
         * can use regular expression later 
         */ 
         if (!preg_match("/" . $paramValue . "/", $value)) { 
          $msg = "value must contain $paramValue"; 
          $errorList[] = array(
           'name' => $name, 
           'value' => $value, 
           'msg' => $msg, 
          ); 
         } 
        } 
       } 
      } 
     } 

     /* 
     * attempt tp build a long error message 
     */ 
     $msg = null; 
     if (isset($errorList) && $errorList !== null) { 
      $msg = "Invalid input. Ensure all required form field are entered<br>"; 
      foreach ($errorList as $error) { 
       if (isset($error['msg'])) { 
        $msg = $msg . $error['name'] . " " . $error['msg']; 
       } else { 
        $msg = $msg . $error['name'] . " cannot be empty<br>"; 
       } 
      } 
     } 
     /* 
     * return complete validation 
     */ 
     if ($errorList === null) { 
      return array(
       'status' => true, 
       'msg' => 'Success', 
       'error' => false, 
       'error_list' => $errorList, 
       'error_msg' => null, 
      ); 
     } elseif ($errorList !== null) { 
      return array(
       'status' => false, 
       'msg' => 'Failed', 
       'error' => true, 
       'error_list' => $errorList, 
       'error_msg' => $msg, 
      ); 
     } 
    } 

} 

調用驗證這樣的:

$validator = new InputValidation(); 
     $val = $validator->validateInputs($data); 

     if (isset($val['error']) && $val['error'] == true) { 
      // do whatever 
      ); 
     } 

驗證器也接受像

$的ExceptionList [ 'formField', 'anotherFormFiled'] 使用其他可選參數,以免除驗證某些領域

$ alias pass as array('formField'=>'Form Filed Caption') 用於顯示自定義的一些字段標題

$ filters作爲['email'=> array('must'=>「@」)] 用於驗證輸入。例如電子郵件

相關問題