Foros del Web » Programando para Internet » PHP »

codigo php dentro de base de datos...

Estas en el tema de codigo php dentro de base de datos... en el foro de PHP en Foros del Web. Hola forosweberos! Tengo una consulta algo avanzada... En años de programacion nunca me tope con algo asi, incluso en ASP no me pasaba, me pasa ...
  #1 (permalink)  
Antiguo 27/01/2009, 14:32
Avatar de Sommy  
Fecha de Ingreso: septiembre-2008
Mensajes: 228
Antigüedad: 15 años, 7 meses
Puntos: 6
Exclamación codigo php dentro de base de datos...

Hola forosweberos! Tengo una consulta algo avanzada... En años de programacion nunca me tope con algo asi, incluso en ASP no me pasaba, me pasa con PHP...

La cosa es que tengo un contenido dinamico, en my-sql... Parte del texto plano tiene dentro un require...

Código PHP:
<?php require 'archivo.php' ?>
Esto, esta mezclado con un tanto de html, dentro de unos divs, etc etc... El tema es que cuando traigo los datos, me lo ignora... Mi razonamiento logico fue, php trabaja del lado servidor, cuando me trae la ifnormacion, ya esta trabajando del lado cliente y no puede hacer nada... Me tome la molestia de hacer un pequeño grafico...



Hay forma de solucionarlo? Pense en usar expresiones regulares, o hacer un replace... pero no se me ocurre...

Lo que mas bronca me da , es que en la porqueria de ASP esto no pasa y funciona barbaro! Como puede ser que ASP supere en algo a PHP, tiene que haber modo...

Gracias!!!
  #2 (permalink)  
Antiguo 27/01/2009, 15:30
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: codigo php dentro de base de datos...

estas confundido.... el PHP del que hablas no se ejecuta ni en el servidor, ya que esta almacenado como texto plano

la solución...

usa la función eval() para evaluar el PHP de tu texto, bingo!


y si ASP lo permitía pues que fea falla de seguridad, imagina si escribieran algo peligroso en un comentario, del que no limpiaste el ASP inyectado.... genio....

jajaja .... ASP superando en algo a PHP, jajaja.....
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/01/2009, 15:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: codigo php dentro de base de datos...

Hola Sommy,

Si el texto contiene literalmente <?php require 'archivo.php' ?>, entonces debes de usar eval() para parsear el contenido como código PHP y ejecutarlo.

Saludos
  #4 (permalink)  
Antiguo 27/01/2009, 19:55
Avatar de Sommy  
Fecha de Ingreso: septiembre-2008
Mensajes: 228
Antigüedad: 15 años, 7 meses
Puntos: 6
Estos franceses si que hacen las cosas bien... no dejan de sorprenderme... Habia visto el eval(), pero en un ejemplo con variables dentro de comillas y pense que solo era para eso...

Gracias por la data!

Hola gente, sigo con este problema...

Al principio probe algo muy basico, que fue esto...

Código PHP:
$strColDer $arrCont[2]['contenido'];           
echo eval(
$strColDer); 
Pero me devolvio el siguiente error: Parse error: syntax error, unexpected '<'

Se me ocurrio sacarles al codigo de la base de datos las aperturas (<?php ?>), ya que segun el manual de php son innecesarias, el html me quedo asi:

Código HTML:
<tr>
    <td>require "archivo.php"; </td>
</tr> 
Nada lo mismo... Y hasta puse slashes en todos los "<" del html, nada nada y nada... Me puso en hacke... Entonces dije, "voy a buscar ejemplos en google" y todo el mundo, en todos los sitios daba el siguiente ejemplo...

Código PHP:
$cadena 'taza';
$nombre 'café';
$cad 'Esta es una $cadena con mi $nombre en ella.';
echo 
$cad"\n";
eval(
"\$cad = \"$cad\";");
echo 
$cad"\n"
Mi caso es mas complejo que unir 2 variables, y no consigo mas que errores... Modifique mi codigo por el siguiente:

Código PHP:
$strColDer $arrCont[2]['contenido'];           
echo eval(
"\$strColDer = \"$strColDer\";"); 
El primer error es:

Parse error: syntax error, unexpected T_LNUMBER in eval()'d code on line 1

