PDA

Ver la versión completa : a alguien que sepa de PHP y formularios



ivanjpm
13/11/2007, 11:14
Hola a todos!
El caso es que estoy enviando un formulario vía flash y un archivo PHP que tiene por código:

<?php
$sendTo = "info@xxxxxx.com";
$subject = $_POST["asunto"];
$headers = "From: " . $_POST["Cristalab_Flashform"];
$headers .= "<" . $_POST["email"] . ">\r\n";
$headers .= "Reply-To: " . $_POST["email"];
$message = $_POST["cuerpo"];
mail($sendTo, $subject, $message, $headers);
echo "estado=Mensaje enviado.";
?>

El caso es que los mails me llegan con los acentos y la ñ en símbolos extraños. Hay algo que deba poner en el código o es problema del servidor de mi webmail?
merci!



PD: En el código flash que llama el fichero php pone:


//Declaro las variables para enviar y para recibir
var envio_lv:LoadVars = new LoadVars();
var recibir_lv:LoadVars = new LoadVars();
//Función que envia el forumlario
function enviarMail() {
envio_lv.asunto = asunto_txt.text;
envio_lv.email = email_txt.text;
envio_lv.cuerpo = cuerpo_txt.text;
envio_lv.sendAndLoad("email.php", recibir_lv, "POST");
//Aqui ustedes pueden cambiar de form.php a form.asp dependiendo del servidor
//que usen
}
//Función que procesa los datos recibidos del servidor
recibir_lv.onLoad = function(exito) {
if (exito) {
estado_txt.text = this.estado;
} else {
//Muestra un mensaje de error en negrita
estado_txt.text = "Error en la aplicación de correo";
}
};

Theck
13/11/2007, 11:34
Pues posiblemente es porque el flash estar&#225; trabajando en un charset y el php en otro. Php suele trabajar en UTF-8 y al recibir el texto en otro distinto te casca los caracteres.

Ahora, no me preguntes si le puedes definir el chatset al flash, y ahora no puedo mir&#225;rtelo :S

ivanjpm
13/11/2007, 11:35
Pues posiblemente es porque el flash estará trabajando en un charset y el php en otro. Php suele trabajar en UTF-8 y al recibir el texto en otro distinto te casca los caracteres.

Ahora, no me preguntes si le puedes definir el chatset al flash, y ahora no puedo mirártelo :S

Por dios bendito. gracias, pero qué lio...

Malenko
13/11/2007, 11:40
Te lo han dicho perfectamente, es la codificaci&#243;n. Eso lo puedes especificar en tu p&#225;gina HTML (donde tengas el flash) mediante un meta.

ivanjpm
13/11/2007, 11:46
Te lo han dicho perfectamente, es la codificación. Eso lo puedes especificar en tu página HTML (donde tengas el flash) mediante un meta.

mil gracias malenco. el caso es que soy SOLO diseñador y el mundo de la programación satura mucho si no dominas. Es decir, no entiendo ni papa. Me podrías poner el código del META para ponerlo en mi html?
gracias!

Theck
13/11/2007, 11:47
Prueba poniendo esto en el php, al principio de todo:

header('Content-type: text/html; charset=ISO-8859-1');

A ver si pon&#237;endole el charset te lo pilla, sino puedes probar poniendoselo a UTF-8, a ver si estar&#225; pasando al rev&#233;s, que el php est&#225; en ISO-8859-1 y tu necesitas UTF-8.


header('Content-type: text/html; charset=UTF-8');

Malenko
13/11/2007, 12:08
Yo también quiero terminar aportando mi granito de arena:



<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

ivanjpm
13/11/2007, 12:10
veamos: (y gracias)
En el FLASH est&#225; esto:

//Declaro las variables para enviar y para recibir
var envio_lv:LoadVars = new LoadVars();
var recibir_lv:LoadVars = new LoadVars();
//Funci&#243;n que envia el forumlario
function enviarMail() {
envio_lv.asunto = asunto_txt.text;
envio_lv.email = email_txt.text;
envio_lv.cuerpo = cuerpo_txt.text;
envio_lv.sendAndLoad("email.php", recibir_lv, "POST");
//Aqui ustedes pueden cambiar de form.php a form.asp dependiendo del servidor
//que usen
}
//Funci&#243;n que procesa los datos recibidos del servidor
recibir_lv.onLoad = function(exito) {
if (exito) {
estado_txt.text = this.estado;
} else {
//Muestra un mensaje de error en negrita
estado_txt.text = "Error en la aplicaci&#243;n de correo";
}
};


en el HTML que contiene el FLASH est&#225; esto:

