Foros del Web » Programando para Internet » PHP »

problema formulario php

Estas en el tema de problema formulario php en el foro de PHP en Foros del Web. Hola a todos, Me ha caido un marroncillo ya que nuestro desarrollador se ha ido de la empresa. Es un simple formulario en PHP, pero ...
  #1 (permalink)  
Antiguo 10/07/2013, 05:39
 
Fecha de Ingreso: julio-2013
Ubicación: Madrid
Mensajes: 7
Antigüedad: 10 años, 9 meses
Puntos: 0
problema formulario php

Hola a todos,

Me ha caido un marroncillo ya que nuestro desarrollador se ha ido de la empresa. Es un simple formulario en PHP, pero yo no soy programador y todo me suena a chino.

El caso es que he conseguido hacer un formulario con un tutorial. Lo he probado en un servidor y funciona, pero al pasarlo al servidor donde debe estar no funciona.

El código del PHP es el siguiente:
Código:
<?php
//Importamos las variables del formulario de contacto

@$nombre = addslashes($_POST['nombre']);
@$apellidos = addslashes($_POST['apellidos']);
@$email = addslashes($_POST['email']);
@$telefono = addslashes($_POST['telefono']);
@$comentarios = addslashes($_POST['comentarios']);



//Preparamos el mensaje de contacto
$cabeceras = "From: $email\n" //La persona que envia el correo
. "Reply-To: $email\n";
$asunto = "Mensaje desde la pagina Web"; //asunto aparecera en la bandeja del servidor de correo
$email_to = "[email protected]"; //cambiar por tu email
$contenido = "$nombre desea información del curso de fisioterapia\n"
. "\n"
. "Nombre: $nombre\n"
. "Apellidos: $apellidos\n"
. "Email: $email\n"
. "Teléfono: $telefono\n"
. "Comentarios: $comentarios\n"
. "\n";
//Enviamos el mensaje y comprobamos el resultado
if (@mail($email_to, $asunto ,$contenido ,$cabeceras )) {

//Si el mensaje se envía muestra una confirmación
header('Location: ok.html');
}else{
//Si el mensaje no se envía muestra el mensaje de error
header('Location: error.html');
}
?>
Sabríais decirme porque funciona en un servidor y en otro no? puede ser por configuración? versión? En caso de que sea así, hay alguna manera de estandarizarlo para que funcione en todos los servidores? Lo pregunto porque me va a ser muy complicado saber que versión y configuración tiene cada servidor.

Muchas gracias por la ayuda.
  #2 (permalink)  
Antiguo 10/07/2013, 05:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: problema formulario php

Obviamente el error es de configuración, o mejor dicho de configuraciones distintas, ya que si en uno funciona...

Cita:
Lo pregunto porque me va a ser muy complicado saber que versión y configuración tiene cada servidor.
No tan complicado. Para comparar las configuraciones de los dos servidores carga un fichero como el que sigue

phpinfo.php

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. ?>

Llamalo con el navegador

http://dominio/phpinfo.php

http://localhost/phpinfo.php

??

http://www.sanroman.com/phpinfo.php

y te mostrará la configuración ... comparalas y veras las posibles diferencias.

Estandarizar en general no creo que sea posible pero tampoco veo nada muy especial en ese fichero como para que no te funcione....

Te da algun error?
Que passa cuando lo ejecutas?

Lo estas llamando des del action de un formulario que no nos muestras....?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 10/07/2013, 06:00
 
Fecha de Ingreso: julio-2013
Ubicación: Madrid
Mensajes: 7
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: problema formulario php

Hola quimfv, muchas gracias por contestar. Te cuento.

Las versiones de PHP son 5.2.17 en el servidor que funciona y 5.2.13 en el que no.

La compañera que tiene que recibir el correo dice que están llegando, sin embargo, cuando envías el formulario redirige a la página de error. En el servidor donde a mi me funciona no ocurre eso.

Si está dentro de un if y se cumple la condición, ¿porqué pasa al else?

Gracias por la ayuda
  #4 (permalink)  
Antiguo 10/07/2013, 06:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: problema formulario php

Quita las @ (de @mail(...)) y te mostrara los errores....

No se que puede ser pero buscando "mail php 5.2.13" parece que hay documentación sobre el tema investigalo...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 10/07/2013 a las 06:46
  #5 (permalink)  
Antiguo 10/07/2013, 06:40
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: problema formulario php

No estoy seguro, pero que el arroba delante de la funcion mail no va, eso hace que no se muestre los problemas.

cambie esto :

Código PHP:

