Código HTML:
<!-- http://www.miguelmanchego.com/2009/ajax-enviar-formularios-sin-recargar-jquery/ --> <!doctype html> <html lang="es"> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="http://getbootstrap.com/dist/css/bootstrap.css"> <link rel="stylesheet" href="http://getbootstrap.com/dist/css/bootstrap-theme.css"> <script rel="stylesheet" href="http://getbootstrap.com/dist/js/vendor/bootstrap.js"></script> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="front/js/libs/jquery-1.8.2.min.js"><\/script>')</script> <style> body { margin: 50px 0; } [class^='col-sm'] { padding:0; } [class^='col-sm'] input { border-radius: 0; } .col-sm-12 textarea { border-radius: 0; } .col-sm-12 .input-group-addon { border-radius: 0 0 0 5px; } .col-sm-12 button, .col-sm-12 button:focus { border-radius: 0 0 5px 0; outline: 0; } .col-sm-4:nth-child(1) .input-group-addon { border-radius: 5px 0 0 0; } .col-sm-4:nth-child(3) input { border-radius: 0 5px 0 0; } </style> </head> <body> <div class="container"> <?php require'vendor/autoload.php'; use Valitron\Validator as V; //V::langDir(); // ajuste siempre langDir antes lang. V::lang('es'); if (!extract($_POST)){ ?> <form method="post" enctype="multipart/form-data"> <div class="row"> <div class="col-sm-4"> <div class="input-group"> <span class="input-group-addon"> <span class="glyphicon glyphicon-user"></span> </span> <input class="form-control" placeholder="Nombre:" name="nombre" value="nombre"> </div> </div> <div class="col-sm-4"> <div class="input-group"> <span class="input-group-addon" style="border-radius:0;"> <span class="glyphicon glyphicon-envelope"></span> </span> <input class="form-control" placeholder="Email:" name="email" value="[email protected]"> </div> </div> <div class="col-sm-4"> <div class="input-group"> <span class="input-group-addon" style="border-radius:0;"> <span class="glyphicon glyphicon-font"></span> </span> <input class="form-control" placeholder="Asunto:" name="asunto" value="asunto"> </div> </div> </div> <div class="row"> <div class="col-sm-12"> <div class="input-group"> <span class="input-group-addon" style="border-radius:0;"> <span class="glyphicon glyphicon-pencil"></span> </span> <textarea class="form-control" style="resize:none" placeholder="Mensaje:" name="mensaje">Mensaje</textarea> </div> </div> </div> <div class="row"> <div class="col-sm-12"> <div class="input-group col-sm-12 " style="padding:0;"> <div class="prettyFile" style="padding:0;"> <!-- -------------------------------------------------- --> <input type="file" name="archivo[]" multiple style="display:none;"> <!-- -------------------------------------------------- --> <div class="input-group"> <span class="input-group-addon"> <span class="glyphicon glyphicon-paperclip"></span> </span> <input type="text" class="form-control" style="border-radius:0;" placeholder="Adjuntos:" name="Num_Adjuntos" title="Adjuntos"> <span class="input-group-btn"> <button class="btn btn-default" type="button" style="border-bottom-right-radius:0; width:80px;">Adjuntar</button> </span> </div> <!-- -------------------------------------------------- --> </div> <span class="input-group-btn"> <button class="btn btn-default" type="reset">Borrar</button> <button class="btn btn-default" type="submit">Enviar</button> </span> </div><!-- /input-group --> </div> </div> <br> </form> <div id="result"></div> <?php }else{ $validacion = new Valitron\Validator($_POST); $validacion->rule('required',['nombre','email','asunto','mensaje']); $validacion->rule('alpha','nombre'); $validacion->rule('email','email'); $validacion->rule('alphaNum','asunto'); $validacion->rule('alphaNum','mensaje'); if($validacion->validate()) { //echo "<br>Formulario cubierto correctamente. "; //echo"<br>";print_r($validacion->data()); print_r($_FILES['archivo']); } else { $errors = $validacion->errors(); //echo "<pre>";print_r($errors);echo "</pre>"; echo "<div class='alert alert-warning' style='margin:0 auto;'>"; echo "<a class='close' data-dismiss='alert' href='#' aria-hidden='true'>×</a>"; if (!empty($errors['nombre'][0])) echo $errors['nombre'][0].'<br>'; if (!empty($errors['email'][0])) echo $errors['email'][0].'<br>'; if (!empty($errors['asunto'][0])) echo $errors['asunto'][0].'<br>'; if (!empty($errors['mensaje'][0])) echo $errors['mensaje'][0].'<br>'; echo "</div>"; } //require 'class.phpmailer.php';//Lo primero es incluir la clase en vuestro php //require 'class.smtp.php'; $mail = new PHPMailer();//Instanciamos un objeto de la clase phpmailer $mail -> PluginDir = "";//Indicamos a la clase phpmailer donde se encuentra la clase smtp $mail -> Mailer = "smtp";//Indicamos que vamos a conectar por smtp $mail -> Host = "ssl://smtp.gmail.com";//Servidor smtp de gmail. Como ves usamos cifrado ssl $mail -> Port = "465";//Puerto de gmail 465 $mail -> SMTPAuth = true;// Enable SMTP authentication //Le indicamos que el servidor smtp requiere autenticación $mail -> Username = '[email protected]';// SMTP username $mail -> Password = 'contrasena';// SMTP password $mail -> SMTPSecure = 'ssl';// Enable encryption, 'ssl' also accepted $mail -> From = $email; $mail -> FromName = 'Quico'; $mail -> addAddress($email, $nombre);// Añadir más destinatarios //$mail -> addAddress('[email protected]', 'Quico');// Añadir más destinatarios $mail -> addReplyTo('[email protected]', 'Quico');//Añadir dirección de respuesta $mail -> Subject = $asunto;// Asunto, cuerpo del mensaje y cuerpo plano sin formato $mail -> Body = $mensaje;//puede incluir html, podéis cogerlo de un form... function diverse_array($vector) { $result = array(); foreach ($vector as $key1 => $value1) { foreach ($value1 as $key2 => $value2) { $result[$key2][$key1] = $value2; //$mail->addAttachment($result); } } return $result; } if(isset($_FILES['archivo'])){ $archivos[]=diverse_array($_FILES['archivo']); { //echo "<br><pre>"; //print_r($archivos); //echo "</pre><br>"; foreach($archivos[0] as $valor) $mail->addAttachment($valor['tmp_name'],$valor['name']); } } //if (!$validacion->errors()) echo "s"; else echo "n"; if (!$validacion->errors()) { /* if (!$mail -> send()) { echo 'No se pudo mandar el mensaje. '; echo 'Mailer Error: ' . $mail -> ErrorInfo; //exit; } else { echo "<div class='alert alert-success'>"; echo "<a class='close' data-dismiss='alert' href='#' aria-hidden='true'>×</a>"; echo 'El mensaje ha sido enviado correctamente.'; echo "</div>"; } */ } } ?> </div> <script type="text/javascript"> // Pretty file if ($('.prettyFile').length) { $('.prettyFile').each(function() { var pF = $(this), fileInput = pF.find('input[type="file"]'); fileInput.change(function() { // When original file input changes, get its value, show it in the fake input var files = fileInput[0].files, info = ''; if (files.length > 1) { // Display number of selected files instead of filenames info = files.length + ' files selected'; } else { // Display filename (without fake path) var path = fileInput.val().split('\\'); info = path[path.length - 1]; } pF.find('.input-group input').val(info); }); pF.find('.input-group').click(function(e) { e.preventDefault(); // Make as the real input was clicked fileInput.click(); }) }); } </script> <script language="javascript"> $(document).ready(function() { // Esta primera parte crea un loader no es necesaria $().ajaxStart(function() { $('#loading').show(); $('#result').hide(); }).ajaxStop(function() { $('#loading').hide(); $('#result').fadeIn('slow'); }); // Interceptamos el evento submit $('form').submit(function() { // Enviamos el formulario usando AJAX $.ajax({ type: 'POST', url: $(this).attr('action'), data: $(this).serialize(), // Mostramos un mensaje con la respuesta de PHP success: function(data) { $('#result').html(data); } }) return false; }); }) </script> </body> </html>