2014-03-01 51 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