Php 使javascript适应表单

Php 使javascript适应表单,php,javascript,forms,email,attachment,Php,Javascript,Forms,Email,Attachment,所以我得到了一个用于附件的表单,这是php代码 <?php //we need to get our variables first $email_to = 'xemax@tiscalinet.it'; //the address to which the email will be sent $name = $_POST['name']; $email = $_POST['email']; $subject =

所以我得到了一个用于附件的表单,这是php代码

<?php

    //we need to get our variables first

    $email_to =   'xemax@tiscalinet.it'; //the address to which the email will be sent
    $name     =   $_POST['name'];  
    $email    =   $_POST['email'];
    $subject  =   "www.goliaerrante.com";
    $message  =   'Nome: '.$_POST['name'].chr(10) . chr(10) . 
                  'Email: '.$_POST['email'].chr(10) . chr(10) .
                  'Telefono: '.$_POST['subject'].chr(10) . chr(10) .
                  'Messaggio: '.$_POST['message'];


$allegato = $_FILES['allegato']['tmp_name'];
$allegato_type = $_FILES['allegato']['type'];
$allegato_name = $_FILES['allegato']['name'];


$msg = "";
$headers = "From: " . $email;


// Verifico se il file è stato caricato correttamente via HTTP
// In caso affermativo proseguo nel lavoro...
if (is_uploaded_file($allegato))
{
  // Apro e leggo il file allegato
  $file = fopen($allegato,'rb');
  $data = fread($file, filesize($allegato));
  fclose($file);

  // Adatto il file al formato MIME base64 usando base64_encode
  $data = chunk_split(base64_encode($data));

  // Genero il "separatore"
  // Serve per dividere, appunto, le varie parti del messaggio.
  // Nel nostro caso separerà la parte testuale dall'allegato
  $semi_rand = md5(time());
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

  // Aggiungo le intestazioni necessarie per l'allegato
  $headers .= "\nMIME-Version: 1.0\n";
  $headers .= "Content-Type: multipart/mixed;\n";
  $headers .= " boundary=\"{$mime_boundary}\"";

  // Definisco il tipo di messaggio (MIME/multi-part)
  $msg .= "This is a multi-part message in MIME format.\n\n";

  // Metto il separatore
  $msg .= "--{$mime_boundary}\n";

  // Questa è la parte "testuale" del messaggio
  $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  $msg .= "Content-Transfer-Encoding: 7bit\n\n";
  $msg .= $message . "\n\n";

  // Metto il separatore
  $msg .= "--{$mime_boundary}\n";

  // Aggiungo l'allegato al messaggio
  $msg .= "Content-Disposition: attachment;\n";
  $msg .= " filename=\"{$allegato_name}\"\n";
  $msg .= "Content-Transfer-Encoding: base64\n\n";
  $msg .= $data . "\n\n";

  // chiudo con il separatore
  $msg .= "--{$mime_boundary}--\n";
}
else
{
  $msg = $message;
}




// Invio la mail
if (mail($email_to,  $subject, $msg, $headers))
{
  echo 'sent'; // we are sending this text to the ajax request telling it that the mail is sent.. 
}else{
  echo 'failed';// ... or this one to tell it that it wasn't sent    
}
?>

不能使用纯ajax方法发送附件,文件不会发送。但是,有许多插件(hack)可以异步处理它们(即:)。

您不能使用jQuery.post发布文件,因为某些浏览器可能不支持它XMLHttpRequest实现(尤其是ie)

如果要异步发送文件(即AJAX),可以使用以下选项:

  • 将表单的目标设置为iframe,并将其“提交”到iframe,并使用一些javascript响应,这些javascript将调用父文档中的javascript函数。不是真正的异步,但它将使您保持在同一页上。没有进度条

  • 使用HTML5(IE目前不支持,但它应该与chrome、firefox、safari一起使用),谷歌的“HTML5文件上传”有很多类似的文章。并非所有浏览器都支持进度条

  • 如果您想要跨浏览器解决方案,请查看。Plupload尽可能使用HTML5文件上传,否则将使用“隐藏”flash上传程序


