Foros del Web » Programando para Internet » PHP »

Formulario e-mail en php

Estas en el tema de Formulario e-mail en php en el foro de PHP en Foros del Web. Por favor ayudenme,estoy creando un formulario para enviar a un e-mail, con el siguiente script php: <?php ## VARIABLES ## Dirección de tu correo $micorreo="[email protected]"; ...
  #1 (permalink)  
Antiguo 04/10/2004, 14:42
Avatar de calin  
Fecha de Ingreso: julio-2003
Ubicación: Peru
Mensajes: 190
Antigüedad: 20 años, 9 meses
Puntos: 0
Formulario e-mail en php

Por favor ayudenme,estoy creando un formulario para enviar a un e-mail, con el siguiente script php:

<?php

## VARIABLES
## Dirección de tu correo
$micorreo="[email protected]";
## Asunto axiliar si no lo introduce un asunto que identifique la procedencia del correo.
$xasunto="Correo desde tu pagina";
## Pagina final de gracias. Si el formulario no incluye este campo oculto del formulario.
$gracias_defecto="http://www.xxxxx.com";
## Página final si se produce un error al enviar el correo
$error_correo="http://www.error.html";
## variable auxiliar, que produce un salto de línea
$retorno="\r\n";

## CABECERAS DE CORREO
## $nombre $correo son variables que contienen los valores de: nombre y correo del formulario.
$headers = "MIME-Version: 1.0\r\n" ;
## campos y variables nombre, $nombre y correo $correo. No pueden ser modificados
## Han de mantenerse en el formulario para utilizar el mismo script con distintos formularios
$headers .= "From: $nombre<$correo>\r\n";
## Responder al correo
$headers .= "Reply-To: $correo<$correo>\r\n";
## Otras cabeceras que pueden ponerse si ocurren problemas u omitirse si todo va bien.
## Obligatoriamente, cada elemento de la cabecera termina en \r\n Nueva línea.
## $headers .= "X-Mailer: PHP/" . phpversion();
## $headers .= "X-Sender: $correo<$correo>\r\n";
## $headers .= "Return-Path: <$correo>\r\n";
## $headers .= "Cc: $nombre<$correo>\r\n";

## CUERPO DEL MENSAJE INICIO
## Obtención de la IP del visitante
## Empezamos a contruir el mensaje final, sumando los elementos del mensaje
$mfinal.="IP visitante: ";
## Guardamos la IP del visitante
$mfinal.=$HTTP_SERVER_VARS['REMOTE_ADDR'];
$mfinal.=": ";
## Y el puerto del usuario
$mfinal.=$HTTP_SERVER_VARS['REMOTE_PORT'];
## añadimos dos retornos de línea
$mfinal.=$retorno;
$mfinal.=$retorno;

## CUERPO DEL MENSAJE AÑADIDO DE CAMPOS AL MENSAJE
## $vareliminar Número de botones del formulario y campos ocultos (últimos elementos) + 1 --> en este caso (1+1)
## Si queremos eliminar del mensaje el campo oculto de la página final $vareliminar=3;
$vareliminar=2;
## Almacenar en un array los nombres de variables del formulario enviado
$claves_array=array_keys ($HTTP_GET_VARS);
## de i=0 hasta el número de campos del formulario, - variables a eliminar
for ($i=0;$i<=(count($HTTP_GET_VARS)-$vareliminar);$i++){
## Obtenemos el nombre de cada campo en concreto
$nombrevar=$claves_array[$i];
## Sumamos el nombre de campo de formulario al mensaje final
$mfinal .= $nombrevar;
$mfinal .= ": ";
## Y añadimos el contenido que haya introducido nuestro visitante
$mfinal .= $HTTP_GET_VARS[$nombrevar];
## Separamos cada campo por dos retornos, podemos eliminar uno
$mfinal .= $retorno;
$mfinal .= $retorno;
}
## Si no hay asunto, o no contiene nada, le damos al email un asunto defecto
if (is_null($asunto)){ $asunto2="correo desde la web";}
## Si hay asunto, añadimos un prefijo propio para identificar que es correo desde la web.
else { $asunto2 ="Asunto-> $asunto"; }

## ENVÍO DEL CORREO
## Para finalizar, envíamos el correo, y comprobamos el resultado
$resultado=mail($micorreo, $asunto2, $mfinal, $headers);
## Si quisiésemos enviar un mensaje de acuso de recibo, añadimos esta línea, sabiendo que:
## tenemos que asignar estas variables $asuntoreply (Asunto), $mreply (mensaje), $headers2(mensaje)
## de modo similar a como hemos construido las variables anteriores
## $resultado2=mail($correo, $asuntoreply, $mreply, $headers2);