if (@mail($email_to$asunto ,$contenido ,$cabeceras )) {

//Si el mensaje se envía muestra una confirmación
header('Location: ok.html');
}else{
//Si el mensaje no se envía muestra el mensaje de error
header('Location: error.html');


por esto:

Código PHP:
$mensaje_send mail($email_to$asunto ,$contenido ,$cabeceras);
if (
$mensaje_send) {

//Si el mensaje se envía muestra una confirmación
header('Location: ok.html');
}else{
//Si el mensaje no se envía muestra el mensaje de error
header('Location: error.html');

de todos modos, lo recomendable es usar una clase o algun sistema open source para enviar email, pero tenga en cuenta que en algunos servidores las funciones de enviar email desde un archivo estan bloqueadas por un tema de seguridad,

una buen y facil de usar es:

http://phpmailer.worxware.com/

puede que este bloqueda en su servidor, pero puede probarla.

tuto:

http://www.desarrolloweb.com/articulos/phpmailer.html

existen muchos sistemas open sources, incluso mas complejos, pero todo depende para que lo vaya utilizar.

si va enviar email de publicidad, use http://mailchimp.com/

con eso se evitara tener problemas con su hosting, ya que los envios de email son monitoreados y hay limite de envio por dia, en el caso de google 500.


saludos

PD: los arrobas detante de la variables no van, tambien deberia usar strip_tags() para limpiar.
y si el formulario va ser publico, debera usar una buena validacion para evitarse dolores de cabeza.
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -
  #6 (permalink)  
Antiguo 11/07/2013, 02:00
 
Fecha de Ingreso: julio-2013
Ubicación: Madrid
Mensajes: 7
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: problema formulario php

Muchas gracias a ambos por contestar.

La función de este formulario va a ser mandar uno o dos emails a la semana. No esperamos mucho tráfico.

Como os decía me ha caído a mi hacer esto y yo no se absolutamente nada de PHP, con lo que no sé si el código está bien o mal, ni sé usar strip_tags(). Disculparme que no pueda aportar más.

Con respecto al código que pegué hemos comprobado que enviaba el email correctamente, sin embargo cuando el email se envía redirige a la página de error.

zerpico_01, voy a probar el cambio que me dices a ver si funciona mejor así. Ahora os cuento.

Muchas gracias por la ayuda.
  #7 (permalink)  
Antiguo 11/07/2013, 02:34
 
Fecha de Ingreso: julio-2013
Ubicación: Madrid
Mensajes: 7
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: problema formulario php

zerpico_01, con el cambio que me has dicho, ahora al lanzar el formulario da el siguiente error:

Parse error: syntax error, unexpected T_VARIABLE in C:\inetpub\wwwroot\sanroman\fisioterapia\contacto. php on line 17

La línea 17 es esta:

Código PHP:
Ver original
  1. $contenido = "$nombre desea informacion del curso de fisioterapia\n"
  #8 (permalink)  
Antiguo 11/07/2013, 02:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: problema formulario php

Cita:
Iniciado por alvarocf Ver Mensaje
zerpico_01, con el cambio que me has dicho, ahora al lanzar el formulario da el siguiente error:

Parse error: syntax error, unexpected T_VARIABLE in C:\inetpub\wwwroot\sanroman\fisioterapia\contacto. php on line 17

La línea 17 es esta:

Código PHP:
Ver original
  1. $contenido = "$nombre desea informacion del curso de fisioterapia\n"

Repasa los ; al final de cada sentencia....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #9 (permalink)  
Antiguo 11/07/2013, 02:51
 
Fecha de Ingreso: julio-2013
Ubicación: Madrid
Mensajes: 7
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: problema formulario php

Da error en la línea 17 pero la sentencia completa es esta:

Código PHP:
Ver original
  1. $contenido = "$nombre desea información del curso de fisioterapia\n"
  2. . "\n"
  3. . "Nombre: $nombre\n"
  4. . "Apellidos: $apellidos\n"
  5. . "Email: $email\n"
  6. . "Teléfono: $telefono\n"
  7. . "Comentarios: $comentarios\n"
  8. . "\n";

Con lo que el ; estaría bien colocado ¿no?
  #10 (permalink)  
Antiguo 11/07/2013, 03:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: problema formulario php

Y en la 16?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #11 (permalink)  
Antiguo 11/07/2013, 04:01
 
Fecha de Ingreso: julio-2013
Ubicación: Madrid
Mensajes: 7
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: problema formulario php

Está todo bien cerrado.

Creo que puedo certificar que es problema del servidor. He hecho otro formulario totalmente diferente, y lo mismo, en mi servidor de pruebas funciona y en el otro no.

El código nuevo es este:

Código:
<?php
// Guardar los datos recibidos en variables:
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$telefono = $_POST['telefono'];
$mensaje = $_POST['mensaje'];
// Definir el correo de destino:
$dest = "[email protected]"; 
 
// Estas son cabeceras que se usan para evitar que el correo llegue a SPAM:
$headers = "From: $nombre <$email>\r\n";  
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
 
// Aqui definimos el asunto y armamos el cuerpo del mensaje
$asunto = "Contacto";
$cuerpo = "Nombre: ".$nombre."<br>";
$cuerpo .= "Email: ".$email."<br>";
$cuerpo .= "Telefono: ".$telefono."<br>";
$cuerpo .= "Mensaje: ".$mensaje;
 
// Esta es una pequena validación, que solo envie el correo si todas las variables tiene algo de contenido:
if($nombre != '' && $email != '' && $telefono != '' && $mensaje != ''){
    mail($dest,$asunto,$cuerpo,$headers); //ENVIAR!
}
?>
Y tampoco funciona.

  #12 (permalink)  
Antiguo 11/07/2013, 04:39
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: problema formulario php

El mensaje de error no es de servidor

Cita:
Parse error: syntax error, unexpected T_VARIABLE in C:\inetpub\wwwroot\sanroman\fisioterapia\contacto. php on line 17
encuentra una variable donde esperaba otra cosa....

Aún que si dices que en el de pruebas funciona? No te queda otra que comparar configuraciones hasta que encuentres la causa.

Mira esta forma de cargar los headers....


Código PHP:
Ver original
  1. <?php
  2. $headers   = array();
  3. $headers[] = "MIME-Version: 1.0";
  4. $headers[] = "Content-type: text/plain; charset=iso-8859-1";
  5. $headers[] = "From: Sender Name <[email protected]>";
  6. $headers[] = "Bcc: JJ Chong <[email protected]>";
  7. $headers[] = "Reply-To: Recipient Name <[email protected]>";
  8. $headers[] = "Subject: {$subject}";
  9. $headers[] = "X-Mailer: PHP/".phpversion();
  10.  
  11. mail($to, $subject, $email, implode("\r\n", $headers));
  12. ?>
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 11/07/2013 a las 04:47
  #13 (permalink)  
Antiguo 11/07/2013, 05:26
 
Fecha de Ingreso: julio-2013
Ubicación: Madrid
Mensajes: 7
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: problema formulario php

Muchas gracias quimfv

Voy a seguir investigando a ver si descubro que ocurre.
  #14 (permalink)  
Antiguo 11/07/2013, 07:52
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 10 meses
Puntos: 21
Respuesta: problema formulario php

Cita:
Creo que puedo certificar que es problema del servidor. He hecho otro formulario totalmente diferente, y lo mismo, en mi servidor de pruebas funciona y en el otro no.
Verifica en el servidor donde tienes implementado el sistema el archivo php.ini y buscas las configuración de estos parámetros para que lo pongas en ese servidor, en el caso de que estés usando un servidor de correo externo
Cita:
[mail function]
; For Win32 only.
SMTP = mail.servidoremail.com
smtp_port = 25
  #15 (permalink)  
Antiguo 12/07/2013, 19:08
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: problema formulario php

Cita:
Iniciado por alvarocf Ver Mensaje
Da error en la línea 17 pero la sentencia completa es esta:

Código PHP:
Ver original
  1. $contenido = "$nombre desea información del curso de fisioterapia\n"
  2. . "\n"
  3. . "Nombre: $nombre\n"
  4. . "Apellidos: $apellidos\n"
  5. . "Email: $email\n"
  6. . "Teléfono: $telefono\n"
  7. . "Comentarios: $comentarios\n"
  8. . "\n";

Con lo que el ; estaría bien colocado ¿no?
Ahora ve el error por que ha quitado el arroba, no es por el codigo que le di, pruebe concatenando asi:

Código PHP:

$cabeceras 
"From:"$email;
"Reply-To:".$email;
$asunto "Mensaje desde la pagina Web"
$email_to "[email protected]"
$contenido $nombre ."desea información del curso de fisioterapia"
." -".
"Nombre:"$nombre."-".
"Apellidos:"$apellidos."-".
"Email:"$email."-".
"Tel&eacute;fono:".$telefono."-".
"Comentarios:"$comentarios."-"
saludos!!
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -

Etiquetas: formulario, html, variables
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 07:59.