2014-03-01 139 views
1

所以這必須看起來是另一個PHP電子郵件問題。然而,在研究並嘗試了所有可用的Stackoverflow回覆之後,我似乎無法獲得<textarea name="description"></textarea>的內容並將其與電子郵件的其餘部分$ to,$ from,$ body和$ headers一起發送:

這裏的HTML:

<form method="post" id="tarqus_form"> 
    <div class="inner-frame inverse p-7"> 
    <h5>Hola,</h5> 
    <div> 
     <h5>mi nombre es</h5> 
     <input type="text" class="name" name="name" placeholder="Nombre (obligatorio)" id="name"> 
    </div> 
    <div> 
     <h5>y me gustaría saber</h5> 
    </div> 
    <div> 
     <h5>sobre:</h5> 
     <input type="text" class="subject" name="subject" placeholder="Asunto" id="asunto"> 
    </div> 
    <div> 
     <h5>Me pueden responder</h5> 
    </div> 
    <div> 
     <h5>a este:</h5> 
     <input type="text" class="email" name="email" placeholder="Correo electrónico (obligatorio)" id="email"> 
    </div> 
    <div> 
     <h5>Quisiera decir:</h5> 
    </div> 
    <div> 


    <!-- HERE's the textarea --> 
     <textarea name="description" rows="3" class="message" placeholder="Ingresa tu mensaje (obligatorio)" id="message"></textarea> 
    </div> 


    <div class="row pt-21"> 
     <div class="col-md-6 p-0"> 
     <h5>Antispam:</h5> 
     <div> 
      <h5>¿12-7+2?</h5> 
     </div> 
     <div> 
      <input type="text" class="antispam pl-0 mt-7 ml-0" name="antispam" placeholder="Respuesta (obligatorio)" id="antispam"> 
     </div> 
     </div> 
     <div class="col-md-6 text-center"> 
     <input type="submit" value="Enviar" class="submit uppercase"> 
     </div> 
    </div> 
    </div> 
</form> 

我創造了一些驗證與jQuery,如果他們通過,POST方法被調用。這不是一個問題,因爲電子郵件實際上是與我需要的東西一起發送,除了textarea上的消息。 jQuery的驗證:

$("#tarqus_form").submit(function(e){ 
     e.preventDefault(); 
     var name = $("#name").val(); 
     var subject = $("#asunto").val(); 
     var email = $("#email").val(); 
     var text = $("#message").val(); 
     var antispam = $("#antispam").val(); 
     var dataString = 'email=' + email + '&text=' + text + '&subject=' + subject + '&name=' + name; 

     // Custom RegExp for verifying email authenticity 
     function isValidEmail(emailAddress) { 
      var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0- \uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i); 
      return pattern.test(emailAddress); 
     }; 

     if (isValidEmail(email) && (name.length > 1) && (text.length > 1) && (antispam == 7)){ 
      $.ajax({ 
      type: "POST", 
      url: "/form.php", 
      data: dataString, 
      success: function(response){ 
      console.log(response); 
      $('#tarqus_form').fadeOut(500); 
      $('.success').removeClass('hidden').fadeIn(500); 
      } 
      }); 
     } else{ 
      $('.error').removeClass('hidden').fadeIn(1000); 
      setTimeout(function(){ 
      $('.error').addClass('hidden'); 
      }, 5000); 
     } 

     return false; 
     }); 

當此經過時,構成本PHP代碼發送電子郵件:

<?php 
      $name = $_POST['name']; 
      $subject = $_POST['subject']; 
      $email = $_POST['email']; 
      $message = $_POST['description']; 
      $from = 'TARQUS | Arquitectura MX <[email protected]>'; 
      $headers.="From:".$from."\n"; 


      $to = '[email protected]'; 

      $body = "Nombre: $name\n Asunto: $subject\n E-Mail: $email\n Mensaje: $message\n"; 

      // detect & prevent header injections 
      $test = "/(content-type|bcc:|cc:|to:)/i"; 
      foreach ($_POST as $key => $val) { 
       if (preg_match($test, $val)) { 
       exit; 
       } 
      }  

      @mail($to, $subject, $body, $headers); 
     ?> 

正如你所看到的,我用我的name="description"的textarea的$_POST方法。我也嘗試過使用$_REQUEST方法。

下面是一個例子電子郵件,所有這一切我已經到PHP代碼所做的更改發送的電子郵件除了在$體內的$消息:

Nombre: Name Lastname 
Asunto: Subject 
E-Mail: [email protected] 
Mensaje: === empty === :(
+0

檢查您的數據串變種再次...你送$ _ POST [「文本」]到PHP ... – sinisake

回答

1

你在你的PHP文件

遇到錯誤

,當你在阿賈克斯獲得POST數據您發送文本沒有說明

 $name = $_POST['name']; 
     $subject = $_POST['subject']; 
     $email = $_POST['email']; 
     $message = $_POST['text']; 
     $from = 'TARQUS | Arquitectura MX <[email protected]>'; 
     $headers.="From:".$from."\n"; 
+0

謝謝你,它的工作。我從來沒有想過數據字符串,因爲我所讀到的關於PHP的一切都需要textarea的名稱屬性和輸入... – Gus

+0

率和標記我的答案請致電 – Victorino

+0

嘿!我嘗試過但我沒有足夠的聲望。 – Gus