Foros del Web » Programando para Internet » PHP »

Envío de datos de Formulario + adjuntos

Estas en el tema de Envío de datos de Formulario + adjuntos en el foro de PHP en Foros del Web. Es mi primer incursión en PHP y luego de dar vueltas por diferentes Threads y por otros sitios decidí que lo mejor sería preguntar aquí. ...
  #1 (permalink)  
Antiguo 29/03/2004, 07:49
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 1
Envío de datos de Formulario + adjuntos

Es mi primer incursión en PHP y luego de dar vueltas por diferentes Threads y por otros sitios decidí que lo mejor sería preguntar aquí.
Necesito hacer un formulario sencillo (Nombre, Email, Teléfono, Mensaje) con la posibilidad de un input para subir una imagen (jpg o gif) y que la misma se envíe adjunta con los datos del formulario, sin quedar guardada en el servidor.
El único formulario en php que he utilizado hasta ahora es este:

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>Prueba de formulario en PHP</title>
</head>

<body bgcolor="#fff" text="#333333" link="#000000" vlink="#CCCCCC">
<?
if (!$HTTP_POST_VARS){
?>
<form action="correo.php" method=post>
Nombre: <input type=text name="nombre" size=16>
<br>
Email: <input type=text name="email" size=16>
<br>
Telefono: <input type=text name="telefono" size=16>
<br>
Comentarios: <textarea name="mensaje" cols=32 rows=6></textarea>
<br>
<input type=submit value="Enviar">
</form>
<?
}else{
    //Componer el cuerpo del mensaje al recibir el formulario
    $cuerpo = "Formulario enviado\n";
    $cuerpo .= "Nombre: " . $HTTP_POST_VARS["nombre"] . "\n";
    $cuerpo .= "Email: " . $HTTP_POST_VARS["email"] . "\n";
    $cuerpo .= "Telefono: " . $HTTP_POST_VARS["telefono"] . "\n";
    $cuerpo .= "Comentarios: " . $HTTP_POST_VARS["mensaje"] . "\n";

    //Envio del correo
    mail("[email protected]","Formulario recibido",$cuerpo);

    //Mensaje de agradecimiento
    echo "Tu mensaje ha sido enviado. Muchas Gracias!";
}
?>
</body>
</html>
Lo único que no funcionaba bien de esto (además de no incluir la función "upload") es que en la línea from al recibir el email, dice:

From: httpd <httpd>

He visto varios scripts php para subir archivos, pero no encuentro ninguno completo, es decir, un formulario para ingresar datos y adjuntar un archivo, todo junto y que sea todo enviado a mi email, sin dejar copia en el servidor.

Alguna ayuda, algún tutorial, un copy & paste, etc. ....?

Desde ya, mil gracias.
__________________
_____________________
Duchamp

Última edición por duchamp; 29/03/2004 a las 07:51
  #2 (permalink)  
Antiguo 29/03/2004, 08:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Usa la classe:

PHP Mailer
http://phpmailer.sourceforge.net

Es un sustituto a mail() de PHP origianal que aporta todas las funcionalidades que requieres como la de enviar un archivo adjunto entre otras cosas ..

Pero para hacer esto primero tienes que subir la imagen/archivo al servidor .. eso lo haces con todos los ejemplos que ya has visto ..

El archivo lo subes a tu servidor y de ahí lo dejas en X directorio con X nombre .. así que para usar posteriormente PHP Mailer tan sólo es usar el método adecuado y usar la ruta/nombre de ese archivo que subistes.

Un saludo,

PD: SI est tu primer contacto con PHP .. primero aprende a enviar datos al servidor .. a validarlos .. a devolver mensajes de error, etc y de ahí a lo que actuamente quieres hacer. Te irá mejor y comprenderas como funciona todo mejor.
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 29/03/2004, 08:35
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 1
Gracias Cluster, veré lo que me recomiendas. Sí, es mi primer contacto con PHP (había probado algo utilizando el Movable Type, pero cosas muy elementales), aunque ya hace bastante tiempo manejo otros lenguajes (por eso prefiero aprender de manera empírica).
__________________
_____________________
Duchamp
  #4 (permalink)  
Antiguo 29/03/2004, 09:36
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 1
Hace ya un tiempo, en estos mismos foros JoeLit0 preguntó algo parecido, ha pasado más de un año y no hay una respuesta clara ... ¿o sí?
Quiero decir, yo he aprendido mucho aquí cuando comencé con html hace ya algunos años, es fácil encontrar decenas de ejemplos de Formularios en html, algunos mejores, otros no tanto, pero me dá la sensación de que hay como un vacío de este mismo tema en PHP.
__________________
_____________________
Duchamp
  #5 (permalink)  
Antiguo 29/03/2004, 10:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Vacio? ...

El caso es que la técnica es bien simple .. Sólo tienes que usar ambas técnicas/herramientas que aquí mismo he descrito ..

