Foros del Web » Programando para Internet » PHP »

enviar email con archivo hoja excel adjunto

Estas en el tema de enviar email con archivo hoja excel adjunto en el foro de PHP en Foros del Web. Buenas compañeros; Necesito vuestra ayuda´, tengo un formulario desde el cual necesito enviar un email con un archivo adjunto de una hoja excel. El funcionamiento ...
  #1 (permalink)  
Antiguo 22/11/2005, 05:32
Avatar de susaninhax  
Fecha de Ingreso: noviembre-2004
Mensajes: 358
Antigüedad: 13 años
Puntos: 3
enviar email con archivo hoja excel adjunto

Buenas compañeros;

Necesito vuestra ayuda´, tengo un formulario desde el cual necesito enviar un email con un archivo adjunto de una hoja excel. El funcionamiento seria algo tal que así: desde el formulario abre la hoja excel para rellenar los datos y luego darle a enviar y que se envie los datos del formulario y mas la hoja excel con los datos que acaba de escribir en ello. Parece un poco lío pero no tengo ni idea de como solucionarlo, o como enfocarlo, o alguna solución que se amolde a lo que akí expongo.
Podrían ayudarme con alguna idea porfabor???????porque yo estoy totalmente perdida. Creo que eso que expongo no es posible, y tampoco se como enfocarlo.. prff....

Les estoy muy agradecida de antemano, Saluditosss!!!!
  #2 (permalink)  
Antiguo 22/11/2005, 05:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Que significa exactamente esto, cual es el objetivo de todo el proceso?:
Cita:
desde el formulario abre la hoja excel para rellenar los datos
Lo normal en este ambiente "web" sería que el usuario abra su hoja excel en su PC (tal vez con alguna "plantilla" de datos pre-definida en el servidor) .. haga lo que tengan que hacer, lo guarde en SU PC y luego la adjunte como parte de más datos de tu formulario HTML como un archivo cualquiera al servidor usando las técnicas de Upload de archivos:

