Foros del Web » Programando para Internet » PHP »

codigo php en un campo de BD

Estas en el tema de codigo php en un campo de BD en el foro de PHP en Foros del Web. Buenas no consigo hacer lo siguiente: Tengo una tabla con un campo en el que meto codigo html y alguna variable php entremedias con su ...
  #1 (permalink)  
Antiguo 03/02/2010, 12:47
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 16 años, 11 meses
Puntos: 3
codigo php en un campo de BD

Buenas

no consigo hacer lo siguiente:

Tengo una tabla con un campo en el que meto codigo html y alguna variable php entremedias con su correspondiente <? echo $var1; ?> entr medias ya que casi todo lo demas es html.

El caso es que intento usa eval pero no debe de ser correcto porque el codigo html lo puedo sacar simplemente con un echo del campo pero logicamente el trocito de php con var1 que hay dentro no lo evalua. Po ello pienso en usar EVAL pero no hay forma.

evidentemente antes declaro la variable $var1 = "lo que sea"; pero ni por esas.

Cómo creeis que debería hacerlo.

Se trata de montar una plantilla base (que yo escoja de una base de datos) con un mensaje interno que pueda ir variando (tambien escogido de una base de datos). Accedo sin problemas a ambas bases de datos y asigno a var1 y var2 sin problemas ambas plantillas, pero lo que no hace es meter var1 entremedias de var2, tal y como le indica el trocito de php embutido entre el html.

Espero haberme aclarado...
  #2 (permalink)  
Antiguo 03/02/2010, 12:50
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: codigo php en un campo de BD

Con eval debería funcionar sin problemas.

¿Cómo lo intentaste? ¿Te dio algún error?

P.S.: Tema trasladado desde la sección de MySQL.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 03/02/2010, 12:58
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 16 años, 11 meses
Puntos: 3
Respuesta: codigo php en un campo de BD

Pues la verdad es que he probado ya varias formas y nada

Hago la consulta a la tabla y saco el campo texto y lo meto en llamemosle $plantilla todo el texto que hay en plantilla es html con lo cual se ejecuta todo si le pongo un echo $plantilla, pero eso no puedo hacerlo porque dentro hay un trozo de texto en php ( <? echo $msg; ?> )y se lo salta evidentemente si solo hago echo $plantilla.

Así que hago: echo eval($plantilla); pero sigue sin resolver el trocito de codigo php
  #4 (permalink)  
Antiguo 03/02/2010, 13:00
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: codigo php en un campo de BD

Si contiene código HTML, debes usar el tag de cierre para que lo ejecute correctamente:
Código PHP:
Ver original
  1. eval('?>' . $plantilla);
Véase: http://www.php.net/manual/en/function.eval.php

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 03/02/2010, 13:05
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 16 años, 11 meses
Puntos: 3
Respuesta: codigo php en un campo de BD

MIllllllllll gracias.

Eso era.
  #6 (permalink)  
Antiguo 03/02/2010, 13:33
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: codigo php en un campo de BD

intergus:

Recuerda que eval = evil (Eval es maligno)!

Te propongo la siguiente solución:

Código PHP:
Ver original
  1. $html = '<p><h1>%s</h1>Mi texto estatico...</p>';
  2.  
  3. $html = sprintf($html, $myVar);
__________________
I see dead pixels
  #7 (permalink)  
Antiguo 03/02/2010, 13:48
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: codigo php en un campo de BD

Cita:
Iniciado por SergeMedina Ver Mensaje
Recuerda que eval = evil (Eval es maligno)!
¿Por qué?

Por poner un ejemplo, vBulletin (así como otros sistemas) usan eval() para interpretar las plantillas.

Claro, hay que tener muy en cuenta la cuestión de rendimiento. Pero no necesariamente se puede afirmar que eval = evil.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 03/02/2010, 14:08
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: codigo php en un campo de BD

Porque puede ser un hoyo de seguridad si los datos alimentados por usuarios de una aplicación web son evaluados. Y si se considera que el contenido obtenido mediante algún formulario rara vez es filtrado (asumo eso porque he visto scripts de algunos usuarios de este foro). Estoy de acuerdo que hay casos en el que eval es útil, pero creo que mejores soluciones se pueden encontrar.

Opino que si se va a utilizar debe de ser con extrema precaución(filtrado de datos, validaciones, etc).
__________________
I see dead pixels
  #9 (permalink)  
Antiguo 03/02/2010, 14:16
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: codigo php en un campo de BD

Claro, en eso estamos de acuerdo.

De hecho, cuando escribí estaba pensando en partes internas de un sistema donde no interfiere una entrada del usuario (como el ejemplo que puse, interpretar una plantilla)

Y sí, hay que tener extremo cuidado con cualquier dato que venga del usuario, y eso es válido en cualquier caso no sólo para eval(), hasta usar PHP_SELF puede resultar inseguro si no se realiza el filtrado correcto.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #10 (permalink)  
Antiguo 04/02/2010, 02:40
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 16 años, 11 meses
Puntos: 3
De acuerdo Respuesta: codigo php en un campo de BD

Ok, estoy de acuerdo con ambos.

Este caso es seguro pues la plantilla base y la plantilla que irá entre medias de la base están en tablas y el usuario solo puede elegir la combinación a usar. En ningún caso puede escribir código en ningun textarea o similar y luego hacer el EVAL.

además lo que pretendo es obtener ya un código html donde se habrán resuelto los trozos de código php y enviar ese html a los destinatarios escogidos. es una especie de boletines a la carta.

Por tanto este caso parece seguro en ese aspecto.

Gracias a ambos.
  #11 (permalink)  
Antiguo 05/02/2010, 05:42
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 16 años, 11 meses
Puntos: 3
Respuesta: codigo php en un campo de BD

Cita:
Iniciado por David Ver Mensaje
Si contiene código HTML, debes usar el tag de cierre para que lo ejecute correctamente:
Código PHP:
Ver original
  1. eval('?>' . $plantilla);
Véase: http://www.php.net/manual/en/function.eval.php

Saludos.
Hola David, de nuevo. Mi gozo en un pozo. No se que pasa pero me imprime el resultado del eval sin añadir ningún echo.

Solo pretendo que me meta el codigo evaluado, es decir ya puro html procesadito en una variable, sin embargo la imprime en pantalla. Uso esta sentencia:

$cuerpo = eval("?>".$bolbase_msg);

Pues solo con eso me imprime el resultado sin necesida de hacer despues un echo $cuerpo;

Hay alguna solución, porque lo que pretendo es meter todo el codigo evaluado en una variable para enviarla por mail($para, $asunto, $cuerpo, $cabeceras)

  #12 (permalink)  
Antiguo 05/02/2010, 05:59
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: codigo php en un campo de BD

En ese caso puedes capturar la salida:
http://www.php.net/manual/en/ref.outcontrol.php
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.

Etiquetas: bd, campos
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 15:09.