Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/03/2010, 17:37
Avatar de cristian_cena
cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 10 meses
Puntos: 269
Pregunta ayuda con formulario y envio de archivos adjuntos

Hola amigos,
Resulta que tengo el siguiente formulario:

Código:
<?
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">';
}
?>
e intento integrar un envio de multiples archivos adjuntos al estilo de gmail, que tome de este sitio y cuyo código php es:

Código:
<?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";
        }
    }
?>
y cuyo codigo javascript es:
Código:
<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>
y cuyo html es:
Código:
   <?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>&nbsp;&nbsp;&nbsp;<a href="#" onclick="addField()" accesskey="5">A&ntilde;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 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.

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!

Última edición por cristian_cena; 20/03/2010 a las 19:03