之前有人提到,IE中没有通过XHR上传文件所需的HTML5支持,这在技术上是不正确的。IE10支持通过XHR/ajax上传文件所需的一切,将文件分成分区并分别发送每个分区,稍后恢复失败或中断的上传,等等。的确,对于不支持HTML5文件API的浏览器,需要一种不同的解决方案,例如IE9和更早版本,以及Android 2.3.x和更早版本。与其重新发明轮子,那只会给你带来头痛,不如使用已有的工具之一。我建议它无缝地处理所有主要浏览器,具有许多特性,包括无依赖版本或jQuery版本

有一些插件利用Flash或Java作为后备方案。这是没有必要的,我建议您避免在客户端使用Flash和Java,因为与客户端Java和Flash相关的严重安全问题,以及它们将给您带来的支持噩梦。Flash正在消亡,Java(客户端)已经消亡。未来不会包括这两个选项中的任何一个,因此,为了您的用户群,请使用本机浏览器/javascript方法

$(document).ready(function(){  
    $('#send_message').click(function(e){  

        //stop the form from being submitted  
        e.preventDefault();  

        /* declare the variables, var error is the variable that we use on the end 
        to determine if there was an error or not */  
        var error = false;  
        var name = $('#name').val();  
        var email = $('#email').val();  
        var subject = $('#subject').val();  
        var message = $('#message').val();  

        /* in the next section we do the checking by using VARIABLE.length 
        where VARIABLE is the variable we are checking (like name, email), 
        length is a javascript function to get the number of characters. 
        And as you can see if the num of characters is 0 we set the error 
        variable to true and show the name_error div with the fadeIn effect. 
        if it's not 0 then we fadeOut the div( that's if the div is shown and 
        the error is fixed it fadesOut. 

        The only difference from these checks is the email checking, we have 
        email.indexOf('@') which checks if there is @ in the email input field. 
        This javascript function will return -1 if no occurence have been found.*/  
        if(name.length == 0){  
            var error = true;  
            $('#name_error').fadeIn(300);  
        }else{  
            $('#name_error').fadeOut(300);  
        }  
        if(email.length == 0 || email.indexOf('@') == '-1'){  
            var error = true;  
            $('#email_error').fadeIn(300);  
        }else{  
            $('#email_error').fadeOut(300);  
        }  
        if(subject.length == 0){  
            var error = true;  
            $('#subject_error').fadeIn(300);  
        }else{  
            $('#subject_error').fadeOut(300);  
        }  
        if(message.length == 0){  
            var error = true;  
            $('#message_error').fadeIn(300);  
        }else{  
            $('#message_error').fadeOut(300);  
        }  

        //now when the validation is done we check if the error variable is false (no errors)  
        if(error == false){  
            //disable the submit button to avoid spamming  
            //and change the button text to Sending...  
            $('#send_message').attr({'disabled' : 'true', 'value' : 'Sending...' });  

            /* using the jquery's post(ajax) function and a lifesaver 
            function serialize() which gets all the data from the form 
            we submit it to send_email.php */  
            $.post("send_email.php", $("#contact_form").serialize(),function(result){  
                //and after the ajax request ends we check the text returned  
                if(result == 'sent'){ 
                    //if the mail is sent remove the submit paragraph 
                     $('#send_message').remove(); 
                    //and show the mail success div with fadeIn 
                    $('#mail_success').fadeIn(300); 
                }else{ 
                    //show the mail failed div 
                    $('#mail_fail').fadeIn(300); 
                    //reenable the submit button by removing attribute disabled and change the text back to Send The Message 
                    $('#send_message').removeAttr('disabled').attr('value', 'Send The Message');  
                }  
            });  
        }  
    });  
});