Foros del Web » Programando para Internet » PHP »

Enviar el contenido de un formulario a una casilla de e-mail

Estas en el tema de Enviar el contenido de un formulario a una casilla de e-mail en el foro de PHP en Foros del Web. Hola comunidad! Primero: se xhtml css y apenas un poco de javascript. Jamas tiré una linea de código PHP !!! y veo que para qua ...
  #1 (permalink)  
Antiguo 27/08/2009, 15:58
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 9 meses
Puntos: 269
Enviar el contenido de un formulario a una casilla de e-mail

Hola comunidad!



Primero: se xhtml css y apenas un poco de javascript.
Jamas tiré una linea de código PHP !!! y veo que para qua esto funcione debo conocer un lenguaje del lado del servidor, al menos eso me dijeron en el foro de Ajax.

Bien, encontre algo llamado PHPMailer pero no se que hacer con el. Leo y releo el tutorial ( http://blog.unijimpe.net/introduccion-a-phpmailer/ ) pero no se como convinar el codigo php con xhtml.

Tambien estoy perdido en esto: smtp host ??? ¿Por favor alguien me lo explicaria de manera sencilla teniendo en cuenta que son conceptos con los que nunca he trabajado?

Estoy manejando formularios con joomla (Artsform) pero quiero hacerlos con php porque de pronto me gustaria aprender este lenguaje.

Desde ya les agradezco su ayuda, la cual será muy valiosa por mínima que sea

P/D: Pase por las FAQ (wiki) de PHP (http://www.forosdelweb.com/wiki/PHP:...ormato_HTML%3F) e hice lo siguiente (Resignandome a PHPMailer):

Archivo html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulario de contacto</title>
<style type="text/css">
* { font-family:Arial, Helvetica, sans-serif; color:#000000;}
body { background-color:#eee; margin-top:10%;}
</style>

</head>

<body>

<form action="enviar.php" method="post">
<fieldset>

<p><label>Nombre<input type="text" name="nombre" size="25"/></label></p>

<p><label>Email<input type="text" name="email" size="25"/></label></p>

Comentarios
<p><label><textarea name="texto" cols="32"></textarea></label></p><!--32 columnas-->

<input type="submit" value="Enviar"/>

</fieldset>
</form>


</body>
</html>


Archivo PHP: (enviar.php)


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>enviar</title>
</head>

<body>
<?php

$fecha=date("d-m-Y");
$hora=date("H:i:s");
$destino="[email protected]";
$asunto= " comentario";
$desde='From: ' .$_POST[email];
$comentario = "
\n
nombre: .$_POST[nombre]\n
email: .$_POST[email]\n
consulta: .$_POST[texto]\n
enviado: $fecha a las $hora\n
\n
";
mail($destino, $asunto, $comentario, $desde);
?>

</body>
</html>


Resultado: Hago click en enviar, la página queda en blanco ¿Porque? y no llega nada
a mi casilla de e-mail ... uf madre santa!



Última edición por cristian_cena; 27/08/2009 a las 17:15
  #2 (permalink)  
Antiguo 27/08/2009, 17:19
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 3 meses
Puntos: 21
Respuesta: Enviar el contenido de un formulario a una casilla de e-mail

Si no tenes idea de php, te recomendaria empeza de mas abajo, por mas que PHPmailer sea muy facil de manejar (una vez que ya tenes una minima idea de lo que haces)....

Para eso tendrias que usar la funcion email(), o buscate en google formularios de contacto con php, hay muchisimos que podrias adaptar a tu web facilmente...

ESTO te puede servir, talvez....

---

La pagina va a quedar en blanco siempre, no estas imprimiendo nada... no vas a poder ver ningun 'Email sended!' que "invente" php.... y la casilla... no veo ningun error a simple vista, pero lo mas probable es que te este llegando a la casilla de correo no deseado.
  #3 (permalink)  
Antiguo 27/08/2009, 17:44
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 9 meses
Puntos: 269
Respuesta: Enviar el contenido de un formulario a una casilla de e-mail

Gracias Bioxido,

Que me dices de smtp host ?

"no vas a poder ver ningun 'Email sended!' que "invente" php.... y la casilla... " quisiera que volviera a mostrarme el formulario ¿Es posible?

El mail no llega ni siquiera a "correo no deseado" sera porque estoy probando la pagina desde el localhost? ¿Debo colgarla en un servidor para que funcione?
  #4 (permalink)  
Antiguo 27/08/2009, 19:28
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 3 meses
Puntos: 21
Respuesta: Enviar el contenido de un formulario a una casilla de e-mail

Si, probablemente se deba a eso, que no esta 'instalada' esa funcion en el cliente php que tenes en tu pc (siquiera se si es una funcion 'aparte' solo especulo) por las dudas intentalo... podes fijarte en hosts gratis como... 000webhost.com o algo asi.

Si queres que te vuelva a mostrar el formulario, tenes dos caminos:
1- Redireccionas la pagina una vez enviado el email ya sea con Header(location:); o meta.(de hmtl)
2- Que proceses el formulario en el mismo archivo donde esta el script, bien...esto ya es un poco mas complicado, ya que tenes que hacer en el mismo script donde esta el formulario, un 'if(isset());' para comprobar que el formulario halla sido enviado, y en el action del formulario dejarlo en blanco.
Esta segunda forma es un poco mas complicada, cualquier cosa te ayudo ;)

Un tip, si a lo que te referis con 'volver a mostrarte el formulario' es a que se muestren todos los datos, digamos que el formulario se vea como lo ah completado el usuario antes de enviarlo... podes pasar los datos que envio el usuario por $_GET o bien, con javscript hacer un history back para volver atras, de esta forma el navegador del usuario lo 'autocompleta'

De nada.
  #5 (permalink)  
Antiguo 28/08/2009, 23:07
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 9 meses
Puntos: 269
Respuesta: Enviar el contenido de un formulario a una casilla de e-mail

Hola bioxido:

Usted me ha enseñado a enviar mi primer formulario por lo que me saco el sombrero y le agradezco profundamente !

Colgue el sitio en un hosting gratuito y efectivamente llegó el e-mail a mi casilla de correo (a correo no deseado tal como me advirtió) !!

Primero pedir perdon porque me exprese mal en el comentario anterior:

Lo que quise es que cuando el usuario de "enviar" se vuelva a mostrar la página contacto (aquí el link: http://www.inicio2770.com.ar/contacto.html)

Lo logré siguiendo su recomendación, incluyendo <META HTTP-EQUIV="Refresh" CONTENT="1; URL=http://www.inicio2770.com.ar/contacto.html"> al archivo enviar.php

Con respecto a ... cito: Header(location:); if(isset()); $_GET. No lo he entendido pues, aunque me pese, no tengo la más mínima idea de php, aunque con gusto lo aprenderé algún día!

Saludos! y gracias totales!
  #6 (permalink)  
Antiguo 29/08/2009, 17:06
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 3 meses
Puntos: 21
Respuesta: Enviar el contenido de un formulario a una casilla de e-mail

Si lo pudiste solucionar con el meta, perfecto... no es necesario que te compliques con tanto php...

Aunque te explico mas o menos..

Cuando vos lo que queres es que los datos que se enviaron por formulario se 'envien' desde la misma pagina donde esta el formulario por ejemplo, enviar.php en enviar.php tenes el formulario y el script que envia el mail...

Cuando vos haces un if(isset($_POST['enviar'])){ } lo que haces es indicarle al script, que cuando se envie el formulario, osea se haga clic en 'enviar' se ejecute el codigo que se encuentra dentro del if (de { a }) dentro de ese codigo, del if, tendrias el codigo que recibe los datos por $_POST y los envia por mail, de esa forma te ahorras tener que crear dos archivos, uno para procesar el fomulario y otro que sea el formulario en si.

Pero como dije, no es necesario complicarse tanto si con un simple meta se puede arreglar.

De nada, para eso estamos.
  #7 (permalink)  
Antiguo 29/08/2009, 17:21
 
Fecha de Ingreso: agosto-2008
Ubicación: Cali . Colombia
Mensajes: 459
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Enviar el contenido de un formulario a una casilla de e-mail

yo estoy en esas ami no me llega el correo
en mi caso el usuario debe selecionar 4 destinos a travez de select
alguien que me de una mano???
__________________
Jaime P. Bravo
Programador Web
MCP (Microsoft Certified Professional)
  #8 (permalink)  
Antiguo 29/08/2009, 18:26
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 9 meses
Puntos: 269
Respuesta: Enviar el contenido de un formulario a una casilla de e-mail

Bioxido:

Cito: "Aunque te explico mas o menos.." Lamento decirle que aunque me esfuerze para comprenderlo no lo puedo lograr pues como le había dicho no se absolutamente nada de php.


Pero, tal como dices y si no es molestia ¿podrias "coser" este código por tu cuenta y lograr un solo archivo en vez de dos?:

contacto.html:


<form action="enviar.php" method="post">
<fieldset>

<p>
<label>Nombre
<input type="text" name="nombre" size="25"/>
</label>
</p>

<p>
<label>Email
<input type="text" name="email" size="25"/>
</label>
</p>

<p>
<label>Comentarios
<textarea name="texto" cols="32">
</textarea>
</label>
</p>


<input type="submit" value="Enviar"/>

</fieldset>

</form>

enviar.php:

En head
<META HTTP-EQUIV="Refresh" CONTENT="1; URL=http://www.inicio2770.com.ar/contacto.html">
En Body
<?php
$fecha=date("d-m-Y");
$hora=date("H:i:s");
$destino="[email protected]";
$asunto="comentario";
$desde='From: ' .$_POST[email];
$comentario = "
\n
nombre: .$_POST[nombre]\n
email: .$_POST[email]\n
consulta: .$_POST[texto]\n
enviado: $fecha a las $hora\n
\n
";
mail($destino, $asunto, $comentario, $desde);
?>



soldierjesus: espero que esta pregunta te sirva a ti también, pegué el codigo que he utilizado. Debes poner en $destino="[email protected]"; la cuenta de correo a la que quieres que llegue el mail.
  #9 (permalink)  
Antiguo 29/08/2009, 18:52
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 3 meses
Puntos: 21
Respuesta: Enviar el contenido de un formulario a una casilla de e-mail

El codigo completo te quedaria asi...

Código PHP:
<?php

if(isset($_POST["enviar"])) {  

$fecha=date("d-m-Y");
$hora=date("H:i:s");
$destino="[email protected]";
$asunto="comentario";
$desde='From: ' .$_POST[email];
$comentario "
\n
nombre: .$_POST[nombre]\n
email: .$_POST[email]\n
consulta: .$_POST[texto]\n
enviado: $fecha a las $hora\n
\n
"
;
mail($destino$asunto$comentario$desde);
echo 
'<META HTTP-EQUIV="Refresh" CONTENT="1; URL=http://www.inicio2770.com.ar/contacto.php">';
}
?>

<form action="" method="post">
<fieldset>

<p>
<label>Nombre
<input type="text" name="nombre" size="25"/>
</label>
</p>

<p>
<label>Email
<input type="text" name="email" size="25"/>
</label>
</p>

<p>
<label>Comentarios
<textarea name="texto" cols="32">
</textarea>
</label>
</p>


<input type="submit" name="enviar" value="Enviar"/>

</fieldset>
</form>
No lo eh probado, pero me imagino que va a andar...cualquier cosa aca estoy.

El archivo contacto.html tendria que pasar a llamarse contacto.php

El archivo enviar.php ya no serviria para nada.
  #10 (permalink)  
Antiguo 29/08/2009, 21:38
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 9 meses
Puntos: 269
Respuesta: Enviar el contenido de un formulario a una casilla de e-mail

Hola bioxido: Gracias por tomarse el trabajo y donarlo a la comunidad

copie y pegue su codigo en un nuevo archivo llamado contacto.php

solo que ahora, sustituyo el archivo contacto.html que tenía por contacto.php
y no se porque motivo no enlaza de .html a .php pero si lo hace de .php a .html

Por ejemplo: No puedo pasar de inicio.html a contacto.php pero si lo puedo hacer de contacto.php a inicio.html


Aquí el menú (extraido del archivo inicio.html):

<ul id="MenuBar1" class="MenuBarHorizontal">
<li><a href="inicio.html">INICIO</a></li>
<li><a href="laEscuela.html">La Escuela</a>
<ul>
<li><a href="#">Historia</a></li>
</ul>
</li>

<li style="width:13em;"><a class="MenuBarItemSubmenu" href="nuestrosProductos.html">Nuestros Productos</a>
<ul>
<li style="width:13em;"><a href="#">Producción de los Alumnos</a></li>
<li style="width:13em;"><a href="#">Técnicas Tradicionales</a></li>
<li style="width:13em;"><a href="#">Productos distinguidos</a></li>
</ul>
</li>
<li><a href="muestras.html">Muestras</a></li>
<li style="width:6em;"><a href="contacto.php">Contacto</a></li>
</ul>


miralo tu mismo:
__________________________________________________ __________

http://www.inicio2770.com.ar/contacto.php
http://www.inicio2770.com.ar/inicio.html
__________________________________________________ __________
prueba pasar de inicio.html a contacto.php y viceversa y no utilizes los otros items de menú ya que no actualize los vinculos de los archivos laEscuela.html, nuestrosProductos.html y muestras.html"
__________________________________________________ __________

Cuando pasas de inicio.html a contacto.php el navegador muestra el siguiente mensaje:

Not Found

The requested URL /contacto.html was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Apache/1.3.41 Server at www.inicio2770.com.ar Port 80


¿Sera que debo pasar todos mis archivos ".html" a ".php"?

Saludos! y desde ya muchas gracias

Última edición por cristian_cena; 29/08/2009 a las 21:50
  #11 (permalink)  
Antiguo 29/08/2009, 22:23
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 3 meses
Puntos: 21
Respuesta: Enviar el contenido de un formulario a una casilla de e-mail

no no o.o es solo porque lo estas enlanzando a contacto.html, no a contacto.php, te habras olvidado de updatear el archivo en el ftp, pero en ese codigo fuente esta enlazando a contacto.html.

En el archivo de contacto.php, por ejemplo si esta bien enlazado que enlazas a contacto.php y no a contacto.html, revisa el codigo de inicio.html
  #12 (permalink)  
Antiguo 30/08/2009, 09:47
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 9 meses
Puntos: 269
Respuesta: Enviar el contenido de un formulario a una casilla de e-mail

Hola bioxido:

aclaro:
en el menú (ul) del archivo contacto.php enlacé a contacto.php
en el menu (ul) del archivo inicio.html tambien enlacé a contacto.php

Se ve que el servidor tarda en actualizar los cambios ya que hoy visite el sitio y vinculó perfecto. (Disculpa mi ansiedad)

Gracias

Saludos!
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 09:50.