Foros del Web » Programando para Internet » PHP »

Problema con formulario de contacto con suma

Estas en el tema de Problema con formulario de contacto con suma en el foro de PHP en Foros del Web. Hola a todos y feliz año nuevo. Hace mucho que no pasaba por el foro. Tengo problemas de salud y a veces estoy tonta perdida. ...
  #1 (permalink)  
Antiguo 02/01/2014, 19:19
Avatar de Asyut  
Fecha de Ingreso: febrero-2008
Mensajes: 18
Antigüedad: 16 años, 9 meses
Puntos: 0
Pregunta Problema con formulario de contacto con suma

Hola a todos y feliz año nuevo. Hace mucho que no pasaba por el foro. Tengo problemas de salud y a veces estoy tonta perdida. Tengo una web que hice estando ya mal y me colaron de todo a través de mi correo. Busque una posible solución y encontre un post que ofrecía un formulario con una suma. Me ha funcionado bien durante un tiempo, pero ahora me da problemas.

El post es este [URL="http://www.forosdelweb.com/f18/aporte-formulario-contactos-con-captcha-sencillo-649294/"]post[/URL]

Tengo un archivo formulario.php:

Código PHP:
<head>
Contenido del head
</head>

<body onload="MM_preloadImages('artistas2.jpg','movimientos2.jpg','estilos2.jpg','elementos2.jpg','musica2.jpg','vestuario2.jpg','beneficios2.jpg','formacion2.jpg','utilidades2.jpg','otros2.jpg','home2.png')">
<div id="Fondo">
  <div id="telefono">
    <center>
    </center>
  </div>
  <div id="Musica"><a href="index.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('botonhome','','home2.png',1)"></a><a href="index.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('botonhome','','home2.png',1)"><img src="home.png" alt="Inicio" name="botonhome" width="55" height="55" border="0" id="botonhome" /></a></div>
  
  <div id="Texto">
    <div align="center">
      <table width="100%" border="0" cellspacing="0">
        <tr>
          <td><p align="center"><b>Formulario de Contacto</b>
          <?php
// Creo los 2 numeros aleatorios
$num1 rand(1,9);
$num2 rand(1,9);
// Guardo los numero en una session para evitar se borren y luego sumarlos
// y compararlos con la respuesta en contactar.php
session_start();
$_SESSION['numero1'] = $num1;
$_SESSION['numero2'] = $num2;
?>
            <form name="form1" method="post" action="correo.php">
    <table width="100%" border="0" align="center" cellspacing="2" bordercolor="#660000" bgcolor="#EA6F84">
        <tr>
          <td><span class="Estilo9"></span></td>
          <td class="Estilo11">.</td>
          <td class="Estilo9"></td>
          <td class="Estilo9"></td>
          <td class="Estilo9"></td>
          <td class="Estilo9"></td>
          <td><span class="Estilo9"></span></td>
        </tr>
        <tr>
          <td width="1%"><span class="Estilo9"></span></td>
            <td width="10%" class="Estilo9">NOMBRE</td>

            <td width="29%" class="Estilo9"><input name="nombre" type="text" title="Nombre" size="30"></td>
            <td width="2%" class="Estilo9">&nbsp;</td>
            <td width="28%" class="Estilo9">APELLIDO</td>
            <td width="29%" class="Estilo9"><input name="apellido" type="text" title="Apellido" size="30"></td>
            <td width="1%"><span class="Estilo9"></span></td>
        </tr>
        
        <tr>
          <td width="1%"><span class="Estilo9"></span></td>
            <td width="10%" class="Estilo9">PAIS</td>

            <td width="29%" class="Estilo9"><input name="edad" type="text" title="Pais de residencia" size="30"></td>
            <td width="2%" class="Estilo9">&nbsp;</td>
            <td width="28%" class="Estilo9">NOMBRE ART&Iacute;STICO</td>
            <td width="29%" class="Estilo9"><input name="mote" type="text" title="Nombre artístico o de tu grupo" size="30"></td>
            <td width="1%"><span class="Estilo9"></span></td>
        </tr>
        <tr>
          <td><span class="Estilo9"></span></td>
            <td class="Estilo9"> E-MAIL</td>
            <td class="Estilo9"><input type="text" title="Tu dirección de correo electrónico" size="30" name="email"></td>
            <td class="Estilo9">&nbsp;</td>
            <td class="Estilo9">WEB O BLOG </td>
            <td class="Estilo9"><input type="text" title="Dirección de tu web si tienes" size="30" name="web"></td>
            <td><span class="Estilo9"></span></td>
        </tr>
        <tr>
          <td rowspan="2"><span class="Estilo9"></span></td>
            <td rowspan="2" class="Estilo9">MENSAJE</td>
            <td rowspan="2" class="Estilo9">
              <textarea id="mensaje" onkeyup="val=this.value; if (val.length > 800) { alert('Lo siento, has sobrepasado el limite de 800 caracteres'); this.value = val.substring(0,800); }  this.form.count.value=800-parseInt(this.value.length); " name="mensaje" rows="4" wrap="PHYSICAL" cols="23"></textarea>            </td>
            <td rowspan="2" class="Estilo9">&nbsp;</td>
            <td class="Estilo9">Cuanto suma <b><?php echo ($num1);?> </b>m&aacute;s <strong><?php echo ($num2);?> </strong> ?</td>
            <td class="Estilo9"><input name="respuesta" type="text" id="respuesta" value="0" size="2" maxlength="2" /></td>
            <td rowspan="2"><span class="Estilo9"></span></td>
        </tr>
        <tr>
          <td class="Estilo9"><div align="center">
              CARACTERES DISPONIBLES<br />
              <input name="count" disabled="disabled" value="800" size="5" />
            </div></td>
          <td class="Estilo9"><p align="right">
              <input name="submit" type="submit" title="Pulsa una vez para enviar el mensaje, y espera a la pantalla de confirmaci&oacute;n" value="Enviar" />
            </p>              </td>
        </tr>
        <tr>
          <td><span class="Estilo9"></span></td>
          <td class="Estilo11">.</td>
          <td class="Estilo9"></td>
          <td class="Estilo9"></td>
          <td class="Estilo9"></td>
          <td class="Estilo9"></td>
          <td><span class="Estilo9"></span></td>
        </tr>
    </table>
    </form></p></td>
        </tr>
      </table></p>
    </div>
  </div>