http://www.php.net/manual/en/features.file-upload.php
(en las FAQ's de este foro PHP y en el foro en general si usas el buscador está repleto de ejemplos y comentarios al respecto)


En el servidor (una vez recibido tu archivo adjunto + otros datos del formulario como campos de texto y demás) se compone el e-mail con el archivo adjunto y se envia usando por ejemplo la classe:

PHP Mailer
http://phpmailer.sourceforge.net

Un saludo,
  #3 (permalink)  
Antiguo 22/11/2005, 10:13
Avatar de susaninhax  
Fecha de Ingreso: noviembre-2004
Mensajes: 358
Antigüedad: 13 años
Puntos: 3
Hola cluster;

Muchisimas gracias por tu rapidez, así da gusto. Pues la verdad es que no se me ocurre otro modo distinto al que tu me has comentado, otra solucion es que haga el formulario con los 254 campos, pero es una burrada impensable, pero no se si los usuarios que vallan a rellenar esa hoja excel sabrán guardarla y luego enviarla por email. Voy mirar como lo puedo hacer y ya os lo comentaré

Por otra parte no se si es abusar un poco pero en este mismo formulario donde tienen que rellenar unos datos, guardarse la hoja excel para luego rellenarla y enviarla al email, tambientengo una tabla con la cual tienen que rellenar con datos, la tabla es algo tal que así:
Código PHP:
<table>
<tr>
     <td  bgcolor="#CCCC33" class="negro">
<?php
$fecha_actual
=date("Y-m-d");
$sql="select DATE_ADD('$fecha_actual', INTERVAL 1 MONTH) as mes_proximo";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$fecha_fin=$row["mes_proximo"];
$fecha_separada=explode("-"$fecha_fin);
if(
$fecha_separada[1]=="12"){
echo 
"Dic";
}elseif(
$fecha_separada[1]=="1"){
echo 
"Ene";
}elseif(
$fecha_separada[1]=="2"){
echo 
"Feb";
}elseif(
$fecha_separada[1]=="3"){
echo 
"Mar";
}elseif(
$fecha_separada[1]=="4"){
echo 
"Abr";
}elseif(
$fecha_separada[1]=="5"){
echo 
"May";
}elseif(
$fecha_separada[1]=="6"){
echo 
"Jun";
}elseif(
$fecha_separada[1]=="7"){
echo 
"Jul";
}elseif(
$fecha_separada[1]=="8"){
echo 
"Agos";
}elseif(
$fecha_separada[1]=="9"){
echo 
"Sep";
}elseif(
$fecha_separada[1]=="10"){
echo 
"Oct";
}elseif(
$fecha_separada[1]=="11"){
echo 
"Nov";
}
echo 
"-";
echo 
$fecha_separada[0];
?>
    </td>
</tr>
<tr>
  <td bgcolor="#F2F2EC" class="cajas">
   <input name="cant1" type="text" class="cajas" id="cant1" size="4"></td>
</tr>
<tr>
    <td bgcolor="#F2F2EC" class="cajas">
     <input name="precio1" type="text" class="cajas" id="precio1" size="4" onKeyPress="LP_data()">&euro;</td>       
</tr>
</table>
Esto es solo un ejemplo de la tabla que he mencionado, pues imaginaos una tabla de tres filas con 12 columnas, una columna por mes, Pues bien mi pregunta o duda es:
-Necesito agrupar en un array el el valor de , el primer mes, con el primer input de cantidad, y con el primer input de precio, a su vez lo mismo con el segundo mes con la segunda caja con la segunda caja de precio, y así con cada columna.

No se si me he esplicado correctamente, pero estoy mirando el libro de php y me estoy haciendo un poco el lio, no controlo todabia mucho esto, y el tema de los arrays es mi asignatura pendiente... Se os ocurre como puedo agruparlos para luego poder guardar los datos en una BD?????

Os estoy muy agradecida de antemano, y muchisimas gracias por lo del email cluster Un saludod
  #4 (permalink)  
Antiguo 22/11/2005, 11:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
No se si me he esplicado correctamente, pero estoy mirando el libro de php y me estoy haciendo un poco el lio, no controlo todabia mucho esto, y el tema de los arrays es mi asignatura pendiente... Se os ocurre como puedo agruparlos para luego poder guardar los datos en una BD?????
Si entendí bien ... lo que requieres es tratar todos tus elementos de tu formulario como arrays ..

Se trata de que tus elementos tengan un mismo indice:

bucle (){
<input type="text" name="columna1[]">
<input type="text" name="columna2[]">
<input type="hidden" name="id[]" value="<? echo $id?>">
}

Eso generará cara a tu scritp PHP tres arrays (columna1, columna2 .. id) .. El campo oculto "hidden" "id" ahí tendrías tu relación si corresponde con algun identificador de un registro (realmente no veo "gráficamente" o no me hago una idea de todo lo que quieres hacer).


Un saludo,
  #5 (permalink)  
Antiguo 22/11/2005, 11:34
Avatar de susaninhax  
Fecha de Ingreso: noviembre-2004
Mensajes: 358
Antigüedad: 13 años
Puntos: 3
El formulario en cuestion sobre el tema de arrays es este:

Espero haber insertado bien la imagen....

Pues el usuario rellenara todos esos campos pero tiene que ir acorde con la fecha que le corresponde con la columna.(la fecha como he mostrao en el anterior codigo es dinamica). Pues necesido que todos esos campos tengan una relación para luego guardarla en la base de datos.Y de la base de datos cogerlas y mostrar esos datos en otra página... No se si ayuda esto algo para comprenderlo, comprendo que sea complicado de entender, uno por mi modo de espresarme y otro por el ejercicio en sí. Si pudieras sugerirme un modo de guardar estos datos correctamente en mi BD, te lo agradería un monton. Puedo guardarlos sin más o hay algun modo de guardarlos pero con alguna relación que me facilite luego al mostrarlo en otra pagina????????
  #6 (permalink)  
Antiguo 22/11/2005, 11:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si entendí bien . .tu fecha es la "clave" para relacionar tus datos ..

Supongo que ese rango de fechas lo generaras por acción de algún bucle (previa consulta SQL a una BD? ... o a mano? ..). Sea como sea .. ese formulario tendrá que generar:

Código PHP:
<?
for ($x=0$x<12$x++){
?>
cantidad <input type="text" name="cantidad[<? echo $x ?>]">
precio<input type="text" name="precio[<? echo $x ?>]">
fecha_fin <? echo $fecha_fin ?><input type="hidden" name="fecha_fin[<? echo $x ?>]" value="<? echo $fecha_fin ?>"><br>
<?
}
?>
En tu script PHP al enviar esos datos .. tendras 3 arrays para que los leas con un bucle for() usando el mismo indice para las tres.

Respecto al tema de como guardarlo en tu BD .. supuestamente vas a generar UN registro por cada trio de datos fecha/cantidad/precio, es decir .. tendrás que tener una tabla tipo:

id_nose
¿ tipo_producto ?
fecha
cantidad
precio

Para que así puedas hacer consultas por fechas .. por rango de fechas .. por totales .. etc ...

Por cierto .. en SQL tienes tambien la fecha actual .. un NOW() (si usastes campos tipo DATETIME) o CURDATE ( si usastes campos tipo DATE sólo)
Código PHP:
$sql="select DATE_ADD(CURDATE(), INTERVAL 1 MONTH) as mes_proximo"
Un saludo,
  #7 (permalink)  
Antiguo 22/11/2005, 12:02
Avatar de susaninhax  
Fecha de Ingreso: noviembre-2004
Mensajes: 358
Antigüedad: 13 años
Puntos: 3
las fechas las genero así:
Código PHP:
         <td bgcolor="#CCCC33" class="negro"><?php
$fecha_actual
=date("Y-m-d");
$sql="select DATE_ADD('$fecha_actual', INTERVAL 13 MONTH) as mes_proximo";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$fecha_fin=$row["mes_proximo"];

$fecha_separada=explode("-"$fecha_fin);
if(
$fecha_separada[1]=="12"){
echo 
"Dic";
}elseif(
$fecha_separada[1]=="1"){
echo 
"Ene";
}elseif(
$fecha_separada[1]=="2"){
echo 
"Feb";
}elseif(
$fecha_separada[1]=="3"){
echo 
"Mar";
}elseif(
$fecha_separada[1]=="4"){
echo 
"Abr";
}elseif(
$fecha_separada[1]=="5"){
echo 
"May";
}elseif(
$fecha_separada[1]=="6"){
echo 
"Jun";
}elseif(
$fecha_separada[1]=="7"){
echo 
"Jul";
}elseif(
$fecha_separada[1]=="8"){
echo 
"Agos";
}elseif(
$fecha_separada[1]=="9"){
echo 
"Sep";
}elseif(
$fecha_separada[1]=="10"){
echo 
"Oct";
}elseif(
$fecha_separada[1]=="11"){
echo 
"Nov";
}
echo 
"-";
echo 
$fecha_separada[0];
?></td>
Creo es como tu dices, la tabla que tengo para guardar estos datos es exactamente la que tu me has escritO:
PROPUESTAS {ID_PROPUESTA, SUMINISTRO, FECHA, CANTIDAD, PRECIO}

Lo que no he entendido muy bien como despues de hacer todo esto lo guardo en la base de datos, como creo el insert de estos tres campos...es decir como le paso las variables... de cantidad precio y fecha...
Cita:
<?
for ($x=0; $x<12; $x++){
?>
cantidad <input type="text" name="cantidad[<? echo $x ?>]">
precio<input type="text" name="precio[<? echo $x ?>]">
fecha_fin <? echo $fecha_fin ?><input type="hidden" name="fecha_fin[<? echo $x ?>]" value="<? echo $fecha_fin ?>"><br>
<?
}
?>
bueno, claro que es un contador, mmm casi que lo mejor es que haga pruebas y segun vea lo que consigo lo comente de nuevo...

Muchisimas gracias cluster, ojalá de esta consiga comprender bien los arrays, es una buena ocasión. Muchísimas gracias, y un saludeteeee!!!
  #8 (permalink)  
Antiguo 22/11/2005, 13:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Lo que no acabo de comprender es que si siempre generas esas N fechas o es variable?

De esta consulta SQL:
$sql="select DATE_ADD('$fecha_actual', INTERVAL 13 MONTH) as mes_proximo";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);

