Resulta que tengo el siguiente formulario:
Código:
e intento integrar un envio de multiples archivos adjuntos al estilo de gmail, que tome de este sitio y cuyo código php es:<? if (!$HTTP_POST_VARS){ ?> contenido html <form id="order" class="order-form" action="orderS.php" method="post"> ... <input id="boton" type="submit" name="enviar" value="Enviar"/> }else{ //Estoy recibiendo el formulario, compongo el cuerpo $fecha=date("d-m-Y"); $hora=date("H:i:s"); $cuerpo = "Formulario enviado\n"; $cuerpo .= "Nombre: " . $HTTP_POST_VARS["name"] . "\n"; $cuerpo .= "Dirección: " . $HTTP_POST_VARS["direccion"] . "\n"; $cuerpo .= "Telefono: " . $HTTP_POST_VARS["phone"] . "\n"; $cuerpo .= "Email: " . $HTTP_POST_VARS["email"] . "\n"; $cuerpo .= "Comentarios: " . $HTTP_POST_VARS["comments"] . "\n"; $cuerpo .= "URL:: " . $HTTP_POST_VARS["link"] . "\n"; $cuerpo .= "Páginas: " . $HTTP_POST_VARS["pages"] . "\n"; $cuerpo .= "Días: " . $HTTP_POST_VARS["days"] . "\n"; $cuerpo .= "Entregar como: " . $HTTP_POST_VARS["template_type"] . "\n"; $cuerpo .= "comentarios: " . $HTTP_POST_VARS["cd_commented"] . "\n"; $cuerpo .= "Libreria preferida: " . $HTTP_POST_VARS["cd_javascript_framework"] . "\n"; $cuerpo .= "scripts del lado del servidor: " . $HTTP_POST_VARS["cd_ssi"] . "\n"; //mando el correo... mail("[email protected]","Formulario recibido",$cuerpo); //doy las gracias por el envío echo "Gracias por rellenar el formulario. Se ha enviado correctamente."; echo '<META HTTP-EQUIV="Refresh" CONTENT="3"; URL="http://www.estudiojamba.com.ar/MARKUP/orderS.php">'; } ?>
Código:
y cuyo codigo javascript es:<?php /* * Permite enviar y/o subir múltiples archivos, usando PHP, javascript y PHP Mailer para el envío de mails * Autor: Alexander Concha Abarca <alex[@]buayacorp.com> * http://www.buayacorp.com/ * * Este script está bajo licencia de Creative Commons * http://creativecommons.org/licenses/by/2.0/ */ // Para el envío de mails include_once('class.phpmailer.php'); // Indica si los datos provienen del formulario $postback = isset($_POST['postback']) ? true : false; if ($postback) { extract($_POST); $mail = new phpmailer (); # Crea una instancia $mail -> From = $from; $mail -> FromName = "frm"; # Puede obtenerse del formulario, por facilidad se hace de esta manera $mail -> AddAddress ($to); $mail -> Subject = $sbj; $mail -> Body = $msg; $mail -> IsHTML (true); $archivos = ''; $msg = "Mensaje Enviado"; if (isset ($_FILES["archivos"])) { # Si es que se subió algún archivo $msg .= "<ul>"; foreach ($_FILES["archivos"]["error"] as $key => $error) { # Iterar sobre la colección de archivos if ($error == UPLOAD_ERR_OK) { // Si no hay error $tmp_name = $_FILES["archivos"]["tmp_name"][$key]; $name = $_FILES["archivos"]["name"][$key]; $msg .= "<li>$name</li>"; $name = uniqid('bc') . '_' . $name; # Generar un nombre único para el archivo $mail -> AddAttachment ($tmp_name, $name); # Añade el archivo adjunto /* Si se van a guardar los archivos en un directorio, deberían descomentarse las siguientes líneas, si se van a guardar los nombres de los archivos en una base de datos, aquí debería realizarse algo... move_uploaded_file($tmp_name, "ruta/directorio/$name"); # Guardar el archivo en una ubicación, debe tener los permisos necesarios */ } #if } # foreach $msg .= '</ul>'; } # if if (!$mail -> Send ()){ $msg = "No se pudo enviar el email"; } } ?>
Código:
y cuyo html es:<script type="text/javascript"> var numero = 0; // Funciones comunes c= function (tag) { // Crea un elemento return document.createElement(tag); } d = function (id) { // Retorna un elemento en base al id return document.getElementById(id); } e = function (evt) { // Retorna el evento return (!evt) ? event : evt; } f = function (evt) { // Retorna el objeto que genera el evento return evt.srcElement ? evt.srcElement : evt.target; } addField = function () { container = d('files'); span = c('SPAN'); span.className = 'file'; span.id = 'file' + (++numero); field = c('INPUT'); field.name = 'archivos[]'; field.type = 'file'; a = c('A'); a.name = span.id; a.href = '#'; a.onclick = removeField; a.innerHTML = 'Quitar'; span.appendChild(field); span.appendChild(a); container.appendChild(span); } removeField = function (evt) { lnk = f(e(evt)); span = d(lnk.name); span.parentNode.removeChild(span); } </script>
Código:
Como podrán ver, este script utiliza PHP, javascript para crear nuevos elementos HTML en la página y para el envío del mail se utiliza PHP Mailer que permite adjuntar archivos.<?php if (isset($msg)) echo $msg;?> <form name="frm" id="frm" action="uploader.php" method="post" enctype="multipart/form-data"> <dl> <dt><label for="to" accesskey="1">Para</label></dt> <dd><input type="text" name="to" id="to" size="60" /></dd> <dt><label for="from" accesskey="2">De</label></dt> <dd><input type="text" name="from" id="from" size="60" /></dd> <dt><label for="sbj" accesskey="3">Asunto</label></dt> <dd><input type="text" name="sbj" id="sbj" size="60" /></dd> <dt><label for="msg" accesskey="4">Mensaje</label></dt> <dd><textarea id="msg" name="msg" rows="7" cols="45"></textarea></dd> <dt><label>Archivos Adjuntos:</label> <a href="#" onclick="addField()" accesskey="5">Añadir Archivo</a></dt> <dd><div id="files"></div></dd> <dd><input type="submit" value="Enviar" id="postback" name="postback" accesskey="6" /></dd> </dl> </form>
Como no se casi nada de php se me complica para agrupar estos dos codigos en uno, a los fines de que pueda enviar el formulario junto con los archivos adjuntos al hacer click en el boton de envio.
¿me dan una manito? no pretendo me hagan el trabajo, simplemente con una pista o algun articulo para leer me ayudarian muchisimo.
Supongo puedo hallar la solución modificando principalmente (entre otras cosas) esta línea del primer formulario que mostre:
mail("[email protected]","Formulario recibido",$cuerpo);
donde de alguna manera debo incluir el envio de los archivos, pero como no entiendo el trabajo con variables de php estoy perdidísimo en el código.
Algo que me cuesta entender es esto: <?php if (isset($msg)) echo $msg;?>
es decir, ¿que es lo que hace isset()?
Desde ya muchas gracias, un saludo!