Supuse que podia ser por las comillas dobles que hay en el html, dentro de la base de datos... entonces remplazo las dobles del codigo, por simples... Quedando asi...

Código PHP:
$strColDer $arrCont[2]['contenido'];           
echo eval(
'\$strColDer = \'$strColDer\';'); 
Ahora no hay error, y no hay nada! Simplemente me ignora... Entonces vuelvo el codigo a las comillas dobles y meto comillas simples en todo el html de la base... Lo mismo, ignorancia total...

Realmente no se como usar esta funcion en mi caso... Busque en el manual de php, en foros, en tutoriales... Estoy desconcertado... Encima PHP nunca se esmera para decirte bien que esta pasando, simplemente te dice "unexpected T_LNUMBER" y que ##~$% es eso!!!

Espero que puedan sacarme de este embrollo, muchas gracias!!

Ya que aun no me respondieron, aprovecho para contar lo ultimo que hice...

Encontre en wikipedia que se podia poner un "echo" dentro de la funcion eval(); El tema es que es como si hiciera un echo directamente... Si no le saco los tag de apertura <? ?> no muestra nada, y si los saco, me imprime el texto como plano, y me queda en una selda "require ...php"... El texto que use ahora es este...

Código PHP:
$strColDer $arrCont[2]['contenido'];
        eval(
'echo "$strColDer";'); 
Gracias!

Vamos por favor.... no dejen que mi teoria de que en ASP se puede y en PHP no se cumpla, defendamos a PHP!!! jajaja...

Segui buscando muchisimo, por miles de paginas, no doy con ninguna solucion... Es imposible que no se pueda meter un include en una linea de texto plano... el eval() lo pasa por alto, como si eso no fuera nada relevante...

AYUDAAA!!

Gracias!!

Última edición por GatorV; 28/01/2009 a las 11:15
  #5 (permalink)  
Antiguo 28/01/2009, 11:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: codigo php dentro de base de datos...

jajaja, PHP lo puede todo... tal ves tu no estas al nivel!

Código php:
Ver original
  1. <?php
  2.  
  3. $foo = null;
  4.  
  5. eval('$foo = date("dMY");');
  6.  
  7. echo $foo; // 13Jan2009  
  8.  
  9. $foo = eval('?' . '><p><' . '?php require "../foo.inc.php"; ?' . '></p>');
  10.  
  11. echo $foo;
  12. ?>

leyendo el manual de PHP nos dice...

Cita:
Existen algunos factores a tener en cuenta cuando se usa eval(). Recuerde que la cadena pasada debe ser código PHP válido, incluyendo cosas como la terminación de sentencias con un punto-y-coma de modo que el intérprete no falle en la línea siguiente al llamado a eval(), y escapar apropiadamente las cosas en cadena_codigo . Para mezclar salida HTML y código PHP, es posible usar una etiqueta de cierre PHP para abandonar el modo PHP.

bingo!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 28/01/2009 a las 11:18
  #6 (permalink)  
Antiguo 28/01/2009, 11:37
Avatar de Sommy  
Fecha de Ingreso: septiembre-2008
Mensajes: 228
Antigüedad: 15 años, 7 meses
Puntos: 6
Respuesta: codigo php dentro de base de datos...

Seguro no estyo al nivel! Por eso es bueno este foro, para las grandes dudas como esta. Ya mismo voy a probar esto, a ver que resulta... Es similar a expresiones regualres? No termino de entender, me voy a dejar tionear por sentido comun y les cuento...

Gracias!
  #7 (permalink)  
Antiguo 28/01/2009, 12:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: codigo php dentro de base de datos...

No, simplemente es entender como se manejan las cadenas de PHP, el limitador siempre es <?php ?>, al tu cerrar el string con ?>, PHP termina el proceso y cambia a modo texto y cuando encuentra otro <?php vuelve a entrar en modo PHP.

Saludos
  #8 (permalink)  
Antiguo 28/01/2009, 12:49
Avatar de Sommy  
Fecha de Ingreso: septiembre-2008
Mensajes: 228
Antigüedad: 15 años, 7 meses
Puntos: 6
Respuesta: codigo php dentro de base de datos...

