Foros del Web » Programando para Internet » PHP »

Formulario y código php en la misma página

Estas en el tema de Formulario y código php en la misma página en el foro de PHP en Foros del Web. Bien, tengo el siguiente código php con la función mail() para enviar los datos recogidos de un formulario. Originalmente se trata de dos archivos. formulario.html: ...

  #1 (permalink)  
Antiguo 27/12/2010, 12:52
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Formulario y código php en la misma página

Bien, tengo el siguiente código php con la función mail() para enviar los datos recogidos de un formulario. Originalmente se trata de dos archivos.

formulario.html:

Cita:
<HTML>
<BODY>
<form id="formulario" name="formulario" method="post" action="enviar.php">
<p><label>Nombre<input name="nombre" type="text" id="nombre" size="30" /></label></p>
<p><label>Email<input name="email" type="text" id="email" size="30" /></label></p>
<p><label>Asunto<input name="asunto" type="text" id="asunto" size="30" /></label></p>
<p><label>Mensaje<br />
<textarea name="mensaje" cols="40" rows="8" id="mensaje"></textarea></label></p>
<p><input type="submit" name="Submit" value="Enviar" /></p>
</form>
</BODY>
</HTML>
y enviar.php:

Cita:
<?php
$nombre = $_POST["nombre"];
$remitente = $_POST["email"];
$destino= "[email protected]";
$asunto= $_POST["asunto"];
$mensaje= $_POST["mensaje"];

$mensaje = wordwrap($mensaje, 70);

$encabezados = "From: $remitente" . "\r\n" . "Reply-To: $remitente" . "\r\n" . 'Content-type: text/plain; charset=iso-8859-1';

mail($destino, $asunto, $mensaje, $encabezados) or die ("Su mensaje no pudo ser enviado");
echo "Su mensaje fue enviado con éxito";
?>

La verdad es que no se muy bien por donde empezar.

Se me ocurre que tal vez podría usar un if else para decir si el boton enviar ha sido pulsado entonces echo $enviar; (que sería equivalente a mail($destino, $asunto, $mensaje, $encabezados)) else null o algo así.

No estoy seguro de si mi planteamiento es correcto, ya que solo conozco la alternativa if else para estos casos y tal vez sea más apropiada otra instrucción. ¿Sería correcto usar if else? y en tal caso ¿Qué podría contener else para decir "no hagas nada" y cómo decir "si input type="submit" se pulsa"?
  #2 (permalink)  
Antiguo 27/12/2010, 12:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Formulario y código php en la misma página

