Comunidad de diseño web y desarrollo en internet online

Problema Formulario Envio Mail

Citar            
MensajeEscrito el 10 Oct 2007 12:31 pm
Hola, el caso es que hace unos dias que tengo problemas con el formulario de envio de email que tengo en una web, hasta ahora funcionaba perfectamente, pero de golpe comenzo a fallar, me puse en contacto con el servicio tecnico y me comentaron lo siguiente:

- Utilice la función smtp en vez de mail().
- Pasar las variables por POST en vez de por GET. El resultado final es el mismo, solo que con el método GET podemos ver los parámetros pasados ya que están codificados en la URL y por lo tanto un problema de seguridad.
- También que revise el php para dejarlo preparado para la versión php 5 y con register_globals en off.

De todo eso el cambiar el metodo POST en vez del GET que uso no creo que me de muchos problemas, pero la funcion smtp no la he usado nunca y lo de modificar el php para no usar el register_globals tampoco tengo mucha idea de como hacerlo... os dejo el codigo que empleo actualmente y si podeis me hechais un cable, o almenos me guiais un poco...

Codigo HTML:

Código :

<FORM METHOD="GET" ACTION="enviacorreo.php">
   <b>Nombre:</b> &nbsp; <INPUT TYPE="text" NAME="nombre" SIZE="32">
   <b>Dirección:</b> &nbsp; <INPUT TYPE="text" NAME="direccion" SIZE="65">
   <b>Población:</b> &nbsp; <INPUT TYPE="text" NAME="poblacion" SIZE="32">
   <b>E-mail:</b> &nbsp; <INPUT TYPE="text" NAME="email" SIZE="51">
   <b>Teléfono:</b> &nbsp; <INPUT TYPE="text" NAME="telf" SIZE="32">
   <b>Móvil:</b> &nbsp; <INPUT TYPE="text" NAME="movil" SIZE="32">
   <b>Comentarios:</b><br>
   <TEXTAREA NAME="comentarios" ROWS="10" COLS="66" WRAP="soft"></TEXTAREA>
   <br>
   <INPUT TYPE="submit" VALUE="ENVIAR">
   <INPUT TYPE="reset" VALUE="LIMPIAR">
</FORM>


Codigo PHP:

Código :

<?
/* aqui se incializan variables de PHP */
if (phpversion() >= "4.2.0") {
        if ( ini_get('register_globals') != 1 ) {
                $supers = array('_REQUEST',
                                '_ENV',
                                '_SERVER',
                                '_POST',
                                '_GET',
                                '_COOKIE',
                                '_SESSION',
                                '_FILES',
                                '_GLOBALS' );
                                                                                
                foreach( $supers as $__s) {
                        if ( (isset($$__s) == true) && (is_array( $$__s) == true) ) extract( $$__s, EXTR_OVERWRITE );
                }
                unset($supers);
        }
} else {
        if ( ini_get('register_globals') != 1 ) {
                                                                                
                $supers = array('HTTP_POST_VARS',
                                'HTTP_GET_VARS',
                                'HTTP_COOKIE_VARS',
                                'GLOBALS',
                                'HTTP_SESSION_VARS',
                                'HTTP_SERVER_VARS',
                                'HTTP_ENV_VARS'
                                 );
                                                                                
                foreach( $supers as $__s) {
                        if ( (isset($$__s) == true) && (is_array( $$__s) == true) ) extract( $$__s, EXTR_OVERWRITE );
                }
                unset($supers);
        }
}


if($email=="")
{
   /* reclama si no se ha rellenado el campo email en el formulario */
   echo "No ingresaste la dirección de correo electrónico";
   exit();
}

$respuesta="respuesta.htm";

$para ="[email protected]";
$sujeto = "Nombre Apellidos";
$encabezado = "From: $nombre <$email>";
$encabezado .= "\nReply-To: $email";
$encabezado .= "\nX-Mailer: PHP/" . phpversion();

$ip=$REMOTE_ADDR;

$mensaje .= "NOMBRE: $nombre\n";
$mensaje .= "DIRECCION: $direccion\n";
$mensaje .= "POBLACION: $poblacion\n";
$mensaje .= "EMAIL: $email\n";
$mensaje .= "TELF: $telf\n";
$mensaje .= "MOVIL: $movil\n";
$mensaje .= "COMENTARIOS: $comentarios\n";
$mensaje .= "IP: $ip\n";