Que buena explicacion!! Ahora todo me queda mas cerrado... Prefiero pecar de molesto, pero on me interesa que mi codigo ande (de hecho ahora esta funcionando) me interesa entenderlo... y lamentablente aun no entiendo... jeje

Fui modificando el codigo hasta que funciono, y quedo asi:

Código PHP:
$foo = eval('?' '>' .$arrCont[2]['contenido']);
echo 
$foo
El codigo es:

Código HTML:
<table width="310" border="0" align="center" cellpadding="0" cellspacing="0">
          <tr>
            <td width="310">&nbsp;</td>
          </tr>
          <tr>
            <td><?php require 'modules/login.php' ?></td>
          </tr>
          <tr>
            <td height="10"></td>
          </tr>
          <tr>
            <td height="1" align="center"><table border="0" cellpadding="0" cellspacing="0" class="gris_lineas">
                <tr>
                  <td height="1"><img src="images/separador.gif" width="255" height="1"></td>
                </tr>
            </table></td>
          </tr>
          <tr>
            <td height="10"></td>
          </tr>
          <tr>
            <td><div align="center"><img src="images/futuro_flash/contacto.jpg" width="259" height="62" /></div></td>
          </tr>
          <tr>
            <td height="10"><div align="center"></div></td>
          </tr>
        </table> 
Ahora, cual es el delimitador? en que momento se activa php, cuando en el texto plano aparece un "?" ? y porque si le saco el > deja de andar?

Me tiene mal este tema del eval(), pero cuanto mas dificil, mas apacionante...

Gracias!
  #9 (permalink)  
Antiguo 28/01/2009, 12:52
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: codigo php dentro de base de datos...

es un ejemplo... pero literalmente es el mismo resultado...

concatenar '?' . '>' es igual a solo '?>' osea....

Cita:
Para mezclar salida HTML y código PHP, es posible usar una etiqueta de cierre PHP para abandonar el modo PHP.
Código PHP:
$foo = eval('?> esto es HTML <?php echo "y yo soy PHP"?> esto es HTML, texto, etc...');
que es lo que te decía GatorV

Cita:
[...] el limitador siempre es <?php ?>, al tu cerrar el string con ?>, PHP termina el proceso y cambia a modo texto y cuando encuentra otro <?php vuelve a entrar en modo PHP [...]
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 28/01/2009, 13:01
Avatar de Sommy  
Fecha de Ingreso: septiembre-2008
Mensajes: 228
Antigüedad: 15 años, 7 meses
Puntos: 6
Respuesta: codigo php dentro de base de datos...

Cita:
Iniciado por GatorV Ver Mensaje
...y cuando encuentra otro <?php vuelve a entrar en modo PHP...
El tema es donde le indico que haga modo PHP cuando se tope con un <?php, si en ningun momento lo aclaro... Si la respuesta es que es inmplisito del lenguaje, porque le aclaro lo de "?>", eso no deberia tambien ser implisito...?

Mi pregunta es porque pongo "?>" y no "<?php".

Gracias por la paciencia y transmitirme sus conocimientos!
  #11 (permalink)  
Antiguo 28/01/2009, 13:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: codigo php dentro de base de datos...

mmm....

mira... eval() ejecuta PHP puro... sin etiquetas <?php ?>

eval() funciona así...

Código:
echo 'algo'; ?> esto es otra cosa.... <?php echo 'vuelvo a ' . phpversion();

pero no así todo el parser de PHP ... que trabaja así...

Código:
... <?php echo 'algo'; ?> esto es cualquier otra cosa.... <?php echo 'vuelvo a ' . phpversion();
la diferencia, esta en que eval() ejecuta solo PHP ... por eso debes salir del modo PHP usando ?> al inicio de tu cadena a evaluar... para que, de modo natural... tan solo interpreta los bloques <?php ?>

es por eso que tu código al inicio no funcionaba... ya que al estar dentro del modo PHP, usando eval() todo te daba errores, ya que era un problema de sintaxis...

al poner eval('?> lo que sea...') evitas el problema, saliendo del modo PHP ... y volvemos a lo mismo... tan solo interpreta los bloques <?php ?>

¿acaso es tan dificil entender esto???
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 28/01/2009, 13:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: codigo php dentro de base de datos...

Cita:
Iniciado por Sommy Ver Mensaje
Mi pregunta es porque pongo "?>" y no "<?php".