Sólo recorres un posible resultado .. ¿sólo va existir un resultado o mas?

Por qué esto del "bucle" que te he comentado sería para repetir ese bloque de "cantidad, precio, fecha" por N veces y obtener todos esos datos.

Igualmente para ese montón de IF()elseif() .. podrísa usar un array asociativo:
Código PHP:
$meses=array(12=>"Dic",1=>"Ene",etc ....);
echo 
$meses{$fecha_separada[1]}; 
Y por otro lado .. esa fecha que obtienes vía SQL también puedes tomar sólo lo que te interese de ella sin meter explode() por médio usando más SQL:

Código PHP:
$sql="select MONTH(DATE_ADD(CURDATE(), INTERVAL 1 MONTH)) as mes_proximo"
http://dev.mysql.com/doc/refman/5.0/...functions.html

Un saludo,
  #9 (permalink)  
Antiguo 23/11/2005, 02:27
Avatar de susaninhax  
Fecha de Ingreso: noviembre-2004
Mensajes: 358
Antigüedad: 13 años
Puntos: 3
buenos días compañeros;

lo he hecho de un modo sencillo, no se me ocurria de otro modo, pero lo que he hecho es repetir ese código para cada celda, es decir, en la segunda columna pondría el mismo codigo para sacar la fecha pero en vez de sumar 1 MONTH, pues le sumaba 2 MONTH .... no se me ocurria de otro modo.

