Comunidad de diseño web y desarrollo en internet online

Formulario que funciona en un servidor y en otro no

Citar            
MensajeEscrito el 25 Abr 2011 11:24 am
Hola, amigos.

He hecho una web en Flash que contiene un formulario y, para probar, la he subido a dos servidores distintos. La misma web, con el mismo formulario, con el mismo php, todo en la misma carpeta y, por tanto, con las mismas rutas. Todo exactamente igual. Idéntico. Ni una mínima diferencia entre una y otra. Mismo todo, servidores distintos.

Relleno y envío el formulario de uno de los servidores y llega a mi correo el mensaje con los datos.
Relleno y envío el formulario del otro servidor y llega a mi correo el mensaje ¡SIN LOS DATOS!

¿Podemos afirmar sin género de dudas que el problema radica en el servidor? ¿O no necesariamente, porque el mensaje llega, aunque vacío?

Muchas gracias a todos.

Por CaballeroCreativo

5 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 Abr 2011 04:18 pm
Sería bueno que confirmaras que la configuración en ambos servidores es la misma. Incluso la diferencia de versiones de PHP o Apache puede hacer, valga la redundancia, la diferencia :).

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 25 Abr 2011 04:36 pm
Ante todo, DriverOp, muchas gracias por contestar.

He comprobado la configuración de ambos servidores y, efectivamente, de los más de 100 campos que tiene la información que proporciona, hay algunos diferentes. Lo difícil (imposible para mí) es saber cuáles son los que afectan a este enigma.

La versión php en el que funciona es la 5.2.15 y la que no funciona es la 5.2.0-8+etch16. El server API en el que funciona es CGI/FastCGI y en el que no, es Apache 2.0 Handler. Pero claro, igual esto no es relevante para hacer que llegue el mensaje sin información.

En fin, haré pruebas con otros códigos de php a ver si doy con uno que funcione en el del cliente.

Gracias de nuevo por compartir tus conocimientos.

Por CaballeroCreativo

5 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 Abr 2011 05:06 pm
Efectivamente, la causa podría estar en la diferencia de configuración. Mi *sospecha* es que un servidor trabaja en UTF8 y el otro no. No sé mucho de Flash pero tengo entendido que siempre usa UTF8, si el servidor no está configurado para aceptar caracteres en UTF8, puede que los datos por GET/POST del formulario sean malinterpretados... O estoy diciendo chorradas y la causa es otra. En ese caso tendría que ver ambos servidores andando.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 25 Abr 2011 08:11 pm
mmm la diferencia puede radicar en las REGISTER GLOBALS fijate si en los 2 servers estan en OFF

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 Abr 2011 09:06 pm
¡Bingo!

Pero curiosamente la que funciona es la que tiene register_globals en posición ON. La que hace que me llegue el mensaje pero sin los datos, está en OFF.

Había leído por ahí que los register_globals dan problemas y que se recomienda que estén en OFF.

Mi duda ahora es la siguiente: si le digo al administrador que si me abre las register_globals, lo más probable es que me mande a paseo. ¿Hay alguna posibilidad de, cambiando poca cosa, hacer que funcione sin los register_globals? ¿Hay que cambiar todo el php? ¿Método GET en vez de POST? ¿O estoy diciendo sandeces que demuestran que no tengo ni idea de php?

Gracias a todos por vuestra atención y vuestros conocimientos.

Por CaballeroCreativo

5 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 26 Abr 2011 10:00 am
Para todo el que tenga el mismo problema que yo, el administrador del servidor me ha proporcionado la siguiente información (resumen):

A partir de la versión de PHP 4.2.0 el valor por defecto de la directiva register_globals es off. El por qué de este cambio viene motivado por un aumento del nivel de seguridad en la configuración del PHP por defecto.

Para solucionar esto debemos reemplazar las variables por las referencias adecuadas en cada caso, en PHP se han definido unos arrays diferentes con valores, dependiendo del lugar de procedencia. Por ejemplo:

Si teníamos el siguiente script:

print "Su edad: ".$edad; //cookie
print "Navegador: ".$HTTP_USER_AGENT;
print "Variable: ".$var; //variable de get

Deberíamos reemplazarlas por:

print "Su edad: ".$_COOKIE['edad']; //cookie
print "Navegador: ".$_SERVER['HTTP_USER_AGENT'];
print "Variable: ".$_GET['var']; //variable de get

Yo aún no lo he probado. Lo haré esta noche y contaré los resultados.

Saludos.

Por CaballeroCreativo

5 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Abr 2011 08:37 am
Nada. No hay manera. No va. Ahora ni siquiera llega el formulario.

No sé si cortarme las venas o dejármelas largas. He hecho un montón de pruebas y no funciona. Si ahora los servidores tienen siempre las register_globals desactivadas, tiene que haber una forma sencilla y conocida de que funcione, ¿no? Pues a mí, no.

El código que utilizo para el botón enviar en el flash es:

on (release) {
if ((nombre=='') or (email=='') or (mensaje=='')) {
respuesta = "Hay campos obligatorios sin rellenar. Por favor, revisa tu formulario.";
} else {
loadVariablesNum ("enviar.php", 0, "POST");
respuesta = "Tu formulario ha sido enviado con éxito.";
}
}

El código php que he probado es:

<?php
$_POST['datos'].="Fecha: ".date('d-m-Y'). ' ';
$_POST['datos'].="Ip: ".$_SERVER['REMOTE_ADDR']. '
';
//Recogemos variables post
foreach($_POST as $nombre_campo => $valor)
{
$i++;
$datos .= $nombre_campo . '=' . $valor . '
';
}

mail("[email protected]", "Mensaje desde la web de EMPRESA, s.a.",
"Información enviada desde el formulario de la web de EMPRESA, s.a. por $_POST['nombre']

Nombre: $_POST['nombre']
Email: $_POST['email']
Teléfono: $_POST['tel']
Sector: $_POST['sector']
Mensaje: $_POST['mensaje']",
"From: $_POST['nombre']");
?>

¿Qué estoy haciendo mal que no me llega nada?

Gracias por todo, amigos.

Por CaballeroCreativo

5 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Abr 2011 01:09 pm
Eso:

Código PHP :

$_POST['datos'].="Fecha: ".date('d-m-Y'). ' ';

Es erróneo. No puedes concatenar un string a una variable que no existe.
Me parece que lo que te está molestando es que no puedes ver los mensajes de error que está generando PHP por estar ejecutando la llamada desde Flash.
Haz un formulario HTML común y corriente, solo para probar. En "enviar.php" pon lo siguente como primera línea:

Código PHP :

echo "<pre>"; print_r($_POST); echo "</pre>";

Así sabrás exactamente qué te está llegando por POST.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 Abr 2011 02:22 pm
¡¡¡¡¡SOLUCIONADO!!!!!

Después de hacer algunas pruebas (solo unas cientos de miles) me funciona este sencillo y breve código:

<?php
mail("[email protected]", "Mensaje desde la web de EMPRESA, s.a.",
"Datos enviados desde el formulario de la web de EMPRESA, s.a. por $_POST[nombre]

Nombre: $_POST[nombre]
Email: $_POST[email]
Tel.: $_POST[tel]
Mensaje: $_POST[mensaje]",
"From: $_POST[nombre]");
?>


Espero que esto sirva de ayuda a los que tengan el mismo problema que yo.

Gracias a todos por ayudar a los que estamos empezando o somos un poco más torpes que el resto de los mortales. Seguro que volveremos a vernos por aquí.

Saludos.

Por CaballeroCreativo

5 de clabLevel



Genero:Masculino  

firefox

 

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