<div id="Pie"></div>
<div id="Menu1">contenido del menu1</div>
<div id="Menu2">contenido menu2</div>
</div>

</body>

</html>
y otro archivo correo.php:

Código PHP:
<?php
// Llamo los 2 numeros aleatorios creados con la session anteriormente en contactos.php
session_start();
$num1=$_SESSION['numero1']; 
$num2=$_SESSION['numero2']; 
// hago la suma de los 2 numeros aleatorios
$sumval $num1 $num2;
// Llamo la respuesta dada por el usuario a la pregunta de la suma de 2 numeros aleatorios
$numval=$HTTP_POST_VARS['respuesta']; 
// Hago la comparacion de la suma con la respuesta dada por el usuario
if ($sumval == $numval)
{
    
// Si es correcta hago el envio de correo por PHP
    // email para envio
    
$para  '[email protected]';
    
// cabeceras del mensaje
    
$cabeceras 'To: Mi Correo No.1 <[email protected]>' "\r\n";
    
$cabeceras .= 'From: Mi Correo No.2 <[email protected]>' "\r\n";
    
$cabeceras .= 'Cc: Mi Correo No.3 <[email protected]>' "\r\n";
    
$cabeceras .= 'Bcc: Mi Correo No.4 <[email protected]>';
    
// asunto del mensaje
    
$asunto 'Mensaje desde web asyut';
    
// cuerpo del mensaje
    
$mensaje ='Contactos Pagina Web' "\n\n";
    
$mensaje .='Fecha (Dia/Mes/Año): --> ' .date('d/m/Y') . "\n";
    
$mensaje .='Hora (Hora:Minutos:Segundos): --> ' .date('h:i:s A') . "\n\n";
    
$mensaje .='Datos del Contacto' "\n\n";
    
// Llamo los campos digitados en el formulario con $HTTP_POST_VARS['nombre del campo']
    
$mensaje .='Nombre : ' $HTTP_POST_VARS['nombre'] . "\n";
    
$mensaje .='Apellido : ' $HTTP_POST_VARS['apellido'] . "\n";
    
$mensaje .='Nombre artistico : ' $HTTP_POST_VARS['mote'] . "\n";
    
$mensaje .='Pais : ' $HTTP_POST_VARS['pais'] . "\n";
    
$mensaje .='Web : ' $HTTP_POST_VARS['web'] . "\n";
    
$mensaje .='E-mail : ' $HTTP_POST_VARS['email'] . "\n";
    
$mensaje .='Mensaje : ' $HTTP_POST_VARS['mensaje'] . "\n\n";
    
$mensaje .='Email ejecutado desde la Pagina Web ';
    
// Envio del mensaje con la funcion Mail de PHP
    
mail ($para$asunto$mensaje$cabeceras);
    
// Muestro en una ventana el mensaje de envio exitoso y redireccion a la pagina principal
    
echo('<script language="JavaScript" >');
    echo(
'alert("El mensaje fue enviado correctamente");');
    echo(
'location.replace("http://www.miweb.com")');
    echo(
'</script>');

else
{
    
// Muestro en una ventana el mensaje NO envio y redireccion a la pagina principal
    
echo('<script language="JavaScript" >');
    echo(
'alert("El mensaje NO fue enviado, compruebe la respuesta Anti-Spam");');
    echo(
'location.replace("http://www.miweb.com")');
    echo(
'</script>');
}
?>
El problema que tengo es que unas veces me sale que el mensaje no se ha enviado y otras me envía el mensaje 4 veces pero los campos con los datos me los envía vacios.

Alguién sería tan amable de ayudarme por favor, he hecho un montón de cambios pero no doy con el problema. Os ruego una explicación sencilla porque estoy que no me da la cabeza para nada.

Muchas gracias.

Última edición por Asyut; 02/01/2014 a las 19:27
  #2 (permalink)  
Antiguo 02/01/2014, 19:44
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Problema con formulario de contacto con suma

Hola, aparentemente todo está bien, aunque hay varias cosas que se pueden mejorar. Quizá me equivoque, pero creo que el problema del envío del mensaje de correo es por el servidor y no por tu script. Si pudieras, intenta ejecutarlo desde otro servidor, con eso descartarías el problema en tu script, que no lo veo.

Que te mejores, saludos.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 02/01/2014, 19:54
Avatar de CoriaWeb  
Fecha de Ingreso: septiembre-2012
Ubicación: Coria del Río - Sevilla
Mensajes: 1.795
Antigüedad: 12 años, 2 meses
Puntos: 130
Respuesta: Problema con formulario de contacto con suma

Prueba cambiando esto:

$numval=$HTTP_POST_VARS['respuesta'];

por esto:

$numval=$_POST['respuesta'];

Cambia en los campos todos los valores:

$HTTP_POST_VARS por $_POST

Tambien contacta con tu proveedor por si tiene la funcion mail de php desactivada.
__________________
Hosting de Calidad
Servidores Dedicados Administrados
CoriaWeb.hosting
  #4 (permalink)  
Antiguo 02/01/2014, 20:21
Avatar de Asyut  
Fecha de Ingreso: febrero-2008
Mensajes: 18
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problema con formulario de contacto con suma

Cita:
Iniciado por CoriaWeb Ver Mensaje
Prueba cambiando esto:

$numval=$HTTP_POST_VARS['respuesta'];

por esto:

$numval=$_POST['respuesta'];

Cambia en los campos todos los valores:

$HTTP_POST_VARS por $_POST

Tambien contacta con tu proveedor por si tiene la funcion mail de php desactivada.
Ya he cambiado lo que me has dicho, pero sigue dándome problemas, en esta ocasión me dice que no se ha enviado el mensaje. He enviado la consulta que me has dicho a mi proveedor, a ver que me contestan.

Cita:
Iniciado por Alexis88 Ver Mensaje
Hola, aparentemente todo está bien, aunque hay varias cosas que se pueden mejorar. Quizá me equivoque, pero creo que el problema del envío del mensaje de correo es por el servidor y no por tu script. Si pudieras, intenta ejecutarlo desde otro servidor, con eso descartarías el problema en tu script, que no lo veo.

Que te mejores, saludos.
No tengo otro servidor para hacer la comprobación.

Gracias a los dos por vuestra ayuda
  #5 (permalink)  
Antiguo 03/01/2014, 02:42
Avatar de CoriaWeb  
Fecha de Ingreso: septiembre-2012
Ubicación: Coria del Río - Sevilla
Mensajes: 1.795
Antigüedad: 12 años, 2 meses
Puntos: 130
Respuesta: Problema con formulario de contacto con suma

A ver vamos a probar una cosa, antes de:

if ($sumval == $numval)

pon esto:

echo "El valor de sumval es: ".$sumval."<br> Y el valor de numval es: ".$numval;

Y dime que es lo que te muestra
__________________
Hosting de Calidad
Servidores Dedicados Administrados
CoriaWeb.hosting

Última edición por CoriaWeb; 03/01/2014 a las 03:17
  #6 (permalink)  
Antiguo 03/01/2014, 20:46
Avatar de Asyut  
Fecha de Ingreso: febrero-2008
Mensajes: 18
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problema con formulario de contacto con suma

Por fin esta solucionado el tema. Gracias CoriaWeb por tus nuevas sugerencias pero no he llegado a probar lo que me has dicho porque se pusieron en contacto conmigo los chicos de mi proveedor y me dijeron que estaban realizando pruebas ellos, asi que les he dejado hacer sin molestarlos. Al parecer dicen que era problema del código y me lo han cambiado por otro. En lugar de llevar la suma lleva otro sistema de esos de no rellenar una casilla pero lo importante es que funciona bien y ya recibo correos. Os dejo el código que me han puesto por si puede ayudar a otras personas que se vean en mi misma situación y para satisfacer vuestra curiosidad dado que os habeis molestado en ayudarme. La verdad es que el servicio de programación no esta cubierto y me han ayudado desinteresadamente, han sido muy majos, igual que vosotros. En fin que millones de gracias.

formulario.php

Código PHP:
<head>
[
I]contenido del head[/I]
</
head>

<
body onload="MM_preloadImages('artistas2.jpg','movimientos2.jpg','estilos2.jpg','elementos2.jpg','musica2.jpg','vestuario2.jpg','beneficios2.jpg','formacion2.jpg','utilidades2.jpg','otros2.jpg','home2.png')">
<
div id="Fondo">
  <
div id="telefono">
    <
center>
    </
center>
  </
div>
  <
div id="Musica"><a href="index.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('botonhome','','home2.png',1)"></a><a href="index.html" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('botonhome','','home2.png',1)"><img src="home.png" alt="Inicio" name="botonhome" width="55" height="55" border="0" id="botonhome" /></a></div>
  
  <
div id="Texto">
    <
div align="center">
      <
table width="100%" border="0" cellspacing="0">
        <
tr>
          <
td><p align="center"><b>Formulario de Contacto</b>
            <
form name="form1" method="post" action="correo.php">
    <
table width="100%" border="0" align="center" cellspacing="2" bordercolor="#660000" bgcolor="#EA6F84">
        <
tr>
          <
td><span class="Estilo9"></span></td>
          <
td class="Estilo11">.</td>
          <
td class="Estilo9"></td>
          <
td class="Estilo9"></td>
          <
td class="Estilo9"></td>
          <
td class="Estilo9"></td>
          <
td><span class="Estilo9"></span></td>
        </
tr>
        <
tr>
          <
td width="1%"><span class="Estilo9"></span></td>
            <
td width="10%" class="Estilo9">NOMBRE</td>

            <
td width="29%" class="Estilo9"><input name="nombre" type="text" title="Nombre" size="30"></td>
            <
td width="2%" class="Estilo9">&nbsp;</td>
            <
td width="28%" class="Estilo9">APELLIDO</td>
            <
td width="29%" class="Estilo9"><input name="apellido" type="text" title="Apellido" size="30"></td>
            <
td width="1%"><span class="Estilo9"></span></td>
        </
tr>
        
        <
tr>
          <
td width="1%"><span class="Estilo9"></span></td>
            <
td width="10%" class="Estilo9">PAIS</td>

            <
td width="29%" class="Estilo9"><input name="pais" type="text" title="Pais de residencia" size="30"></td>
            <
td width="2%" class="Estilo9">&nbsp;</td>
            <
td width="28%" class="Estilo9">NOMBRE ART&Iacute;STICO</td>
            <
td width="29%" class="Estilo9"><input name="mote" type="text" title="Nombre artístico o de tu grupo" size="30"></td>
            <
td width="1%"><span class="Estilo9"></span></td>
        </
tr>
        <
tr>
          <
td><span class="Estilo9"></span></td>
            <
td class="Estilo9"E-MAIL</td>
            <
td class="Estilo9"><input type="text" title="Tu dirección de correo electrónico" size="30" name="email"></td>
            <
td class="Estilo9">&nbsp;</td>

            <
td class="Estilo9">WEB O BLOG </td>
            <
td class="Estilo9"><input type="text" title="Dirección de tu web si tienes" size="30" name="web"></td>
            <
td><span class="Estilo9"></span></td>
        </
tr>
        <
tr>
          <
td rowspan="2"><span class="Estilo9"></span></td>
            <
td rowspan="2" class="Estilo9">MENSAJE</td>
            <
td rowspan="2" class="Estilo9">
              <
textarea id="mensaje" onkeyup="val=this.value; if (val.length > 800) { alert('Lo siento, has sobrepasado el limite de 800 caracteres'); this.value = val.substring(0,800); }  this.form.count.value=800-parseInt(this.value.length); " name="mensaje" rows="4" wrap="PHYSICAL" cols="23"></textarea>            </td>
            <
td rowspan="2" class="Estilo9">&nbsp;</td>
            <
td class="Estilo9"><label for="verificacion" class="verif">Deja este campo vacío</label></td>
            <
td class="Estilo9"><input name="_captacha_" class="verif" type="text" id="_captacha_" value="" size="2" maxlength="2" /></td>
            <
td rowspan="2"><span class="Estilo9"></span></td>
        </
tr>
        <
tr>
          <
td class="Estilo9"><div align="center">
              
CARACTERES DISPONIBLES<br />
              <
input name="count" disabled="disabled" value="800" size="5" />
            </
div></td>
          <
td class="Estilo9"><p align="right">
              <
input name="submit" type="submit" title="Pulsa una vez para enviar el mensaje, y espera a la pantalla de confirmaci&oacute;n" value="Enviar" />
            </
p>              </td>
        </
tr>
        <
tr>
          <
td><span class="Estilo9"></span></td>
          <
td class="Estilo11">.</td>
          <
td class="Estilo9"></td>
          <
td class="Estilo9"></td>
          <
td class="Estilo9"></td>
          <
td class="Estilo9"></td>
          <
td><span class="Estilo9"></span></td>
        </
tr>
    </
table>
    </
form></p></td>
        </
tr>
      </
table></p>
    </
div>
  </
div>
<
div id="Pie"></div>
<
div id="Menu1">contenido menu1</div>
<
div id="Menu2">contenido menu2</div>
</
div>

</
body>

</
html
correo.php

Código PHP:
<?php
if (empty($_POST['_captcha_']))
{
    
// email para envio
    
$para  '[email protected]';
    
// cabeceras del mensaje
    
$cabeceras 'To: Mi Correo No.1 <[email protected]>' "\r\n";
    
$cabeceras .= 'From: Mi Correo No.2 <[email protected]>' "\r\n";
    
$cabeceras .= 'Cc: Mi Correo No.3 <[email protected]>' "\r\n";
    
$cabeceras .= 'Bcc: Mi Correo No.4 <[email protected]>';
    
// asunto del mensaje
    
$asunto 'Mensaje desde web asyut';
    
// cuerpo del mensaje
    
$mensaje ='Contactos Pagina Web' "\n\n";
    
$mensaje .='Fecha (Dia/Mes/Año): --> ' .date('d/m/Y') . "\n";
    
$mensaje .='Hora (Hora:Minutos:Segundos): --> ' .date('h:i:s A') . "\n\n";
    
$mensaje .='Datos del Contacto' "\n\n";
    
// Llamo los campos digitados en el formulario con $_POST['nombre del campo']
    
$mensaje .='Nombre : ' $_POST['nombre'] . "\n";
    
$mensaje .='Apellido : ' $_POST['apellido'] . "\n";
    
$mensaje .='Nombre artistico : ' $_POST['mote'] . "\n";
    
$mensaje .='Pais : ' .$_POST['pais'] . "\n";
    
$mensaje .='Web : ' $_POST['web'] . "\n";
    
$mensaje .='E-mail : ' $_POST['email'] . "\n";
    
$mensaje .='Mensaje : ' $_POST['mensaje'] . "\n\n";
    
$mensaje .='Email ejecutado desde la Pagina Web ';
    
// Envio del mensaje con la funcion Mail de PHP
    
mail ($para$asunto$mensaje$cabeceras) or die('Hola');
    
// Muestro en una ventana el mensaje de envio exitoso y redireccion a la pagina principal
    
echo('<script language="JavaScript" >');
    echo(
'alert("El mensaje fue enviado correctamente");');
    echo(
'location.replace("http://www.miweb.com")');
    echo(
'</script>');

else
{
    
// Muestro en una ventana el mensaje NO envio y redireccion a la pagina principal
    
echo('<script language="JavaScript" >');
    echo(
'alert("El mensaje NO fue enviado, compruebe la respuesta Anti-Spam");');
    echo(
'location.replace("http://www.miweb.com")');
    echo(
'</script>');
}
?>
Lo de ocultar el texto y la casilla lo he añadido yo, lo saqué del blog de pixelar.me y funciona bien.

Lo que si que no he conseguido solucionar y que con la solución que me han dado también estaba asi, es que me envian el mensaje 4 veces. He pensado que era por lo de las cabeceras, pero si quito alguna da problemas otra vez. No se si alguien sabría decirme como puedo hacer que solo me envie el mensaje una vez, ¿es necesario tener las 4 cabeceras por temas de que los robots puedan aprovecharlo?

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 22:25.