En el siguiente código cuanto me apoyo en AJAX los adjuntos no se envían, gracias
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>