Problema con Formulario PHP

Iniciado por LordBlackRed, 3 Agosto 2010, 16:00 PM

0 Miembros y 1 Visitante están viendo este tema.

LordBlackRed

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...

   //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>



pisagatos

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 (php) [Seleccionar]
<?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))
{
echo "Mail enviado correctamente";
}
}
?>

<script type="text/javascript">
function enviarDatos()
{
if(confirm("¿De verdad desea enviar el formulario?"))
{
document.getElementById('formulario').submit();
}
return false;
}
</script>
<form action="" 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>


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.

LordBlackRed

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!!!

pisagatos

Nass!!  :D

CitarMe 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 (php) [Seleccionar]

<?
$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>
<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>


enviarMail.php
Código (php) [Seleccionar]
<?php
 
$mail_destinatario 
'xxxxxxxx@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: formulario.php?m=1");

}
        else
        {
                
header("Location: formulario.php?m=2")
         }
}
?>


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.


LordBlackRed

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....

mokoMonster

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

LordBlackRed

Cita de: mokoMonster en  5 Agosto 2010, 20:20 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.

<!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

<!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>

LordBlackRed

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

pisagatos

#8
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 (php) [Seleccionar]
<?php
 
$mail_destinatario 
'xxxxxxxx@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: formulario.php?m=1");
 
}
        else
        {
                
header("Location: formulario.php?m=2")
         }
}
?>


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


LordBlackRed

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