## COMPROBACIÓN
## Si no se ha podido enviar el correo.
if ($resultado ==true)
{
## Si no hay página de gracias carga las página de defecto
if (is_null($pagina_gracias)){ header( "Location: $gracias_defecto" );}
else{
## Si hay página de gracias, cárgala
header( "Location: $pagina_gracias" );
}
}
## Si se ha producido un error, advierte al usuario
else header( "Location: $error_correo" );
?>






con el siguiente formulario:





<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento sin titulo</title>
</head>

<body>

<!-- Encabezamiento del formulario. Antes de enviarlo, ejecuta la rutina de validación JScript -->
<!-- Si el JScript retorna falso, no se produce el envío de correo -->
<!-- Modificar la trayectoria del scipt mail.php si lo tenemos en otro directorio ACTION="directorio/mail.php" -->
<!-- para ASP, utilizar ACTION="mail.asp" -->
<!-- <FORM name = "formulario" ACTION="mail.asp" METHOD="POST" onSubmit="return validate1(this)"> -->
<FORM name = "formulario" ACTION="mail.php" METHOD="POST" onSubmit="return validate1(this)">

<!-- Los nombres de campos correo, y nombre, son obligatorios para todos los formularios -->
<font color="#000000" size="2"><b> Correo</b></font>
<input type="text" name="correo" size="52">
<BR>

<FONT color="#000000" size="2"><b>Nombre</b></FONT>
<INPUT TYPE="text" NAME="nombre" size="40">
<BR>

<!-- El resto de campos, puede tener un nombre cualquiera-->
<font color="#000000" size="2"><b>Asunto</b></font>
<input type="text" name="asunto" size="52">
<!-- Puedes poner otros campos como de tipo oculto que el usuario no ve -->
<!-- <input type="hidden" name="asunto" VALUE="Asunto que quieras poner en el mensaje"> -->
<BR>

<!-- Campo de lista de selección -->
<FONT size="2"><b>Pagina web</b></FONT>
<SELECT name="selectweb">
<!-- Campo seleccionado inicialmente -->
<OPTION value="Ninguna" selected>Ninguna</OPTION>
<OPTION value="Chollolinks">Chollolinks</OPTION>
<!-- útil para obtener un ancho mayor para la lista de selección (toma la cadena mas grande) -->
<!-- otra alternativa es utilizar estilos css <SELECT name="selectweb" style="width:300px;"> donde px son pixeles, y 300 su ancho-->
<OPTION>__________________</OPTION>
</SELECT>
<BR>

<!--Campo que puede omitir, añadir, o modificar a conveniencia -->
<FONT size="2"><b>Valoracion</b></FONT>
<!-- Campo cuadro selección -->
<!-- podríamos omitir el valor, value="x ", para esta función nos basta con un nombre descriptivo ó utilizar el mismo nombre para todos los cuadros. Entonces, si que necesitamos especificar un valor -->
<B>
<!-- Inicialmente, tenemos seleccionado No sabe, no contesta-->
<INPUT name="Ns/Nc" type="checkbox" id="Ns/Nc" value="checkbox" checked> Ns/Nc
<INPUT name="v1" type="checkbox" id="v1" value="1"> 1
<INPUT name="v2" type="checkbox" id="v2" value="2"> 2
</B>

<BR>
<!--Campo que puede omitir, añadir, o modificar a conveniencia -->
<FONT size="2"><b>Consulta</b></FONT>
<!--Grupo de Campo Alternos. Solo permite seleccionar un estado siempre que tengan el mismo name, en este caso grupo de opciones -->
<LABEL>
<B>
<!--Inicialmente, tenemos seleccionado el valor General. Solo se envía un valor, el seleccionado-->
<INPUT type="radio" name="GrupoOpciones" value="General" checked>
General</B></LABEL>
<B>
<LABEL>
<INPUT type="radio" name="GrupoOpciones" value="Cambio Enlaces">
Cambio Enlaces</LABEL>
<LABEL>
<INPUT type="radio" name="GrupoOpciones" value="Publicidad">
Publicidad</LABEL>
</B>

<BR>
<!--Campo de líneas múltiples de 50 columnas (caracteres) y 10 filas (líneas) -->
<textarea name="mensaje" cols="50" rows="10">Contenido de tu mensaje </textarea>

<BR>
<!-- Campo oculto con la dirección de la página de gracias final-->
<!-- Permite individualizar la página final para cada formulario-->
<INPUT TYPE="hidden" NAME="pagina_gracias" VALUE="http://www.gracias.com">

<!-- Puedes quitar variables del script, como la página de error y ponerlo como un campo oculto con el mismo nombre, pero sin $ en el caso del php. Recuerde, que php, distingue entre mayúsculas y minúsculas. -->
<!--Lo tengo así porque resulta mas sencillo. Lo importante del script, es que maneja cualquier número de campos sin modificar el script -->

<!-- Botón de enviar . Los botones siempre al final, para que los elimine nuestro script php-->
<INPUT name="submit" TYPE="submit" VALUE="Enviar">