Gracias por la paciencia y transmitirme sus conocimientos!
Pues la simple razón es que <?php sirve para entrar en modo PHP, y ?> para salir de modo PHP, si tu pones <?php vas a generar un error de sintaxis por ejemplo:
Código:
<?php <p><?php include("algo.php"); ?></p>
Eso es un error de sintaxis ya que PHP va a ver <p> y va a decir que hago con esto? ya que < es un operador menor que, y no lo va a entender.

Recuerda algo simple eval evalua una cadena como si fuera código PHP, ya te lo explico más claro pateketrueke, pero yo creo antes de meterte a cosas más fuertes como eval() deberías de leer un poco sobre como funciona PHP y como es la sintaxis del lenguaje, ya que con eso evitarias problemas como este.

Saludos
  #13 (permalink)  
Antiguo 28/01/2009, 14:01
Avatar de Sommy  
Fecha de Ingreso: septiembre-2008
Mensajes: 228
Antigüedad: 15 años, 7 meses
Puntos: 6
Respuesta: codigo php dentro de base de datos...

Cada vez lo entiendo mejor, pero realmente me cuesta encontrarle la vuelta... Debe ser poruqe yo tenia una falsa idea, que era la siguiente:

"tiro un choclo adenro del eval(), esta funcion magica detecta si dentro de todo ese choclo hay algo que sea php y lo ejecuta..." pero al parecer, solo acepta sintaxis php dentro...

Luego de tu explicacion veo el ejemplo de la taza y el cafe...

Código PHP:
$cadena 'taza';
$nombre 'café';
$cad 'Esta es una $cadena con mi $nombre en ella.';
echo 
$cad"\n";
eval(
"\$cad = \"$cad\";");
echo 
$cad"\n"
Y pienso que 'Esta es una $cadena con mi $nombre en ella.'; no es una sintaxis correcta de php, y sin embargo no tira error de sintaxis... Sin duda debe ser algo bien simple que no puedo ver, y cuando me de cuanta dire "ahhh, soy un ###!!!"
  #14 (permalink)  
Antiguo 28/01/2009, 14:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: codigo php dentro de base de datos...

mmm... si el ejemplo es muy claro!!

$variables en comillas sencillas NO se evalúan... ¿porque dices que no esta bien esta sintaxis???

por eso primero imprime literalmente la cadena... y al usar eval(), se re evalúa todo el contenido de la expresión colocando la primer cadena en comillas dobles...

y esto resulta en la evaluación de las variables contenidas en la cadena inicial, provocando su perfecta interpretación...

¿¿cual es el problema???
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #15 (permalink)  
Antiguo 28/01/2009, 14:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: codigo php dentro de base de datos...

Repito, creo te aclararias muchas dudas, si lees como funciona PHP y su sintaxis, ya que si no conoces el lenguaje vas a encontrarte con muchas "trabas".

Saludos
  #16 (permalink)  
Antiguo 28/01/2009, 16:52
Avatar de Sommy  
Fecha de Ingreso: septiembre-2008
Mensajes: 228
Antigüedad: 15 años, 7 meses
Puntos: 6
Respuesta: codigo php dentro de base de datos...

No, el tema es que entiendo perfectamente la sintaxis. De hecho programo hace mucho y en varios lenguajes "php, asp, java, javascript y action script". Se lo que es una comilla simple, concatenar, etc... No soy taaan torpe! Pero el eval() me saco de mi logica de programacion, me ha descarrilado... Si vieran los sistemas que hice en distintas empresas, entenderian que no soy inexperto... Pero no importa, quiza algun dia me despierto y hago clik y entiendo esta maldita funcion... Lo elemental es invisible a los ojos decia el principito... Estoy frente a algo super elemental al parecer por sus comentarios... No los molesto mas! gracias!
  #17 (permalink)  
Antiguo 28/01/2009, 23:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: codigo php dentro de base de datos...

Lo que pasa esque eval() es simplemente un construct que ejecuta código PHP tal cual el parser lo hace, muchos lenguajes tienen su alternativa.

Por eso mi comentario de la sintaxis, ya que si comprendes como se maneja la sintaxis entonces el evaluarlo por eval() va a ser indiferente.

Saludos
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 11:08.