elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Problema con Formulario PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con Formulario PHP  (Leído 4,092 veces)
LordBlackRed

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Problema con Formulario PHP
« en: 3 Agosto 2010, 16:00 pm »

Buenas nenas y nenazillas!!! Tengo una "pequeña" duda, y estoy ya algo rallado de tanto intentarlo así que he decidido ponerla aquí para ver si me podéis echar un cableee...

El caso es que he puesto un formulario en mi web, con servidor y tal, y quiero poner para que me lo envien a un e-mail cuando pincho en "enviar" (hasta ahí perfe), me lo envía y tal como quiero, la pega... que aunque actualice la web, aunque abra esa web por primera vez ME LO ENVIA DE NUEVO, aunque se borren los campos de texto automáticamente tras enviarlos, pero se almacenan temporalmente y me vuelve a enviar el correo... He intentado controlarlo con javascript con una variable booleana pero nada... me lo controla peor se envía de todas formas (puede ser que el problema esté en el tipo de botón del "form" el "submit"?

No sé, os pego el código a ver qué opináis...

Código:
   //Aquí el formulario HTML
<form action="?" method=post>
    <td height="261">
    Formulario de Contacto:<BR />
    <b>Nombre:</b><input type="text" name="nombre" size="15" maxlength="70">
    <BR>
<b>E-Mail:</b>  <input type="text" name="email" size="18" maxlength="100">
<BR />
    <img src="carta.gif" width="130" height="117" />
</td>
<td><b>Teléfono:</b><input type="text" name="telefono" size="15" maxlength="50">
<BR>
<b>Comentario:</b>
<BR>
<textarea name="coment" rows="7" cols="30"></textarea>
<BR>

<BR>
<input type="submit" name="enviar" value="Enviar" onclick="enviarDatos();">

<input type="reset" name ="reset" value="Borrar">

</form>
//Aquí el javascript con el que he intentado controlarlo en vano y dentor el php
<SCRIPT LANGUAGE="javascript">

function enviarDatos(){

var entrar = confirm("¿De verdad desea enviar el formulario?")

if ( !entrar ){
self.close()}
else{
alert(entrar);
<?php
///////Configuración/////
$mail_destinatario = 'rafablack1988@hotmail.com';
///////Fin configuración//

if (isset ($_POST['enviar'])) {
$headers .= "From: ".$_POST['email']. "rn";
if ( mail ($mail_destinatario, $_POST['asunto'], "Nombre: ".$_POST['nombre']. "\nTeléfono: ".$_POST['telefono']. "\nE-Mail: ".stripcslashes ($_POST['email'])."\n Mensaje : ".stripcslashes ($_POST['coment']), $headers )) ;

}


?>
entrar=false;
}

}
</SCRIPT>



En línea

pisagatos


Desconectado Desconectado

Mensajes: 1.771



Ver Perfil WWW
Re: Problema con Formulario PHP
« Respuesta #1 en: 4 Agosto 2010, 01:06 am »

Buenas nenitaa :¬¬

A ver si te entendido bien, el caso es que te envía ocho mil quinientos correos siempre que entran a la página, cuando recargan... etc etc

Mira a ver si te sirve esto...

Código
  1. <?php
  2.  
  3. $mail_destinatario = 'rafablack1988@hotmail.com';
  4.  
  5. $asunto = $_POST['asunto'];
  6. $nombre = $_POST['nombre'];
  7. $telefono = $_POST['telefono'];
  8. $email = $_POST['email'];
  9. $mensaje = $_POST['coment'];
  10. $c = $_POST['c'];
  11.  
  12. $headers .= "From: ".$email. "rn";
  13.  
  14. if($c==1)
  15. {
  16. if(mail($mail_destinatario, $asunto, "Nombre: ".$nombre. "\nTeléfono: ".$telefono. "\nE-Mail: ".stripcslashes ($email)."\n Mensaje : ".stripcslashes ($mensaje), $headers))
  17. {
  18. echo "Mail enviado correctamente";
  19. }
  20. }
  21. ?>
  22. <script type="text/javascript">
  23. function enviarDatos()
  24. {
  25. if(confirm("¿De verdad desea enviar el formulario?"))
  26. {
  27. document.getElementById('formulario').submit();
  28. }
  29. return false;
  30. }
  31. </script>
  32. <form action="" method="post" id="formulario">
  33.  Formulario de Contacto: <BR />
  34.  <b>Nombre:</b>
  35.  <input type="text" name="nombre" size="15" maxlength="70">
  36.  <BR>
  37.  <b>E-Mail:</b>
  38.  <input type="text" name="email" size="18" maxlength="100">
  39.  <BR />
  40. <b>Teléfono:</b>
  41.  <input type="text" name="telefono" size="15" maxlength="50">
  42.  <BR>
  43.  <b>Comentario:</b> <BR>
  44.  <textarea name="coment" rows="7" cols="30"></textarea>
  45.  <input name="c" type="hidden" value="1">
  46.  <BR>
  47.  <BR>
  48.  <input type="submit" name="enviar" value="Enviar" onclick="enviarDatos(); return false;">
  49.  <input type="reset" name ="reset" value="Borrar">
  50. </form>

Para evitar que cuando recarguen la página te lleguen mil quinientos correos, en el action del formulario, pon otra página, que no sea la del propio formulario que recoja los datos y los envie, y así evitas eso.

Ahm!! Un consejillo, por dios y por la virgen, tabula y pon bien el código, con los tags en minúscula, tabulado, todo bien cerrado, con sus comillas y esas cosas, que luego se pueda leer bien.


En línea

LordBlackRed

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Problema con Formulario PHP
« Respuesta #2 en: 4 Agosto 2010, 11:05 am »

Muchas gracias por responder pisagatos :D, me has servido de gran ayuda, la pega que me sigue pasando... :( pero menos y ahora está mucho mejor, a ver si sabes, te cuento.

Envío el formulario, me sale bien, y ahora si ACTUALIZO, me sale el típico mensaje del navegador (tanto en firefox como en explorer) de que para actualizar la página tiene que enviar datos... le doy a que si y me lo vuelve a enviar el formulario... en firefox una vez que se ha actualizado UNA vez ya no me lo vuelve a hacer, y en explorer indefinidamente... la gracia que tengo un enlace(el mismo que va a ese apartado de la página) que si pincho ahí en vez de actualizar no me lo vuelve a enviar y me va perfe... jaja

Me supongo que el echo de "actualizar" actualiza inclusive el envío del formulario..., lo que podría poner para que en cuantito se envío el formulario, me cargue d enuevo ese apartado o la web para que no pase ese problema... o tú que crees?? no sé... es un poco "chapuza" pero creo que hace el apaño jaja

gracias y saludetes!!!
En línea

pisagatos


Desconectado Desconectado

Mensajes: 1.771



Ver Perfil WWW
Re: Problema con Formulario PHP
« Respuesta #3 en: 4 Agosto 2010, 12:21 pm »

Nass!!  :D

Citar
Me supongo que el echo de "actualizar" actualiza inclusive el envío del formulario..., lo que podría poner para que en cuantito se envío el formulario, me cargue d enuevo ese apartado o la web para que no pase ese problema... o tú que crees?? no sé... es un poco "chapuza" pero creo que hace el apaño jaja

Es una chapuzilla si...  :silbar: lo mejor es que tengas dos páginas, una que envía el mail y otra que tenga el formulario en sí... a ver si me explico...

formulario.php (Supongamos que se llama así)
Código
  1. <?
  2. $m = $_GET['m'];
  3. switch($m)
  4. {
  5.  case 1: echo "E-mail enviado correctamente";
  6.  break;
  7.  
  8.  case 2 : echo "Ha ocurrido un error. Por favor intentelo de nuevo más tarde."
  9.  break;
  10. }
  11. ?>
  12. <script type="text/javascript">
  13. function enviarDatos()
  14. {
  15. if(confirm("¿De verdad desea enviar el formulario?"))
  16. {
  17. document.getElementById('formulario').submit();
  18. }
  19. return false;
  20. }
  21. </script>
  22. <form action="enviarMail.php" method="post" id="formulario">
  23.  Formulario de Contacto: <BR />
  24.  <b>Nombre:</b>
  25.  <input type="text" name="nombre" size="15" maxlength="70">
  26.  <BR>
  27.  <b>E-Mail:</b>
  28.  <input type="text" name="email" size="18" maxlength="100">
  29.  <BR />
  30. <b>Teléfono:</b>
  31.  <input type="text" name="telefono" size="15" maxlength="50">
  32.  <BR>
  33.  <b>Comentario:</b> <BR>
  34.  <textarea name="coment" rows="7" cols="30"></textarea>
  35.  <input name="c" type="hidden" value="1">
  36.  <BR>
  37.  <BR>
  38.  <input type="submit" name="enviar" value="Enviar" onclick="enviarDatos(); return false;">
  39.  <input type="reset" name ="reset" value="Borrar">
  40. </form>

enviarMail.php
Código
  1. <?php
  2.  
  3. $mail_destinatario = 'xxxxxxxx@hotmail.com';
  4.  
  5. $asunto = $_POST['asunto'];
  6. $nombre = $_POST['nombre'];
  7. $telefono = $_POST['telefono'];
  8. $email = $_POST['email'];
  9. $mensaje = $_POST['coment'];
  10. $c = $_POST['c'];
  11.  
  12. $headers .= "From: ".$email. "rn";
  13.  
  14. if($c==1)
  15. {
  16. if(mail($mail_destinatario, $asunto, "Nombre: ".$nombre. "\nTeléfono: ".$telefono. "\nE-Mail: ".stripcslashes ($email)."\n Mensaje : ".stripcslashes ($mensaje), $headers))
  17. {
  18. header("Location: formulario.php?m=1");
  19.  
  20. }
  21.        else
  22.        {
  23.                header("Location: formulario.php?m=2")
  24.         }
  25. }
  26. ?>

Y así evitas lo que quieres de que al recargar la página se vuelvan a enviar los datos.

Tienes dos páginas, el formulario envia los datos a la otra, y si se envian los datos correctamente redirige a la página origen (formulario.php) que muestra que se ha enviado correctamente.

En línea

LordBlackRed

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Problema con Formulario PHP
« Respuesta #4 en: 5 Agosto 2010, 00:59 am »

Muchas gracias por responder, me estás sirviendo de mucha ayuda :D

Pero no va jaja, no sé si tú lo has probado pero a mí no me va, me sale éste error.

Warning: Cannot modify header information - headers already sent by (output started at /home/cojorosa/public_html/enviarMail.php:7) in /home/cojorosa/public_html/enviarMail.php on line 24

Es problema del servidor? (esa es la 2º página, la de enviarMail.php) es que no lo entiendo... en teoría te lo envía (aunque no llega a enviármelo) pero a la función

   if(mail($mail_destinatario, $asunto, "Nombre: ".$nombre. "\nTeléfono: ".$telefono. "\nE-Mail: ".stripcslashes ($email)."\n Mensaje : ".stripcslashes ($mensaje), $headers))
   {
            //Aquí si llega
      header("Location: formulario.php?m=1");
 
   }

Pero ni vuelve a la página anterior ni se envía el e-mail, aunque no entiendo el porqué... en teoría debe enviarlo... vi también que cambiaste un poco la función "mail()", pero vamos probé la anteior y tampoco va así así que dudo que sea ese el problema... ah y tenías 2 puntos y comas por ahí olvidados así que si te fijas no, no es ese el problema xD

Gracias de nuevo... a ver si sabes qué tontería puede ser....
En línea

mokoMonster


Desconectado Desconectado

Mensajes: 301


<? ...


Ver Perfil
Re: Problema con Formulario PHP
« Respuesta #5 en: 5 Agosto 2010, 20:20 pm »

Pon todo el codigo  :P
En línea

"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange
LordBlackRed

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Problema con Formulario PHP
« Respuesta #6 en: 5 Agosto 2010, 20:52 pm »

Pon todo el codigo  :P

ok, aunque lo importante es lo que me dijo a mi pisagatos, peor vamos lo ponmgo todo con lso menús y tal...

//Página pontacto.php, que es donde están los formularios.

Código:
<!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>Contacto</title>
<link href="estilos.css" rel="stylesheet" type="text/css" />
<?
$m = $_GET['m'];
switch($m)
{
  case 1: echo "E-mail enviado correctamente";
  break;
 
  case 2 : echo "Ha ocurrido un error. Por favor intentelo de nuevo más tarde.";
  break;
}
?>
<script type="text/javascript">
function enviarDatos()
{
if(confirm("¿De verdad desea enviar el formulario?"))
{
document.getElementById('formulario').submit();
}
return false;
}
</script>
</head>
<body>
<div class="cuerpo">
<div class="logo"> <img src="BannerSI.jpg"> </div>
<!--Comienzo menú javascript-->
<div id="main">
  <div id="header">
    <div class="contenido">
      <ul id="nav">
        <li><a href="index.html">Inicio</a> </li>
        <li><a href="artesania.html">Artesanía</a> </li>
        <li><a href="contacto.php">Contacto</a> </li>
        <li><a href="tienda.html">Tienda</a>
          <ul>
            <li><a href="complementos.html">Complementos</a></li>
            <li><a href="cabezales.html">Cabezales</a></li>
            <li><a href="sombrereria.html">Sombrerería</a></li>
            <li><a href="monturas.html">Monturas</a></li>
            <li><a href="calzado.html">Calzado</a></li>
            <li><a href="carros.html">Carros</a></li>
            <li><a href="ropa.html">Ropa</a></li>
            <li><a href="enganches.html">Enganches</a></li>
            <li><a href="herraje.html">Herraje</a></li>
            <li><a href="accesorios.html">Accesorios de Limpieza</a></li>
          </ul>
        </li>
      </ul>
      <!--Fin menú javascript-->
      <div class="menu">
        <h3>Tienda</h3>
        <ul>
          <h4>
            <li><a href="complementos.html">Complementos</a> </li>
            <li><a href="cabezales.html">Cabezales</a></li>
            <li><a href="sombrereria.html">Sombrerería</a></li>
            <li><a href="monturas.html">Monturas</a></li>
            <li><a href="calzado.html">Calzado</a></li>
            <li><a href="carros.html">Carros</a></li>
            <li><a href="ropa.html">Ropa</a></li>
            <li><a href="enganches.html">Enganches</a></li>
            <li><a href="herraje.html">Herraje</a></li>
            <li><a href="accesorios.html">Accesorios de Limpieza</a></li>
          </h4>
        </ul>
        <h3>Información</h3>
        <ul>
          <h4>
            <li><a href="Historia.html">Historia</a></li>
            <li><a href="Localizanos.html">Localízanos</a></li>
          </h4>
        </ul>
        <BR />
        <h3>&nbsp;</h3>
      </div>
      <div class="tableContacto">
        <table width="534" height="443" border="0">
          <tr>
            <td width="228" height="176"><img src="telefono-antiguo.gif" width="200" height="159" /></td>
            <td width="296"><p>Si deseas pedir algún presupuesto de algún catálogo o un producto artesanal no dude en ponerse en contacto en: </p>
              <ul>
                <li>Pago las Minas, Camino Ancho, Portal 18. 11540, Sanlúcar de BDA. (Cádiz) </li>
                <li>Teléfono y Fax: 956 36 70 16</li>
                </p>
                <li>E-Mail: elcojorosa@live.com</li>
                </p>
              </ul></td>
          </tr>
          <tr>
            <td width="228"><form action="enviarMail.php" method="post" id="formulario">
                Formulario de Contacto: <BR />
                <b>Nombre:</b>
                <input type="text" name="nombre" size="15" maxlength="70">
                <BR>
                <b>E-Mail:</b>
                <input type="text" name="email" size="18" maxlength="100">
                <BR />
                <b>Teléfono:</b>
                <input type="text" name="telefono" size="15" maxlength="50">
                <BR>
                <b>Comentario:</b> <BR>
                <textarea name="coment" rows="7" cols="30"></textarea>
                <input name="c" type="hidden" value="1">
                <BR>
                <BR>
                <input type="submit" name="enviar" value="Enviar" onclick="enviarDatos(); return false;">
                <input type="reset" name ="reset" value="Borrar">
              </form></td>
          </tr>
        </table>
      </div>
    </div>
  </div>
</div>
<div class="copyRight">
  <p>El Cojo Rosa © - 2010 - Todos los Derechos Reservados. </p>
</div>
</body>
</html>

//Página enviarMail.php que es donde se envia el formulario

Código:
<!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>Documento sin título</title>
<link href="estilos.css" rel="stylesheet" type="text/css" />

</head>
<body>
<?php
 
$mail_destinatario = 'rafablack1988@hotmail.com';
 
$asunto = $_POST['asunto'];
$nombre = $_POST['nombre'];
$telefono = $_POST['telefono'];
$email = $_POST['email'];
$mensaje = $_POST['coment'];
$c = $_POST['c'];
 
$headers .= "From: ".$email. "rn";
 
if($c==1)
{
if(mail($mail_destinatario, $asunto, "Nombre: ".$nombre. "\nTeléfono: ".$telefono. "\nE-Mail: ".stripcslashes ($email)."\n Mensaje : ".stripcslashes ($mensaje), $headers))
{
header("Location: contacto.php?m=1");
 
}
        else
        {
                header("Location: contacto.php?m=2");
         }
}
?>
</body>
</html>
En línea

LordBlackRed

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Problema con Formulario PHP
« Respuesta #7 en: 5 Agosto 2010, 20:54 pm »

jo, no me sale con colores... :( xD pues eso, esas son las 2 páginas, y me sale el error que mencioné antes...a ver si sabes lo que es... graciassss :D
En línea

pisagatos


Desconectado Desconectado

Mensajes: 1.771



Ver Perfil WWW
Re: Problema con Formulario PHP
« Respuesta #8 en: 6 Agosto 2010, 04:32 am »

Lo sientuuu! Que con las prisas se me olvidaron los puntos y comas...  :silbar: En la segunda página, no pongas nada de body ni html ni nada, el php pelao.

Sé que te pueda sonar raro pero es así, el error que daba era porque no se pueden enviar cabeceras html si se ha enviado o mostrador ya algo anteriormente, en este caso el <html [...] tacata tacata (el tocho del código anterior al php). Tu piensa que PHP devuelve HTML nada más, que aunque tu veas el código al hacer la web, eso lo interpreta el servidor y devuelve HTML.

El archivo enviarMail.php quedaría así, tal y como te lo puse:
Código
  1. <?php
  2.  
  3. $mail_destinatario = 'xxxxxxxx@hotmail.com';
  4.  
  5. $asunto = $_POST['asunto'];
  6. $nombre = $_POST['nombre'];
  7. $telefono = $_POST['telefono'];
  8. $email = $_POST['email'];
  9. $mensaje = $_POST['coment'];
  10. $c = $_POST['c'];
  11.  
  12. $headers .= "From: ".$email. "rn";
  13.  
  14. if($c==1)
  15. {
  16. if(mail($mail_destinatario, $asunto, "Nombre: ".$nombre. "\nTeléfono: ".$telefono. "\nE-Mail: ".stripcslashes ($email)."\n Mensaje : ".stripcslashes ($mensaje), $headers))
  17. {
  18. header("Location: formulario.php?m=1");
  19.  
  20. }
  21.        else
  22.        {
  23.                header("Location: formulario.php?m=2")
  24.         }
  25. }
  26. ?>

P.S. para lo de los colores tienes que poner
[c0de=NOMBRE DEL LENGUAJE]CODIGO[/code] ya te pone esto del color xD Ej. [c0de=php]<?php echo "hola"; ?>[code]

* Cambia donde pone un cero 0, pon una o y listo! Es que no me deja escribir el código bien :D

« Última modificación: 6 Agosto 2010, 04:35 am por pisagatos » En línea

LordBlackRed

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Problema con Formulario PHP
« Respuesta #9 en: 6 Agosto 2010, 14:53 pm »

Eres un MALDITO CRACK, a partir de ahora te voy a poner un monolito en mi cuarto y una vela todas las noches xDDD

Gracias tío, te debo una :D ya me va perfe. Era esa tontería jaja
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con formulario HTM - PHP
PHP
kuka_18 8 3,603 Último mensaje 5 Agosto 2011, 09:11 am
por kuka_18
problema con mi formulario
PHP
estebanjd 9 3,474 Último mensaje 7 Noviembre 2011, 02:55 am
por Carluís
Problema con Formulario php
PHP
janisorna 4 2,381 Último mensaje 30 Diciembre 2011, 16:20 pm
por janisorna
Problema con formulario
Desarrollo Web
janisorna 3 2,058 Último mensaje 9 Septiembre 2013, 21:23 pm
por Shell Root
Problema con Formulario
PHP
Mechamon 4 2,915 Último mensaje 27 Septiembre 2017, 19:36 pm
por Mechamon
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines