2017-10-10 7 views
-2

私は送信フォームを作成しています。送信をクリックすると、入力を含むメールが管理者に送信されます。電子メール機能はすでに動作していますが、入力フィールドが空であるかどうかを確認する検証が欠けています。私は、入力タグにという属性を追加しました。属性を追加しようとしました。 localhostでは動作しますが、何らかの理由でサーバ上で動作しません。また、フォームを提出したことを知らせるメッセージをポップアップする必要があります。私はここで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 [ 'フォームフィールド'、 'anotherFormFiled']の検証から、いくつかのフィールドを免除する 使用などの他のオプションのパラメータを受け入れます

$ aliasは配列として渡します( 'formField' => 'Form Filed Caption') カスタムを表示するにはsomeフィールドのキャプション

$ filters ['email' => array( 'must' => "@")] 入力の検証に使用します。例えば電子メール

関連する問題