Foros del Web » Programando para Internet » PHP »

una tabla con vida propia...

Estas en el tema de una tabla con vida propia... en el foro de PHP en Foros del Web. En un file php tengo este ciclo: foreach ($HTTP_GET_VARS as $parametro => $valor) { if(!in_array($parametro, $nascosti)) { if ($valor!=''){ $mensajeC.="<tr><td><font face=arial size=2>$parametro</font></td><td><font face=arial size=2>$valor</font></td></tr>"; } ...
  #1 (permalink)  
Antiguo 04/12/2002, 03:50
Avatar de flavia  
Fecha de Ingreso: noviembre-2002
Mensajes: 269
Antigüedad: 15 años
Puntos: 0
una tabla con vida propia...

En un file php tengo este ciclo:

foreach ($HTTP_GET_VARS as $parametro => $valor)
{
if(!in_array($parametro, $nascosti))
{
if ($valor!=''){
$mensajeC.="<tr><td><font face=arial size=2>$parametro</font></td><td><font face=arial size=2>$valor</font></td></tr>";
}
}

Lo que hace es copiar los parametros que recibe del formulario de
la pagina anterior en una tabla que luego mando por mail.

El problema: A veces llega la tabla perfectamente formateada, y
otras veces con algun caracter extraño que hace que se salte algun campo y lo ponga arriba de todo y fuera de la tabla...

No sé... no descubro por qué, no hay un caso especial donde lo haga.

La pregunta: Alguna función que pase a texto el texto de cada campo... por ejemplo funcion($valor)... ?? Alguna idea???

Gracias!!!!!!!!!!!!!!!!!!!!!
__________________
Flavia.
  #2 (permalink)  
Antiguo 04/12/2002, 04:57
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
¿Podrias poner el codigo completo donde generas toda la tabla? Desde el <table> hasta el </table>. Por cierto, ¿usas rowspan o colspan? Porque eso puede ser la causa. Tambien seria aconsejable que sacaras el codigo HTML generado cuando sale mal.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 04/12/2002, 05:13
Avatar de flavia  
Fecha de Ingreso: noviembre-2002
Mensajes: 269
Antigüedad: 15 años
Puntos: 0
Sonrisa Gracias Josemi!

el codigo:

$mensaje.="<table bgcolor=#C3C3C3 width=100% cellpadding=20><td>\n";
$mensaje.="<center><table border width=85% bgcolor=#ffffff bordercolor=#000000 cellpadding=4 cellspacing=4>\n";
$mensajeB="<tr><th colspan=2 bgcolor=#404040><font face=\"arial\" size=2 color=#ffffff>$gateway_text_three";
$mensajeB.="</font></th></tr>\n";
$mensajeC="<tr><td><font face=arial size=2> Nro. Ordine</font></td><td><font face=arial size=2>$lee</font></td></tr>";
$mensajeC.="<tr><td><font face=arial size=2> Modalita' di Pagamento</font></td><td><font face=arial size=2>Carta di Credito</font></td></tr>";

foreach ($HTTP_GET_VARS as $parametro => $valor)
{
if(!in_array($parametro, $nascosti))
{
if ($valor!=''){
$mensajeC.="<tr><td><font face=arial size=2> $parametro</font></td><td><font face=arial size=2> $valor</font></td></tr>";
}
}
}
$mensajeC.="<tr><th colspan=2 bgcolor=#404040><font face=\"arial\" size=2 color=##ffffff>\n";
$mensajeC.="<a href=\"http://www.geo.it\">www.geo.it</a>\n";
$mensajeC.="</font></th></tr>\n";
$mensajeC.="</table></center></td></table></body></html>\n";

y despues concateno:
$mensajeEmpresa.=$mensaje.$mensajeB.$mensajeC;

porque cambia un texto cuando va el mensaje al cliente, pero eso no importa.

Ahora le puse un "espacio" antes de $parametro y $valor y creo que funciona... por lo menos no lo hace siempre.
__________________
Flavia.
  #4 (permalink)  
Antiguo 04/12/2002, 06:32
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Pues no le veo nada mal, quitando el hecho de que la tabla exterior solo tiene <td> sin <tr>. ¿Averiguaste con que valores se estropeaba la tabla? ¿Salia alguna celda vacia o no salia la celda?

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 05/12/2002, 03:03
Avatar de flavia  
Fecha de Ingreso: noviembre-2002
Mensajes: 269
Antigüedad: 15 años
Puntos: 0
Sonrisa Gracias Josemi! otra vez...

Realmente no sé con qué valores me pasa, no logro darme cuenta.
Pero es real eso que me decís del <tr>, no me había dado cuenta.
A veces sale SIN una celda (que no siempre es la misma) y el dato sale afuera de la tabla (arriba). Otra vez agrego una celda a la derecha (de modo que era una tercera columna pero la tabla es de dos columnas)
Vos cómo lo harías?
Pienso que puede tener que ver porque a veces queda un "t>" suelto o mete un "!" entre algun dato numerico.
Pero no pasa siempre.... pero no debería pasar nunca.
Necesito que funcione PERFECTO.
Gracias!!!
__________________
Flavia.
  #6 (permalink)  
Antiguo 05/12/2002, 03:59
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
Creo que el fallo es por meterle el salto de linea al final el \n, no hace faltaque se lo metas, solo mete codigo HTML
__________________
Usuario registrado de Linux #288725
  #7 (permalink)  
Antiguo 05/12/2002, 04:23
Avatar de flavia  
Fecha de Ingreso: noviembre-2002
Mensajes: 269
Antigüedad: 15 años
Puntos: 0
ah si?

le saco entonces todos los "/n"...
a ver.....
__________________
Flavia.
  #8 (permalink)  
Antiguo 05/12/2002, 04:51
Avatar de flavia  
Fecha de Ingreso: noviembre-2002
Mensajes: 269
Antigüedad: 15 años
Puntos: 0
PEORRRRRRRRRRRRRRRRR!!!!!!!!!!!

Saqué todos los "/n" del codigo html que envío al mensaje y directamente sale todo el codigo en el mensaje, no lo interpreta como html.
Qué hago? Le faltarán entonces "/n"? o el problema es esto del <tr>?

Para que tengan todo el codigo completo, se los pego acá. En realidad incluye dos tablitas más abajo pero son de datos fijos y nunca salen mal (salvo cuando solo se ve codigo html obviamente):

$mensaje='';
$mensaje.="<html><body link=#ffffff vlink=#ffffff>\n";
$mensaje.="<table bgcolor=#C3C3C3 width=100% cellpadding=20><td>\n";
$mensaje.="<center><table border width=85% bgcolor=#ffffff bordercolor=#000000 cellpadding=4 cellspacing=4>\n";
//distinto entre empresa y cliente
$mensajeB="<tr><th colspan=2 bgcolor=#404040><font face=\"arial\" size=2 color=#ffffff>$gateway_text_three";
$mensajeB.="</font></th></tr>\n";
$mensajeC="<tr><td><font face=arial size=2> Nro. Ordine</font></td><td><font face=arial size=2>$lee</font></td></tr>";
$mensajeC.="<tr><td><font face=arial size=2> Modalita' di Pagamento</font></td><td><font face=arial size=2>Carta di Credito</font></td></tr>";

foreach ($HTTP_GET_VARS as $parametro => $valor)
{
if(!in_array($parametro, $nascosti))
{
if ($valor!=''){
$mensajeC.="<tr><td><font face=arial size=2> $parametro</font></td><td><font face=arial size=2> $valor</font></td></tr>";
}
}
}
$mensajeC.="<tr><th colspan=2 bgcolor=#404040><font face=\"arial\" size=2 color=##ffffff>\n";
$mensajeC.="<a href=\"http://www.geo.it\">www.geo.it</a>\n";
$mensajeC.="</font></th></tr>\n";
$mensajeC.="</table></center></td></table></body></html>\n";

$pie="<table bgcolor=#C3C3C3 width=100% cellpadding=20><td>\n";
$pie.="<center><table border width=85% bgcolor=#ffffff bordercolor=#000000 cellpadding=4 cellspacing=4>\n";
$pie.="<tr><th colspan=2 bgcolor=#404040><font face=\"arial\" size=2 color=#ffffff>Trasporti";
$pie.="</font></th></tr>\n";
$pie.="<tr><td valign=\"top\"><font face=arial size=2>1</font></td><td valign=\"top\"><font face=arial size=2>Gruppo 1: Europa, Bacino del Mediterraneo</font></td></tr>";
$pie.="<tr><td valign=\"top\"><font face=arial size=2>2</font></td><td valign=\"top\"><font face=arial size=2>Gruppo 2: Est Europa, Africa, USA e Canada, Asia</font></td></tr>";
$pie.="<tr><td valign=\"top\"><font face=arial size=2>3</font></td><td valign=\"top\"><font face=arial size=2>Gruppo 3: Asia, Centro e Sud America, Africa</font></td></tr>";
$pie.="<tr><td valign=\"top\"><font face=arial size=2>4</font></td><td valign=\"top\"><font face=arial size=2>Gruppo 4: Autralia e Sud America</font></td></tr>";
$pie.="<tr><td valign=\"top\"><font face=arial size=2>5</font></td><td valign=\"top\"><font face=arial size=2>Italia</font></td></tr>";
$pie.="</table></center></td></table></body></html>\n";
$pie.="<table bgcolor=#C3C3C3 width=100% cellpadding=20><td>\n";
$pie.="<center><table border width=85% bgcolor=#ffffff bordercolor=#000000 cellpadding=4 cellspacing=4>\n";
$pie.="<tr><th colspan=2 bgcolor=#404040><font face=\"arial\" size=2 color=#ffffff>Pagamento";
$pie.="</font></th></tr>\n";
$pie.="<tr><td valign=\"top\"><font face=arial size=2>1</font></td><td valign=\"top\"><font face=arial size=2>Assegno Bancario intestato a Geogramma S.p.A.</font></td></tr>";
$pie.="<tr><td valign=\"top\"><font face=arial size=2>2</font></td><td valign=\"top\"><font face=arial size=2>Versamento su c/c postale 11713070</font></td></tr>";
$pie.="<tr><td valign=\"top\"><font face=arial size=2>3</font></td><td valign=\"top\"><font face=arial size=2>Bonifico Bancario(vedi sotto coordinate Bancarie)</font></td></tr>";
$pie.="<tr><td valign=\"top\"><font face=arial size=2>4</font></td><td valign=\"top\"><font face=arial size=2>Carta di Credito</font></td></tr>";
$pie.="</table></center></td></table></body></html>\n";

$mensajeEmpresa='';
$mensajeEmpresa.=$mensaje.$mensajeB.$mensajeC.$pie ;

$subject.=" Numero Ordine ".$lee;

$giorno=date("d/m/y");
$ora=date("H:i:s");
$foot="\n Modulo proveniente dal sito $HTTP_HOST \n\n - Compilato il $giorno alle ore $ora.";
$foot.=" dall'IP $REMOTE_ADDR";

$contenuto=$mensajeEmpresa.$foot;

$sheader="From:".$from."\nReply-To:".$from."\n";
$sheader=$sheader."X-Mailer:PHP/".phpversion()."\n";
$sheader=$sheader."Mime-Version: 1.0\n";
$sheader=$sheader."Content-Type: text/html";

mail($recipient,$subject,$contenuto,$sheader);

a ver si así les sirve mejor..........
Gracias!
Espero respuesta!
__________________
Flavia.
  #9 (permalink)  
Antiguo 05/12/2002, 14:36
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Prueba con la funcion htmlspecialchars() o htmlentities(). Seria algo asi:
Código PHP:
foreach ($HTTP_GET_VARS as $parametro => $valor)
{
if(!
in_array($parametro$nascosti))
{
if (
$valor!=''){
$mensajeC.="<tr><td><font face=arial size=2> $parametro</font></td><td><font face=arial size=2> ".htmlentities($valor)."</font></td></tr>";
}
}

Estas funciones transforman codigo HTML en texto. Es por si acaso algun valor contiene codigo HTML que descuadre la tabla.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 09/12/2002, 03:32
Avatar de flavia  
Fecha de Ingreso: noviembre-2002
Mensajes: 269
Antigüedad: 15 años
Puntos: 0
Sonrisa Gracias Josemi!

Lo utilizo ya mismo!
Saludos!
__________________
Flavia.
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:12.