/* aqui se intenta enviar el correo, si no se
tiene éxito se da un mensaje de error */
if(!mail($para, $sujeto, $mensaje, $encabezado))
{
   echo "<h1>No se pudo enviar el Mensaje</h1>";
   exit();
}
else
{
   /* aqui redireccionamos a la pagina de respuesta */
   echo "<meta HTTP-EQUIV='refresh' content='1;url=$respuesta'>";
}

?>


Gracias y saludos ;)[/code]

Por JotaeRe

96 de clabLevel



 

msie7
Citar            
MensajeEscrito el 10 Oct 2007 01:42 pm
Ejem.... que atentos en el soporte técnico en decirte eso U_U. JotaRe en efecto, si nadie te lo había dicho antes, get no recomendable para pasar datos por formularios, es como salir de casa con un pantalón de papel y que empiece a llover. Lo que no entiendo, ¿Para que detectas la versión de php, siendo que eso es del lado del servidor? ¿acaso le vas a plantar al usuario algún código maligno y que lo ejecute el php del usuario en caso de tenerlo? ¿o es por si algún día a tu proveedor le da la onda retro y decide hacer un downgrade de php?

Por cierto, esto

Código :

if($email=="")


Reemplazalo por

Código :

if(strlen(trim($email))==0)


O por

Código :

if(!isset($email))


isset en php
strlen en php
trim en php

Saludos!

Por Aoyama

BOFH

6224 de clabLevel

6 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Bastard Operators From Hell

Webdesigner & Developer, en mis ratos libres bebo café por litros.

firefox
Citar            
MensajeEscrito el 10 Oct 2007 01:57 pm
Hola!

Mira lo primero para el formulario utiliza algo de este estilo:

Código :

<form method="post" action="enviacorreo.php"> FORMULARIO </form>

Como ves lo he escrito en minúsculas, eso no es lo que hace que no funcione, pero hace a tu código más "elegante" por así decirlo. También he cambiado get por post.

Ahora el PHP:

Código :

<?php
if( $_POST['email'] == "" ) {
    //reclama si no se ha rellenado el campo email en el formulario
    echo "No ingresaste la dirección de correo electrónico";
    exit();
}
//Argumentos de mail();
$respuesta = 'respuesta.htm';
$para = '[email protected]';
$sujeto = 'Nombre Apellidos';
$encabezado = 'From: '.$nombre.' <'.$_POST['email'].'>';
$encabezado .= '\nReply-To: $email';
$encabezado .= '\nX-Mailer: PHP/'.phpversion();
$ip = $REMOTE_ADDR;
//Mensaje
$mensaje = 'NOMBRE: '.$_POST['nombre'].'\n';
$mensaje .= 'DIRECCION: '.$_POST['direccion'].'\n';
$mensaje .= 'POBLACION: '.$_POST['poblacion'].'\n';
$mensaje .= 'EMAIL: '.$_POST['email'].'\n';
$mensaje .= 'TELF: '.$_POST['telf'].'\n';
$mensaje .= 'MOVIL: '.$_POST['movil'].'\n';
$mensaje .= 'COMENTARIOS: '.$_POST['comentarios'].'\n';
$mensaje .= 'IP: '.$ip;

//Intento enviarlo
$mail_handler = mail($para, $sujeto, $mensaje, $encabezado);
if($mail_handler) {
    echo '<meta HTTP-EQUIV="refresh" content="1;url='.$respuesta.'">';
} else {
    echo '<h1>No se pudo enviar el Mensaje</h1>';
}
?>


Como ves he cambiado todas las magic_quotes (comillas dobles) por simples y he usado cocatenación para las cadenas de texto, además de pasar a usar el $_POST['var_name'];

Encuanto a lo del SMTP, pues no se... no creo que se refieran a usar una conexión socket, en fin... tu prueba así a ver que tal y me dices algo de como te ha ido :wink:

Saludoss,

Netcy.

Por netcyberas

25 de clabLevel



Genero:Masculino  

[ Barcelona | Spain ]