Por lo tanto deduzco que el "bucle" que me has comentado de "cantidad, precio, fecha" por N veces no me serviría para ese caso.me refiero al modo en el que saco la fecha, no?que lio...voy a leer el manual que me has pasado para ver si me aclaro un poco más...

un saludo y muchísimas gracias de veras por el apoyo y paciencia que demuestras
  #10 (permalink)  
Antiguo 24/11/2005, 10:26
Avatar de susaninhax  
Fecha de Ingreso: noviembre-2004
Mensajes: 358
Antigüedad: 13 años
Puntos: 3
buenas apañeros;

Continuando con mi largo formulario, mi obra del escorial, pues sigo con mi duda de lo de las fechas, arrays, etc.

He probado eso que me has comentado cluster, pero no soi capaz de hacer que la fecha sume un mes cada vez que se repita el bucle de cantidad precio y fecha.Para refrescar un poco la memoria:
Para sacar el mes actual tengo:
Código PHP:
$sql="select DATE_ADD(CURDATE(), INTERVAL 1 MONTH) as mes_proximo"
$result=mysql_query($sql);
 
while(
$row=mysql_fetch_array($result)){ 
$fecha_fin=$row["mes_proximo"]; 

$fecha_separada=explode("-"$fecha_fin); 
//esto del array no se donde ponerlo, pero necesito que los meses aparezcan con sus iniciales ...
$meses=array(13=>"Dic",1=>"Ene",2=>"Feb",3=>"Mar",4=>"Abr",5=>"May",6=>"Jun",7=>"Jul",8=>"Ago",9=>"Sep",10=>"Oct",11=>"Nov",12=>"Dic"); 
echo 
$meses{$fecha_separada[1]}; 
Y el trozito de formulario correspondiente con fecha, cantidad y precio, he optado por la forma que me ha dado cluster, luego ya una vez lo consiga, y alo pondré bonito:
Código PHP:
for ($x=0; $x<13; $x++){ 

cantidad <input type="text" name="cantidad[<? echo $x ?>]"> 
precio<input type="text" name="precio[<? echo $x ?>]"> 
fecha_fin <? echo $fecha_fin?>
<input type="hidden" name="fecha_fin[<? echo $x ?>]" value="<? echo $fecha_fin ?>">
}
Como puedo hacer para sumar uno al mes, y me lo imprima de cada vez correctamente????????????????Espero puedan ayudarme con esto, un montón de gracias por adelantado de veras!!
  #11 (permalink)  
Antiguo 24/11/2005, 10:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
(me perdí) ..

Podrías graficar el problema indicando un extracto de los datos que se han de gestionar? .. y como deben quedar distribuidos? ... A ver si con eso nos hacemos una idea más clara de donde quieres llegar.

Un saludo,
  #12 (permalink)  
Antiguo 24/11/2005, 11:12
Avatar de susaninhax  
Fecha de Ingreso: noviembre-2004
Mensajes: 358
Antigüedad: 13 años
Puntos: 3
buenas tardes cluster

Adjunto este enlaceejemplo
Para que veas como es el trozo de formulario al que me estoy refiriendo, es decir, las celdas que están vacias de color verde ahí deberan escribirse las fechas de mes en mes , el usuario deberá introducir el precio y la cantidad correspondiente a cada mes. Y todos esos datos deben guardarse en una bd con una relacion de cantidad precio con la fecha correspondiente.

Entonces lo que a mi me gustaría es saber si hay algun modo de generar la fecha y que al mismo tiempo se pueda guardar una relacion de fecha cantidad precio de la misma columna para posteriores consultas...

El truco que utilizaba para sacar las fechas era escribir en cada celda el siguiente código , y únicamente le cambiaba los meses que le tenía que sumar.
Código PHP:
<?php
$fecha_actual
=date("Y-m-d");
$sql="select DATE_ADD('$fecha_actual', INTERVAL 2 MONTH) as mes_proximo";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$fecha_fin=$row["mes_proximo"];
$fecha_separada=explode("-"$fecha_fin);
if(
$fecha_separada[1]=="12"){
echo 
"Dic";
}elseif(
$fecha_separada[1]=="1"){
echo 
"Ene";
}elseif(
$fecha_separada[1]=="2"){
echo 
"Feb";
}elseif(
$fecha_separada[1]=="3"){
echo 
"Mar";
}elseif(
$fecha_separada[1]=="4"){
echo 
"Abr";
}elseif(
$fecha_separada[1]=="5"){
echo 
"May";
}elseif(
$fecha_separada[1]=="6"){
echo 
"Jun";
}elseif(
$fecha_separada[1]=="7"){
echo 
"Jul";
}elseif(
$fecha_separada[1]=="8"){
echo 
"Agos";
}elseif(
$fecha_separada[1]=="9"){
echo 
"Sep";
}elseif(
$fecha_separada[1]=="10"){
echo 
"Oct";
}elseif(
$fecha_separada[1]=="11"){
echo 
"Nov";
}
echo 
"-";
echo 
$fecha_separada[0];
?>
Pero solo genera un dato, por eso tengo que repetir este mismo código para cada mes distinto.

Por otro lado para generar las columnas habíamos hablado de hacer un bucle del sugiente modo, pero ahora mi duda es que no se como generar la fecha del mismo modo que genero los campos para que guarden relación.
Código PHP:
<? 
for ($x=0$x<13$x++){ 
?> 
<tr>
<td>

cantidad <input type="text" name="cantidad[<? echo $x ?>]"> 
precio<input type="text" name="precio[<? echo $x ?>]"> 
fecha_fin <? echo $fecha_fin?>
<input type="hidden" name="fecha_fin[<? echo $x ?>]" value="<? echo $fecha_fin ?>">

</td>
</tr><? 
}
?>
Es complicado de entender, pero alguien se le ocurre algún modo???????? yo tengo un cacao ya en la cabeza... no se por donde tirar en cuanto a las fechas... hacer un array del tipo:
Código PHP:
$meses=array(13=>"Dic",1=>"Ene",2=>"Feb",3=>"Mar",4=>"Abr",5=>"May",6=>"Jun",7=>"Jul",8=>"Ago",9=>"Sep",10=>"Oct",11=>"Nov",12=>"Dic"); 
pero no se como unirlo a mi codigo de fechas o como adaptarlo para genear un bucle... que lio..

espero que me podais entender viendo el formulario. muchas gracias pro la paciencia, muchísimas gracias.
  #13 (permalink)  
Antiguo 24/11/2005, 11:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. esa fecha que es?

Es un dato que debes obtener de una Base de datos? .. es una fecha correlativa desde una inicio a una fin? (o mejor dicho son "meses" .. desde un inicio a un fin y un "año" de rango total? ...)

Un saludo,
  #14 (permalink)  
Antiguo 24/11/2005, 11:31
Avatar de susaninhax  
Fecha de Ingreso: noviembre-2004
Mensajes: 358
Antigüedad: 13 años
Puntos: 3
buenas cluster;

las fechas no salen de ninguna base de datos inicialmente. Las genero del siguiente modo:

Primero consigo el dia actual.
Acontinuación le sumo un mes al dia actual y lo guardo en mes_próximo y luego simplemente lo separo con explode para poder escribirlo, y con el if le indico que si su valor es 1 me escriba enero, si su valor es 2 me escriba febrero , etc.

Y para que me aparezcan todas las fechas, lo que hago es , en la segunda columna aplico el mismo código, pero en vez de sumar un mes a la fecha actual, lo que hago es sumar dos meses a la fecha actual. Pero claro, es tedioso y un poco lio, por eso pregunto si hay algún modo de hacerlo más dinámico sin tener que repetir el código en cada columna...???? no se si me he esplicado bien, espero que si....
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:14.