definitivamente tu planteamiento es correcto... (:
Código PHP:
if (isset($_POST['name_del_submit']))
{
  
// ...

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/12/2010, 12:57
 
Fecha de Ingreso: febrero-2010
Mensajes: 818
Antigüedad: 14 años, 2 meses
Puntos: 55
Respuesta: Formulario y código php en la misma página

deberias preguntar eso y luego que todas las variables no sean vacias y tengan el formato indicado, por ejemplo q en el mail tenga un formato mail valido y no cualquier cosa. y lo haces a puro if.
  #4 (permalink)  
Antiguo 27/12/2010, 13:00
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

Cita:
Iniciado por pateketrueke Ver Mensaje
definitivamente tu planteamiento es correcto... (:
Código PHP:
if (isset($_POST['name_del_submit']))
{
  
// ...

Vaya muchas gracias...

Em pero la parte del else ¿qué puede llevar? Sinceramente es que no se que valor en else puede significar no hacer nada.

En el manual de foros del web leí esto:

$variable = "Existe";

$variable = null;

unset($variable);

Pero ninguna de esas soluciones parece adecuada.

Tal vez si se tratara de un valor true/false...
  #5 (permalink)  
Antiguo 27/12/2010, 13:02
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

¿A que decis de solo utilizar if?

Vaya... ahora que lo pienso... no se como he podido ser tan tonto. Creo que sí que se puede usar solo if, o sea si se cumple esta condicón tal, de lo contrario mail(x, y, z) solo será el valor de una variable.

Y yo que quería utilizar un if elseif else... jaja.

¿Pero en ese caso donde ponía action="enviar.php" qué pongo? ya que la acción se realiza en la propia página y es el boton enviar el que dispara el mecanismo del if.
  #6 (permalink)  
Antiguo 27/12/2010, 13:12
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

Cita:
Iniciado por Death_Empire Ver Mensaje
deberias preguntar eso y luego que todas las variables no sean vacias y tengan el formato indicado, por ejemplo q en el mail tenga un formato mail valido y no cualquier cosa. y lo haces a puro if.
En ese caso tendría que hacer algo como:

if (isset($_POST['name_del_submit']) && $nombre != "")
{
echo $enviar;
}

No se como se dice vacío.
  #7 (permalink)  
Antiguo 27/12/2010, 13:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Formulario y código php en la misma página

vacío: empty()
http://php.net/empty
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 27/12/2010, 13:16
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 5 meses
Puntos: 175
Respuesta: Formulario y código php en la misma página

haz posteado 4 veces para contestar y divagar,, jajajaja... vaya amigo..
ya lo dijo PATEKETRUEKE

si es que fue enviada alguna variable, pues solo ahi asignas las variables del mensaje, caso contrario, no hara nada, salvo que le pongas un else... vacio se dice empty
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #9 (permalink)  
Antiguo 27/12/2010, 14:56
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

<?php
<form id="contacto" name="contacto" method="post" action="">
<p><label>Nombre<input name="nombre" type="text" id="nombre" size="30" /></label></p>
<p><label>Email<input name="email" type="text" id="email" size="30" /></label></p>
<p><label>Asunto<input name="asunto" type="text" id="asunto" size="30" /></label></p>
<p><label>Mensaje<br />
<textarea name="mensaje" cols="40" rows="8" id="mensaje"></textarea></label></p>
<p><input type="submit" name="submit" value="Enviar" /></p>
</form>


$nombre = $_POST["nombre"];
$remitente = $_POST["email"];
$destino= "[email protected]";
$asunto= $_POST["asunto"];
$mensaje= $_POST["mensaje"];

$mensaje = wordwrap($mensaje, 70);

$encabezados = "From: $remitente" . "\r\n" . "Reply-To: $remitente" . "\r\n" . 'Content-type: text/plain; charset=iso-8859-1';

$mandar = mail($destino, $asunto, $mensaje, $encabezados) or die ("Su mensaje no pudo ser enviado");
echo "Mensaje enviado";


if (isset($_POST['submit']) && $nombre != empty($nombre) && $asunto != empty($asunto)&& $remitente != empty($remitente) && $mensaje != empty($mensaje) )
{
echo $mandar;
} else {
echo 'Es obligatorio rellenar todos los campos';
}
?>

Me da error en la línea:

<form id="contacto" name="contacto" method="post" action="">

No logro que la variable $mandar sea considerada una variable y se ejecuta la función mail() aún cuando no existe el if.

Por último no se si es una barbaridad haber englobado el formulario también con las etiquetas php, pero es que me decía que el index de las variables $mensaje, $remitente, $asunto y $nombre no se detectaba o no existía.
  #10 (permalink)  
Antiguo 27/12/2010, 15:05
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 3 meses
Puntos: 51
Respuesta: Formulario y código php en la misma página

Cita:
Por último no se si es una barbaridad haber englobado el formulario también con las etiquetas php, pero es que me decía que el index de las variables $mensaje, $remitente, $asunto y $nombre no se detectaba o no existía.
Si lo es jaja, ese código no te va a funcionar.
  #11 (permalink)  
Antiguo 27/12/2010, 15:07
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 3 meses
Puntos: 51
Respuesta: Formulario y código php en la misma página

Código PHP:
Ver original
  1. if (isset($_POST['submit']) && $nombre != empty($nombre) && $asunto != empty($asunto)&& $remitente != empty($remitente) && $mensaje != empty($mensaje) )
  2. {
  3. echo $mandar;
  4. } else {
  5. echo 'Es obligatorio rellenar todos los campos';
  6. }

Acá tenés un error de que se juntan los símbolos && con parte del código, además hacer un echo de una variable booleana no tiene mucho sentido.
  #12 (permalink)  
Antiguo 27/12/2010, 15:09
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

Cita:
Iniciado por walterdevel Ver Mensaje
Si lo es jaja, ese código no te va a funcionar.
Ok pero es que me da este error.

Notice: Undefined index: nombre in C:\wamp\www\contacto.php on line 18
Notice: Undefined index: email in C:\wamp\www\contacto.php on line 19
Notice: Undefined index: asunto in C:\wamp\www\contacto.php on line 21
Notice: Undefined index: mensaje in C:\wamp\www\contacto.php on line 22

Vamos que el $_POST['campo'] no recoge lo que se introduce en el formulario.

¿Sabes porqué pasa esto o que se puede hacer para evitarlo?

walterdevel ya corregí la bestialidad de las etiquetas php englobando el formulario y evidentemente que no tiene sentido el else "Es obligatorio rellenar todos los campos" porque aparece sin tocar nada jaja y en el action="" ando perdido no se si corresponde poner formulario.php.
  #13 (permalink)  
Antiguo 27/12/2010, 15:13
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 3 meses
Puntos: 51
Respuesta: Formulario y código php en la misma página

Debería ser algo así:

Código PHP:
<?php



if (isset($_POST['submit']) && !empty($_POST["nombre"]) && !empty($_POST["asunto"]) && !empty($_POST["remitente"]) && !empty($_POST["mensaje"]) )
{
$nombre $_POST["nombre"];
$remitente $_POST["email"];
$destino"[email protected]";
$asunto$_POST["asunto"];
$mensaje$_POST["mensaje"];

$mensaje wordwrap($mensaje70);

$encabezados "From: $remitente" "\r\n" "Reply-To: $remitente" "\r\n" 'Content-type: text/plain; charset=iso-8859-1';

if( 
mail($destino$asunto$mensaje$encabezados) ){
echo 
"Mensaje enviado";
} else {
echo 
'No se ha enviado';
}
}
?>
Código HTML:
Ver original
  1. <form id="contacto" name="contacto" method="post" action="">
  2. <p><label>Nombre<input name="nombre" type="text" id="nombre" size="30" /></label></p>
  3. <p><label>Email<input name="email" type="text" id="email" size="30" /></label></p>
  4. <p><label>Asunto<input name="asunto" type="text" id="asunto" size="30" /></label></p>
  5. <p><label>Mensaje<br />
  6. <textarea name="mensaje" cols="40" rows="8" id="mensaje"></textarea></label></p>
  7. <p><input type="submit" name="submit" value="Enviar" /></p>
  8. </form>

Última edición por walterdevel; 27/12/2010 a las 15:17 Razón: Error......
  #14 (permalink)  
Antiguo 27/12/2010, 15:23
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

Cita:
Iniciado por walterdevel Ver Mensaje
Debería ser algo así:

Código PHP:
<?php



if (isset($_POST['submit']) && !empty($_POST["nombre"]) && !empty($_POST["asunto"]) && !empty($_POST["remitente"]) && !empty($_POST["mensaje"]) )
{
$nombre $_POST["nombre"];
$remitente $_POST["email"];
$destino"[email protected]";
$asunto$_POST["asunto"];
$mensaje$_POST["mensaje"];

$mensaje wordwrap($mensaje70);

$encabezados "From: $remitente" "\r\n" "Reply-To: $remitente" "\r\n" 'Content-type: text/plain; charset=iso-8859-1';

if( 
mail($destino$asunto$mensaje$encabezados) ){
echo 
"Mensaje enviado";
} else {
echo 
'No se ha enviado';
}
}
?>
Código HTML:
Ver original
  1. <form id="contacto" name="contacto" method="post" action="">
  2. <p><label>Nombre<input name="nombre" type="text" id="nombre" size="30" /></label></p>
  3. <p><label>Email<input name="email" type="text" id="email" size="30" /></label></p>
  4. <p><label>Asunto<input name="asunto" type="text" id="asunto" size="30" /></label></p>
  5. <p><label>Mensaje<br />
  6. <textarea name="mensaje" cols="40" rows="8" id="mensaje"></textarea></label></p>
  7. <p><input type="submit" name="submit" value="Enviar" /></p>
  8. </form>
Hey muchas gracias es que tanto código junto me empezaba a marear.

Creo que en el código que has puesto hay algo que falla y podría ser el otrogarle a la variable $mandar ese código, cuando tal vez, debido a que va dentro de un if, podría ir sin variable ya que su ejecución sería condicional.

¿Puede ser?

De todas formas muchísimas gracias.
  #15 (permalink)  
Antiguo 27/12/2010, 15:26
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 3 meses
Puntos: 51
Respuesta: Formulario y código php en la misma página

Pega el error así te podremos ayudar mejor. De tu código elimine el $mandar ya que con el if devolverá verdadero si envió y falso si no. También saqué el mensaje de verificación para cuando los campos están vacíos.
  #16 (permalink)  
Antiguo 27/12/2010, 15:31
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

Cita:
Iniciado por walterdevel Ver Mensaje
Pega el error así te podremos ayudar mejor. De tu código elimine el $mandar ya que con el if devolverá verdadero si envió y falso si no. También saqué el mensaje de verificación para cuando los campos están vacíos.
Cita:
Iniciado por walterdevel Ver Mensaje
Debería ser algo así:

Código PHP:
<?php



if (isset($_POST['submit']) && !empty($_POST["nombre"]) && !empty($_POST["asunto"]) && !empty($_POST["remitente"]) && !empty($_POST["mensaje"]) )
{
$nombre $_POST["nombre"];
$remitente $_POST["email"];
$destino"[email protected]";
$asunto$_POST["asunto"];
$mensaje$_POST["mensaje"];

$mensaje wordwrap($mensaje70);

$encabezados "From: $remitente" "\r\n" "Reply-To: $remitente" "\r\n" 'Content-type: text/plain; charset=iso-8859-1';

[
B]mail($destino$asunto$mensaje$encabezados)[/B]

if( 
mail($destino$asunto$mensaje$encabezados) ){
echo 
"Mensaje enviado";
} else {
echo 
'No se ha enviado';
}
}
?>
Creo que podría ser añadiéndole ese detalle en negrita que antes pusiste.

Lo pruebo y te comento.
  #17 (permalink)  
Antiguo 27/12/2010, 15:51
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

Vale utilizando el código que me has puesto así, tal cual:

Cita:
<?php
if (isset($_POST['submit']) && !empty($_POST["nombre"]) && !empty($_POST["asunto"]) && !empty($_POST["remitente"]) && !empty($_POST["mensaje"]) )
{
$nombre = $_POST["nombre"];
$remitente = $_POST["email"];
$destino= "[email protected]";
$asunto= $_POST["asunto"];
$mensaje= $_POST["mensaje"];

$mensaje = wordwrap($mensaje, 70);

$encabezados = "From: $remitente" . "\r\n" . "Reply-To: $remitente" . "\r\n" . 'Content-type: text/plain; charset=iso-8859-1';

if( mail($destino, $asunto, $mensaje, $encabezados) ){
echo "Mensaje enviado";
} else {
echo 'No se ha enviado';
}
}
?>
Así no funciona al intentar enviar. Sin embargo me resulta extraño que un if contenga dentro de si un if else, no sabía que se podía hacer eso.

Haciendo una modificación y haciendo primero un if y luego el if else modifiqué un poquito para dejarlo así:

Cita:
<?php
if (isset($_POST['submit']) && !empty($_POST["nombre"]) && !empty($_POST["asunto"]) && !empty($_POST["remitente"]) && !empty($_POST["mensaje"]) )
{
$nombre = $_POST["nombre"];
$remitente = $_POST["email"];
$destino= "[email protected]";
$asunto= $_POST["asunto"];
$mensaje= $_POST["mensaje"];

$mensaje = wordwrap($mensaje, 70);

$encabezados = "From: $remitente" . "\r\n" . "Reply-To: $remitente" . "\r\n" . 'Content-type: text/plain; charset=iso-8859-1';

mail($destino, $asunto, $mensaje, $encabezados);
}

if( mail($destino, $asunto, $mensaje, $encabezados) ){
echo "Mensaje enviado";
} else {
echo 'No se ha enviado';
}
?>
De esta ultima forma al cargar la página recibo los errores:

Notice: Undefined variable: destino in C:\wamp\www\contacto.php on line 34
Notice: Undefined variable: asunto in C:\wamp\www\contacto.php on line 34
Notice: Undefined variable: mensaje in C:\wamp\www\contacto.php on line 34
Notice: Undefined variable: encabezados in C:\wamp\www\contacto.php on line 34

Warning: mail() [function.mail]: SMTP server response: 503 in C:\wamp\www\contacto.php on line 34

No se ha enviado
  #18 (permalink)  
Antiguo 27/12/2010, 15:53
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 3 meses
Puntos: 51
Respuesta: Formulario y código php en la misma página

Si haces lo que hiciste, te dará error si nada viene por $_POST, por eso anidé el if dentro.
  #19 (permalink)  
Antiguo 27/12/2010, 15:57
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

Cita:
Iniciado por walterdevel Ver Mensaje
Si haces lo que hiciste, te dará error si nada viene por $_POST, por eso anidé el if dentro.
Sí ok, ya entiendo. ¿Pero donde se envía el mail en el código que pusiste?
  #20 (permalink)  
Antiguo 27/12/2010, 16:00
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 3 meses
Puntos: 51
Respuesta: Formulario y código php en la misma página

Cita:
Iniciado por Gambinoh Ver Mensaje
Sí ok, ya entiendo. ¿Pero donde se envía el mail en el código que pusiste?
Código PHP:
if( mail($destino$asunto$mensaje$encabezados) ){ 
  #21 (permalink)  
Antiguo 27/12/2010, 16:20
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

Cita:
Iniciado por walterdevel Ver Mensaje
Código PHP:
if( mail($destino$asunto$mensaje$encabezados) ){ 
Vaya walterdevel :( con ese código tal y como está no me da ni error ni me manda el mensaje ni cambia nada al darle enviar.

¿Puede ser que el action tenga un valor?

De veras que no lo comprendo.
  #22 (permalink)  
Antiguo 27/12/2010, 16:24
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 3 meses
Puntos: 51
Respuesta: Formulario y código php en la misma página

Agrega un print_r($_POST); antes de $nombre = $_POST["nombre"]; y dime que imprime, igualmente tienes un problema con el smtp aparentemente:

Cita:
Warning: mail() [function.mail]: SMTP server response: 503 in C:\wamp\www\contacto.php on line 34
  #23 (permalink)  
Antiguo 27/12/2010, 16:35
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

Añadiendo print_r($_POST); $nombre = $_POST["nombre"]; y recargando la página no me sale nada.

Con respecto al SMTP no debería pasar nada, para testear uso minirelay y yopmail.

La página se recarga y se queda con el formulario vacio.
  #24 (permalink)  
Antiguo 27/12/2010, 16:37
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 3 meses
Puntos: 51
Respuesta: Formulario y código php en la misma página

Debes enviar el form con datos correctos para ver el resultado del print_r
  #25 (permalink)  
Antiguo 27/12/2010, 16:41
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

Cita:
Iniciado por walterdevel Ver Mensaje
Debes enviar el form con datos correctos para ver el resultado del print_r
Antes con el formulario en una hoja y el código php en la otra enviaba el mensaje con el asunto y la cabecera a un correo web real que es yopmail. Usando como servidor en local minirelay.

Lo que pasa es que con el código que pusiste la pagina ni siquiera da errores al pusar enviar solo se recarga. ¿Podrías probarla tu en tu localhost para saber si es alguna configuración mía?
  #26 (permalink)  
Antiguo 27/12/2010, 16:44
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 3 meses
Puntos: 51
Respuesta: Formulario y código php en la misma página

Agrega esto al principio del script:

Código PHP:
Ver original
  1. <?php
  2. if(!empty($_POST)){
  3.  print_r($_POST);
  4. } else {
  5.  echo 'nada ha sido enviado';
  6. }
  7. ?>

No puedo probarlo, no tengo php instalado en esta pc.
  #27 (permalink)  
Antiguo 27/12/2010, 19:31
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

Cita:
Iniciado por walterdevel Ver Mensaje
Agrega esto al principio del script:

Código PHP:
Ver original
  1. <?php
  2. if(!empty($_POST)){
  3.  print_r($_POST);
  4. } else {
  5.  echo 'nada ha sido enviado';
  6. }
  7. ?>

No puedo probarlo, no tengo php instalado en esta pc.
Cuando se carga la página en localhost, automáticamente aparece el mensaje nada ha sido enviado. Cuando se le da al submit enviar aparece este array:

Array ( [nombre] => Nombre [email] => [email protected] [asunto] => Prueba [mensaje] => Esto es una prueba [submit] => Enviar )

Con lo cual es evidente que $_POST recoje los datos del formulario y el error está en la instrucción enviar ya que los campos vacios sí que son detectados.

De todas maneras no quiero tampoco abusar de tu amabilidad, mañana me dedicaré a encontrar soluciones y al menos postearé alguna en la línea que has planteado.


Gracias.
  #28 (permalink)  
Antiguo 27/12/2010, 20:54
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

A ver de momento tenemos esto y funcionando, es decir que envía mensajes con éxito apareciendo la frase "Mensaje enviado" y sin ningún fallo de entrada.

Como soy muy bestia se me ocurrió como método para anular un mail() suprimir el elemento básico de su construcción la variable $To. Con lo cual si no se rellena ningún campo aparece "Mensaje no enviado".

Más un pedazo de Warning: mail() [function.mail]: SMTP server response...

Bién la cuestión es que esto es lo único que se me ha ocurrido. Aunque hay otra manera. Si en lugar de suprimir el $To (bueno en mi caso $destino) se cambia por un correo que no existe o se "mata" a la propia función mail de alguna manera sumilar a null si es que se puede (no tengo ni idea) ya se evitaría el warning y se quedaría todo en el mensaje "Mensaje no enviado".

Así que este tema esta casi arreglado.

No se que me ha pasado que no he pensado un poco más con la lógica y me he puesto a hacer pruebas sin pensar.

Cita:
<?php
if (isset($_POST['submit']))
{

$nombre = $_POST["nombre"];
$remitente = $_POST["email"];
$asunto= $_POST["asunto"];
$mensaje= $_POST["mensaje"];

$mensaje = wordwrap($mensaje, 70);

$encabezados = "From: $remitente" . "\r\n" . "Reply-To: $remitente" . "\r\n" . 'Content-type: text/plain; charset=iso-8859-1';

if(empty($remitente)){
$destino = null;
} elseif (empty($mensaje)){
$destino = null;
} elseif (empty($asunto)) {
$destino = null;
} elseif (empty($nombre)) {
$destino = null;
} else {
$destino= "[email protected]";
}

mail($destino, $asunto, $mensaje, $encabezados) or die ("Mensaje no enviado");

echo "Mensaje enviado";
}
?>
En todo caso muchas gracias walterdevel, porque si no me hubieras respondido dandome pistas y resolviendo las cagadas que yo hacía, me habría rendido antes de llegar a esta solución.
  #29 (permalink)  
Antiguo 28/12/2010, 11:03
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Formulario y código php en la misma página

Bueno arreglado usando die();

Ahora les queda a los que saben de PHP responderme si es una barbaridad o más o menos está bién la cosa. Yo supuse que así no tendría porqué estar mal.

<?php
if (isset($_POST['submit']))
{

$nombre = $_POST["nombre"];
$remitente = $_POST["email"];
$asunto= $_POST["asunto"];
$mensaje= $_POST["mensaje"];

$mensaje = wordwrap($mensaje, 70);

$encabezados = "From: $remitente" . "\r\n" . "Reply-To: $remitente" . "\r\n" . 'Content-type: text/plain; charset=iso-8859-1';

if(empty($remitente)){
die();
} elseif (empty($mensaje)){
die();
} elseif (empty($asunto)) {
die();
} elseif (empty($nombre)) {
die();
} else {
$destino = "[email protected]";
}

mail($destino, $asunto, $mensaje, $encabezados) or die ("Mensaje no enviado");

echo "Mensaje enviado";
}
?>

Acepto sugerencias y modificaciones o si hay algún error grave en el uso también. Por ejemplo si algo debería anteceder a $_POST, etc...
  #30 (permalink)  
Antiguo 28/12/2010, 11:09
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Formulario y código php en la misma página

Saludos

Estas son solo algunas sugerencias:

1. Ese tipo de validaciones de que si el campo esta vacio por lo comun se realiza desde el cliente es decir con javascript.
2. Si lo manejas con die(); no quedaría tan bien que digamos ya que el usuario le aparecerá una pantalla en blanco pero como tal no sabrá por que fue el error es necesario mostrar algún mensaje de alerta y volver al formulario.
__________________
:.:Nano.:: @nano_hard - Retornando al foro

Etiquetas: formulario
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 17:06.