2016-11-11 6 views
0

連絡フォームでメールを送信すると、textareaの値は送信されず、メールの「メッセージ:」フィールドは常に空になります。連絡先フォームが空のメッセージフィールドでメールを送信する

serializeを使用する代わりに入力変数をjqueryで手動で宣言すると、同じ結果が得られます。

テキストエリアがフォームタグの内側にあるので、その値が選択されて掲載されない理由がわかりません。

私はtextareaにid = "message"を与えて、var text = $("#message").val();var text = $("textarea#message").val();のようにjqueryで手動で呼び出そうとしましたが、まだ送信しません。

私は何が間違っているのか分かりません。助けてください。

<form id="contactForm" method="POST"> 
      <div class="row small-margin"> 
       <div class="col-md-4"> 
        <i class="pe-7s-user pe-2x icon-contact"></i> 
        <input name="name" type="text" placeholder="Name(required)" required size="35"> 
       </div> 
       <div class="col-md-4"> 
        <i class="pe-7s-mail pe-2x icon-contact"></i> 
        <input name="email" type="email" placeholder="Email(required)" required size="35"> 
       </div> 
       <div class="col-md-4"> 
        <i class="pe-7s-link pe-2x icon-contact"></i> 
        <input name="website" type="text" placeholder="Website" size="35"> 
       </div> 
      </div> 
      <div class="row small-margin"> 
       <div class="col-md-12"> 
        <!-- Message Field --> 
        <textarea name="message" placeholder="Your Message(required)" required></textarea> 
        <!-- Submit Button --> 
        <button id="submit" name="submit" type="submit" class="button" value="submit">SEND MESSAGE</button> 
        <!-- Success Message --> 
        <div id="msgSubmit" class="alert alert-success text-center hidden">Message Sent Successfully</div> 
       </div> 
      </div> 
</form> 

そして、JS:

$("#contactForm").submit(function(event){ 
// cancels the form submission 
event.preventDefault(); 
console.log($(this).serialize()); 
}); 


    $.ajax({ 
     type: "POST", 
     url: "php/form-process.php", 
     data: "name=" + name + "&email=" + email + "&website=" + website + "&message=" + text, 
     success : function(text){ 
      if (text == "success"){ 
       formSuccess(); 
      } 
     } 
    }); 
} 
function formSuccess(){ 
    $("#msgSubmit").removeClass("hidden"); 
} 

そしてPHP:

<?php 
    // Set variables 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $website = $_POST['website']; 
    $message = $_POST['text']; 

    $to = '[email protected]'; 
    $subject = 'New Message from Nixo'; 

    // Prepare email body text 
    $Body .= "Name: "; 
    $Body .= $name; 
    $Body .= "\n"; 

    $Body .= "Email: "; 
    $Body .= $email; 
    $Body .= "\n"; 

    $Body .= "Website: "; 
    $Body .= $website; 
    $Body .= "\n"; 

    $Body .= "Message: "; 
    $Body .= $message; 
    $Body .= "\n"; 

    // Send email 
    $success = mail($to, $subject, $Body, "From:".$email); 

    if ($success){ 
     echo "success"; 
    }else{ 
     echo "<p>Something went wrong, please try again!</p>"; 
    } 
?> 
+0

メッセージフォーム要素の名前は "message"で、AJAX呼び出しで "text"を使用します: ""&message = "+ text"。 –

+0

私はテキストでメッセージを置き換えました。そして、今私は電子メールで "message:udefined"を取得します。 – Novakim

答えて

0

私はあなたのコードに問題が見つかりました:

テキストエリアからの値がサーバー側作ったことがない、あなたはPHPでこれをやっているので:

$message = $_POST['text']; 

あなたがするために、これを行う必要がありますテキストエリアから値を取得してください:

$message = $_POST['message']; 

これはあなたの問題を解決します:)それが役に立てば幸い。

0

あなたの変数の命名に一貫性がない

は、ここに私のコードです。

HTMLフォームでは、名前属性にmessageを使用しています。 しかし、あなたはAJAXコールで、PHP $_POST-GLOBALではtextという変数を探しています。

+0

私はphpとajaxの呼び出しでテキストをメッセージに置き換えたので、今度は電子メールに "message:undefined"というメッセージが表示されます。 – Novakim

関連する問題