<html lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
.
.
.
(y lo dem&#225;s)


y en el PHP he puesto lo que me has dicho:


<?php
header('Content-type: text/html; charset=UTF-8');
$sendTo = "info@xxxxxx.com";
$subject = $_POST["asunto"];
$headers = "From: " . $_POST["Cristalab_Flashform"];
$headers .= "<" . $_POST["email"] . ">\r\n";
$headers .= "Reply-To: " . $_POST["email"];
$message = $_POST["cuerpo"];
mail($sendTo, $subject, $message, $headers);
echo "estado=Mensaje enviado.";
?>

en el HTML y el PHP he puesto el UTF-8 y tb he probado ISO-8859-1. Nada funciona :'(

Malenko
13/11/2007, 12:15
Descartando eso, creo que el problema esta entonces en el servidor de mail, porque entre flash y php el texto llega bien, no? Lo has probado grabando en un fichero o escribiendo en pantalla o algo? Si eso funciona, de seguro que es el servidor de mail.

ivanjpm
13/11/2007, 12:22
Descartando eso, creo que el problema esta entonces en el servidor de mail, porque entre flash y php el texto llega bien, no? Lo has probado grabando en un fichero o escribiendo en pantalla o algo? Si eso funciona, de seguro que es el servidor de mail.

el texto sí llega bien, sólo es la ñ y los acentos. lo de grabar en un fichero o escribir en pantalla no sé a lo que te refieres. pero estoy resfriado, tengo mil ventanas abiertas en el mac, me duele la cabeza y voy a explotaaaaaaaaaarrrrrrrrrrrrrrrrrr!!!!
EL caso es que en el mismo servidor y con un formulario en php y html (sin nada de flash) todo iba bien.
ARGH. mil gracias a todos.

anibarro
13/11/2007, 12:37
Cambia la linea que envia el mail por esta otra, a ver si funciona:
mail($sendTo, $subject, utf8_encode($message), $headers);

ivanjpm
13/11/2007, 13:16
Cambia la linea que envia el mail por esta otra, a ver si funciona:
mail($sendTo, $subject, utf8_encode($message), $headers);

así no me deja ni enviar el mail

Theck
13/11/2007, 13:41
A lo que se refiere malenko es que uses las funciones fopen y fwrite (eran as&#237;, &#191;no? xD) para escribir en un fichero lo que te llega a la p&#225;gina php y as&#237; comprobar que del flash ya llega con los caracteres especiales mal o no.


<?php
$nombre_archivo = 'prueba.txt';

$gestor = fopen($nombre_archivo, 'a');
fwrite($gestor, $message);
fclose($gestor);
?>
Luego te bajas prueba.txt y miras si est&#225; bien o mal.

Si est&#225; mal, es que ya del flash llega con un charset diferente del de tu php, sino, es la funci&#243;n mail, y por lo tanto, el servidor de correo, el que est&#225; jodiendo los caracteres.

Si eso, prueba lo que ha dicho anibarro en 2 pasos:


$message = utf8_encode($message);
mail($sendTo, $subject, $message, $headers);

ivanjpm
13/11/2007, 13:56
A lo que se refiere malenko es que uses las funciones fopen y fwrite (eran así, ¿no? xD) para escribir en un fichero lo que te llega a la página php y así comprobar que del flash ya llega con los caracteres especiales mal o no.


<?php
$nombre_archivo = 'prueba.txt';

$gestor = fopen($nombre_archivo, 'a');
fwrite($gestor, $message);
fclose($gestor);
?>
Luego te bajas prueba.txt y miras si está bien o mal.

Si está mal, es que ya del flash llega con un charset diferente del de tu php, sino, es la función mail, y por lo tanto, el servidor de correo, el que está jodiendo los caracteres.

Si eso, prueba lo que ha dicho anibarro en 2 pasos:


$message = utf8_encode($message);
mail($sendTo, $subject, $message, $headers);


Hola amigos. Entre la decadencia de las incompatibilidades entre servidores, lenguajes de programación y no ser informático, debo tirar la toalla. No ha funcionado nada. Odio ya el PHP!!! y odio aún más a mi servidor. Lo del fwrite no me veo con capacidad mental para llevarlo a cabo. Ya os digo, hice la carrera de Diseño, me faltarían un os cuantos años de estudios para compararme con vosotros, y me pierdo desesperadamente. Mierda al PHP. Mierda a los servidores y viva vosotros, vuestra impresionante ayuda y el MSX basic. Eso almenos, parecía más fácil... [apacigueitor]

Malenko
13/11/2007, 15:13
Puedes probar esto último? Es para indicarle al servidor que el contenido del texto (body) va en UTF-8:

$headers = "Content-type: text/html; charset=UTF-8\n";
$headers .= "From: " . $_POST["Cristalab_Flashform"];
$headers .= "<" . $_POST["email"] . ">\r\n";
$headers .= "Reply-To: " . $_POST["email"];

El resto dejalo igualito.

Estopero
13/11/2007, 16:08
Hola a todos!
El caso es que estoy enviando un formulario vía flash y un archivo PHP que tiene por código:

<?php
$sendTo = "info@xxxxxx.com";
$subject = $_POST["asunto"];
$headers = "From: " . $_POST["Cristalab_Flashform"];
$headers .= "<" . $_POST["email"] . ">\r\n";
$headers .= "Reply-To: " . $_POST["email"];
$message = $_POST["cuerpo"];
mail($sendTo, $subject, $message, $headers);
echo "estado=Mensaje enviado.";
?>

El caso es que los mails me llegan con los acentos y la ñ en símbolos extraños. Hay algo que deba poner en el código o es problema del servidor de mi webmail?
merci!


prueba a poner el codigo del php asi:




<?php

function fncPasarAISO($cadena){

$v = preg_replace('/[^!-%\x27-;=?-~<>&\x09\x0a\x0d\x0B ]/e', '"&#".ord("$0").chr(59)', $cadena);
$k = preg_replace('/&#195;&#([0-9]+);/e', '"&#".((int) \\1 + 64).";"', $v);


return $k;
}

$sendTo = "info@xxxxxx.com";
$subject = fncPasarAISO($_POST["asunto"]);
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; harset=iso-8859-1\r\n";
$headers .= "From: " . $_POST["Cristalab_Flashform"];
$headers .= "<" . $_POST["email"] . ">\r\n";
$headers .= "Reply-To: " . $_POST["email"];
$message = fncPasarAISO($_POST["cuerpo"]);
mail($sendTo, $subject, $message, $headers);
echo "estado=Mensaje enviado.";
?>



tal cual, a ver q sucede =)

ivanjpm
13/11/2007, 16:29
tampoco ha funcionado.... :'(
gracias por el esfuerzo Malenko y Estopero...