</FORM>



<script language="JavaScript">
<!--//
// La variable form, de la función, contiene los datos del objeto formulario, y permite manipular sus propiedades.
function validate1 (form) {

// VARIABLES
// Variable para controlar si los campos estaban cumplimentados
r=1;

// TEST DE CAMPOS
// Si vale "" , se alerta, r=0, alerta al usuario y coloca el foco en el campo nombre
if (form.nombre.value==""){r=0;alert("Porfa, dime tu nombre!");form.nombre.focus};
// Comprueba si este campo de correo tiene al menos una @
if (form.correo.value.indexOf('@',0)==-1) {r=0;alert("Sin correo para responder, No te Comes Nada !");form.correo.focus};
// Para cada campo a comprobar, copiar y pegar esta línea reemplazando el nombre del campo mensaje
if (form.mensaje.value==""){r=0;alert("Me escribes ¿pero no me cuentas nada?");form.mensaje.focus};

// RETORNAR AL ENVÍO
// Si ha hay campos sin cubrir, interrumpimos el envío del correo -return false-
if (r==0) { return false; }
// Si todo está bien, te dispones a enviar el contenido del formulario al script php, -return true-
// Además, alertas al usuario para que no pulse mas veces, aún así, la gente, no se cansa.
else { alert ("con una vez es bastante gracias. Su mensaje se está procesando");return true; }
}
//---->
</script>

</body>
</html>





El problema es que al enviar los datos solo guarda los datos del encabezado:
- Correo
- Nombre
- Asunto
el Ip del visitante y el puerto del usuario, pero no guarda los demas campos.
Que debo corregir, alguien ayudenme por favor
  #2 (permalink)  
Antiguo 04/10/2004, 15:24
Avatar de Kernellover  
Fecha de Ingreso: noviembre-2002
Ubicación: Perdido
Mensajes: 251
Antigüedad: 21 años, 5 meses
Puntos: 0
Hay mucho código y ahora no tengo el tiempo, pero mañana trataré de miralo mejor.

Un consejo, trata de intercalar sentencias echo, antes de definir los headers, para ver que tienes en las variables en cada punto de tu programa, así lo verás impreso en la pantalla directamente.

De todos modos he visto alguna incoerencia como por ejemplo que en $mfinal nunca será nulo ya que $mfinal .= $retorno si lo concatenas con las cadenas de retorno aunque no hayan escrito nada tu le cargas luego los valores del retorno de carro...

Visita la web de www.php.net para ver mar ejemplos de aplicacion sobre la función mail.


Suerte!
  #3 (permalink)  
Antiguo 04/10/2004, 16:29
Avatar de calin  
Fecha de Ingreso: julio-2003
Ubicación: Peru
Mensajes: 190
Antigüedad: 20 años, 9 meses
Puntos: 0
Gracias por responder, pero...

Hola Kernellover y gracias por tu respuesta.
Lo que pasa es que soy novato en php. Como comprenderas este script no es mio y me temo no tener la sufiente experiencia para revisar y cambiar lo que me indicas. Si no es mucha molestia te suplicaria que me ayudes mas precisamente con las correciones que nesesito para que esto funcione.
Espero no estar pidiendo mucho, pero en verdad lo nesesito. Estoy estudiando el php desde cero, pero me falta mucho camino por recorrer, pero con ayuda de amigos como tu el camino sera mas corto.
Gracias amigo
  #4 (permalink)  
Antiguo 04/10/2004, 19:54
Avatar de Camarex  
Fecha de Ingreso: enero-2003
Ubicación: Monterrey NL
Mensajes: 148
Antigüedad: 21 años, 2 meses
Puntos: 0
Que flojera con el codigo si eres principiante

Mira, yo te recomiendo si eres principiante, comienza con un script muchisisimo mas sencillo que el que tienes. Yo tambien soy principiante y ya he logrado enviar el famoso email de "recomienda a un amigo esta pagina" y poco a poco le agregue por ejemplo: que valide el email... que tenga campos obligatorios... y ahorita estoy tratando de que tambien envie una imagen del articulo. pero como te digo inicia con algo Sencillo


tambien me instale el foro con php y mysql que viene en maestros del web y popo a poco le estoy haciendo cambios.

Es solo una recomendacion y mi punto de vista. Creeme que te va a pasar lo mismo con mas respuestas de usuarios mas avanzados en el tema, te vas a quedar con un signote de interrogacion. Ya pase por eso.

Te recomiendo esta liga. (Muy buen tutorial). tiene opcion para hacer download y trabajar off-line.

www.rinconastur.com/php

Un saludo y mucha suerte con el poderoso PHP.
No te desanimes.
__________________
Si el empleo fuera como rentar una casa, entonces no rentes para siempre y busca la manera de Comprar. ;-)
Frase: Edgar Camarena
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:30.