Es más que probable que esto ya esté más que hecho .. pues, es parte de sistemas de "web-mails" .. sólo que tal vez nadie se ha dado el tiempo de buscarlo y probarlo .. Pero, la técnica es bien simple si se usa por ejemplo una classe para envio del e-mail con dato adjunto como PHP mailer que resuelve el 90% del problema.

Alguien se anima? (y lo suben a las FAQ's?)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 29/03/2004, 10:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno . ya estoy aquí otra vez ..

http://www.hotscripts.com/PHP/Script...ors/index.html

Hay como 192 scripts de proceso de formularios .. Hay muchos que tienen la funcionalidad descrita .. eso sí los cobran (son de pago, supongo que alguno gratuito habrá .. no los he visto todos).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 29/03/2004, 10:47
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 1
Cluster, muchas gracias por tu respuesta e interés en dar solución a esto.
Estoy en este momento probando el PHPMailer, parece sencillo pero comencé con el pié izquierdo porque me devuelve un error del tipo:

Código:
Fatal error: Failed opening required 'class.phpmailer.php' 
(include_path='.:/usr/lib/apache/php/4.2.3/pear')
 in /home/.sites/43/site23/web/phpmailer.php
 on line 2
lo estoy chequeando con:

Código PHP:
<?php
require("class.phpmailer.php");
$mail = new PHPMailer();
?>
Tendré algún conflicto con el servidor o será con la ruta?
__________________
_____________________
Duchamp
  #8 (permalink)  
Antiguo 29/03/2004, 10:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El error es sobre la ruta ...

Al parecer tu servidor usa ya:
include_path='.:/usr/lib/apache/php/4.2.3/pear')

(el punto .) .. eso indica que puede tomar archivos a incluir desde la misma rama (directorio) que esté el .php que lo llame .. o bien usar classes de PEAR (que parece que lo tienes instalado).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 29/03/2004, 11:08
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 1
Ummmm ... voy a tener que ponerme un rato con eso porque todavía no lo comprendo bien ...

el php está en la raíz del sitio y el class.phpmailer.php está en un directorio
__________________
_____________________
Duchamp
  #10 (permalink)  
Antiguo 29/03/2004, 11:11
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 1
Tanto el class.phpmailer.php como el class.smtp.php ... deben tener algún permiso de ejecución en especial?
__________________
_____________________
Duchamp
  #11 (permalink)  
Antiguo 29/03/2004, 12:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si dices que tienes una estructura tipo:

/archivos <-- aquí el class.phpmailer.php y otros necesarios ..
formulario.php

la ruta que debes indicar para el include() sería:

include ("./archivos/class.phpmailer.php");

Intenta hacerlo relativo al sitio o bien ruta absoluta completa (tipo: /var/nose/www/public_html/archivos/class.phpmailer.php)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 29/03/2004, 12:05
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 1
Ok. Cuando dices 'Include' estás hablando del 'require' ... es así?

No sería mejor poner directamente / en lugar de ./ ?
__________________
_____________________
Duchamp

Última edición por duchamp; 29/03/2004 a las 12:10
  #13 (permalink)  
Antiguo 29/03/2004, 12:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El ./ por ejemplo asegura que sea "desde ese directorio ..." por ejemplo si usas la directiva del php.ini que antes mencioné sin el . (punto) en ella te daría problemas .. además de que si pones / te estas refiriendo al "raiz" (root) de ese servidor .. recuerda que ahí en un include() .. requiere() o similar las rutas son absolutas si no indicas . o .. en la ruta ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 29/03/2004, 12:37
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 1
Bueno, he optado por dar unos cuantos pasos atrás. Fuí a ver phpinfo(); y claro! el sendmail_path está configurado con sendmail ... y la porción de código que intenté utilizar usa smtp ...


Disculpen que envíe cada paso que doy pero pienso que quizás pueda servirle a otros (ojalá).
__________________
_____________________
Duchamp

Última edición por duchamp; 29/03/2004 a las 12:44
  #15 (permalink)  
Antiguo 29/03/2004, 13:01
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 1
Bueno, era fundamental eso. Al menos el script de prueba funcionó y recibí un e-mail sencillo (sin adjuntos). Voy por la parte complicada ahora ...
__________________
_____________________
Duchamp
  #16 (permalink)  
Antiguo 29/03/2004, 14:10
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 1
Finalmente, luego de cambiar el SMTP por sendmail, conseguí que funcione. Al menos recibí bien el email de prueba con un adjunto.

Lo que utilicé es el segundo ejemplo de
PHP en Castellano - Uso de la clase PHPMailer .

Ahora, que medidas de seguridad deben tomarse con esta clase de scripts?
Debo asignarle algún permiso de ejecución a este archivo.
Es seguro tener el nombre de usuario y password en el mismo PHP? (eso me dá pánico!!!)

Gracias
__________________
_____________________
Duchamp
  #17 (permalink)  
Antiguo 29/03/2004, 21:11
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 1
Bueno, luego de varios intentos no he podido adaptarlo a mis necesidades! Grrr!
__________________
_____________________
Duchamp
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 22:33.