firefox
Citar            
MensajeEscrito el 10 Oct 2007 01:59 pm
Una precisión más, el código inicial de PHP sería mejor así:

Código :

<?php
if( !isset($_POST['email']) || $_POST['email'] == "" ) {

    //reclama si no se ha rellenado el campo email en el formulario

    echo "No ingresaste la dirección de correo electrónico";

    exit();

}
?>
[/code]

Por netcyberas

25 de clabLevel



Genero:Masculino  

[ Barcelona | Spain ]

firefox
Citar            
MensajeEscrito el 11 Oct 2007 11:49 am
muxas mercis a todos voy a probar con todo lo k me abeis indicado y os cuento k tal ;)

Por JotaeRe

96 de clabLevel



 

msie7
Citar            
MensajeEscrito el 11 Oct 2007 12:02 pm
una cosilla... la parte incial de mi php donde detecto la version e inicializo alguna variable de php, es necesaria o la puedo suprimir??? lo digo porque ese trozo de codigo lo saque de algun tutorial de envio de formularios...
Gracias

Por JotaeRe

96 de clabLevel



 

msie7
Citar            
MensajeEscrito el 11 Oct 2007 12:28 pm

JotaeRe escribió:

.. la parte incial de mi php donde detecto la version e inicializo alguna variable de php, es necesaria o la puedo suprimir???


No es necesaria.

Por Aoyama

BOFH

6224 de clabLevel

6 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Bastard Operators From Hell

Webdesigner & Developer, en mis ratos libres bebo café por litros.

firefox
Citar            
MensajeEscrito el 11 Oct 2007 01:50 pm
Exacto, no es nada necesaria, de hecho con un código como el que yo te escribí debería funcionar al 100% :wink:

Por netcyberas

25 de clabLevel



Genero:Masculino  

[ Barcelona | Spain ]

msie
Citar            
MensajeEscrito el 03 Dic 2007 10:50 pm
Muchachos yo también tengo el mismo problema tras migrar los que me dan el alojamiento. Pero yo no usaba el metodo Get, sino que siempre usé Post. Los formularios q tenia alojados allí dejaron de andar y los que tengo con otro Hosting siguen andando.
También me diejron que me prepare para PHP5. Pero me dijeron que use metodo POST y eso el lO que usé en todos los form.
¿Algún otro detalle que nos estemos perdiendo?


:S

Por Cuidadoso

3 de clabLevel



Genero:Femenino  

msie7
Citar            
MensajeEscrito el 04 Dic 2007 12:01 am
Dinos qué mensajes de error te aparecen. Generalmente cuando pasa esto de que en un lugar anda una cosa y en otro lugar la misma cosa no anda se debe a diferencias en la configuración y muy probablemente se deba a que en un lugar PHP está configurado con register_globals ON y en el otro en OFF.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 04 Dic 2007 12:46 am
mirá este es uno que justo estaba haciendo, tengo otros hechos en flash y que se envian mediante el mismo phpmailer.
http://www.abcba.com.ar/pagina/bioquimicos.html
Fijate que cuando envias el formulario la pagina de confirmación te queda incompleta, de la misma manera me llega el mail a mi.

Por Cuidadoso

3 de clabLevel



Genero:Femenino  

msie7
Citar            
MensajeEscrito el 04 Dic 2007 12:51 am
Perdon me olvidaba aclarar que no tengo acceso a poner en On a register_globals , ya que cuando me migraron esa opción dejó de estar disponible y los soportes solo me dicen que use el método post que use php4 y que vaya ya cambiando a 5.

Por Cuidadoso

3 de clabLevel



Genero:Femenino  

msie7
Citar            
MensajeEscrito el 04 Dic 2007 01:36 pm
Pues eso entonces, que tienes que programar como si register_globals esté en OFF. Y no nos has dicho cuáles son los mensajes de error.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 05 Dic 2007 05:58 pm
No da mensaje de error solo llegan lso mails sin la información incorporada al formulario.
Igual lopude solucionar, pero no mediante PHPmailer. El problema lo voy a seguir teniendo en cuando migren los formularios que envian adjuntos.

Por Cuidadoso

3 de clabLevel



Genero:Femenino  

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.