Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Variables en PHP y ECHO

Iniciado por matriax, 18 de Junio de 2009, 02:05:14 PM

« anterior - próximo »

matriax

Hola,


Tengo un template el cual esta lleno de variables que coje la propia pagina. Las variables en cuanto a texto funcionan sin problemas usando:
<? echo $nombreweb ?>

Sin embargo no se como hacer que se ejecute un codigo php metido en una variable. Me explico:

Ejemplo:


<?
$nombreweb =' TayKrOn Games';
?>

<Html>

<? echo $nombreweb ?>



Eso funciona sin problemas

Lo que no se como hacer es que me muestre correctamente codigo PHP:

Ejemplo:


<?
$script =  '<? echo script(id1,true,false); ?>';
?>

<Html>

<? echo $script ?>



No me muestra el script como suponia, ya que el echo es solo para texto(pero por probar).

Lo he intentado de otras formas y nada, llevo toda la mañana XD y no se si es que no se podra o lo hago mal.

A una malas metiendo un script.php(Que contiene <? echo script(id1,true,false); ?>) en esa carpeta y en el template metiendo  <? include 'script.php';  ?>  funciona sin problemas.

Pero claro esta si me puedo ahorrar ese script.php (el cual sera distinto para cada web) y meterlo en la propia web en forma de $script pues perfecto :) .

Saludos.


Pagina Oficial: http://www.taykron.com
Flash Portal : http://www.arkatia.com
Blog Personal : http://matriax.blogspot.com/

fjfnaranjo

Puedes usar una función que se llama "eval".

Aunque usarla es un poco, no se, anti-usable :P
fjfnaranjo.com - Creating entertainment - Creando entretenimiento
fjfnaranjo [4t] gm4il [d0t] c0m (mail y msn)

matriax

Cita de: fjfnaranjo en 18 de Junio de 2009, 03:34:40 PM
Puedes usar una función que se llama "eval".

Aunque usarla es un poco, no se, anti-usable :P

Pues me funciona perfectamente usandolo asi:



<?
$script =  ' echo script(id1,true,false); ';
?>

<Html>

<? eval ($script) ?>



CitarAunque usarla es un poco, no se, anti-usable...

Y ahora la pregunta es, ¿Por que dices eso? ¿inconvenientes?

Saludos y gracias.

Pagina Oficial: http://www.taykron.com
Flash Portal : http://www.arkatia.com
Blog Personal : http://matriax.blogspot.com/

josepzin

No uses <? ... ?>, usa <?php ... ?>

Yo uso esta guía de estilo de programacion PHP: http://codeigniter.com/user_guide/general/styleguide.html

josepzin

En mi vida usé el eval ese... ¿qué estarás haciendo para que lo necesites??? :D:D

josepzin

Ha, y las etiquetas HTML todas en minusculas: <head> <html> etc.

matriax

Cita de: josepzin en 18 de Junio de 2009, 05:19:54 PM
En mi vida usé el eval ese... ¿qué estarás haciendo para que lo necesites??? :D:D

No estoy haciendo nada raro, pero como no se de .php en lugar de hacer una base de datos con el template,etc.. etc... como no tengo ni idea pues voy a base de "apaños" para hacer lo que quiero.

Imaginate que tienes varias paginas donde lo unico que cambia es el contenido referido al juego.

Lo que hago es "include Etc..." para cargar ese template. El cual lleva muchas $Variables las cuales las meto al principio de la pagina de ese juego. Una de ellas tiene que ser un script en .php con su ID. Por lo que la unica forma de poder hacerlo hasta el momento es esa.

De forma que por ejemplo tenga un SlideColors.php tal que asi:

Ejemplo de lo que tendria SlideColors.php :


<?
$autorname = 'TayKrOn Games';
$gamename = 'Slide Colors';
$urlautor = 'http://www.taykron.com';
$description = 'Es un juego match3,etc....';
?>

<?
/* Template */
include ($_SERVER['DOCUMENT_ROOT'] . '/pc/games/template.php');
?>



Ya que ese template.php seria algo asi:

Hola! te encuentras en la pagina oficial de <? echo $gamename ?> .<br><br>

<? echo $gamename ?> <? echo $description ?> .
Etc...

Seguramente haya una forma mejor de hacer eso, pero como no sabia ninguna pues he ido buscandome la vida por google para ir haciendo todo lo que queria, hasta que me he encontrado con eso que no habia forma de que saliera bien XD.


Pagina Oficial: http://www.taykron.com
Flash Portal : http://www.arkatia.com
Blog Personal : http://matriax.blogspot.com/

HarvesterOfAcorns

Y por qué no utilizas una base de datos de las de verdad? MySQL por ejemplo, es "gratis" y va de puta madre, eso te ahorrará mucho trabajo y abrirá posibilidades enormes para que tu web crezca con menor, siempre relativamente, esfuerzo.

matriax

Cita de: HarvesterOfAcorns en 19 de Junio de 2009, 12:57:25 AM
Y por qué no utilizas una base de datos de las de verdad? MySQL por ejemplo, es "gratis" y va de puta madre, eso te ahorrará mucho trabajo y abrirá posibilidades enormes para que tu web crezca con menor, siempre relativamente, esfuerzo.

Mmmm.... porque no tengo ni idea de bases de datos? XD

Digamos que lo estoy haciendo todo un poco a "prueba/fallo" y mirando en google, buscando soluciones cada 2x3 para los problemas que me van saliendo,etc... pero bueno, al menos voy avanzando y conforme lo tengo me sirve perfectamente, al menos de momento  ::) .
Pagina Oficial: http://www.taykron.com
Flash Portal : http://www.arkatia.com
Blog Personal : http://matriax.blogspot.com/

josepzin

#9
Yo creo que estás haciendo desastres a nivel conceptual :D:D

Pero si no tienes idea y vas solucionando tus problemas, mejor así que nada.

De todos modos, para el tema de usar un template yo tenía (antes de pasarme al MVC) una solucion mucho mas simple que todo eso que planteas.

Creo que algo te comenté, la idea es hacer algunos simples includes y nada mas, ejemplo:

index.php:
Citar<¿php
$title = 'Titulo de la web';
$active = 'inicio'; //estos parametros te sirven para saber que opcion del menu esta activa

include('header.php'); // en header.php tienes todo el codigo HTML que estaria antes de los datos
?>
<p>Bienvenido a mi web</p>
<?php include('footer.php'); // HTML con el pie de pagina ?>

Luego en header.php algo asi:
Citar<?php header("Content-Type: text/html; charset=utf-8"); // <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<html>
<header>
<title><?php echo $title ?></title>
cargas css
cargas js
metas
</header>
<body>
<h1><?php echo $title ?></h1>
<ul class="menu">
<li><a href="/">Inicio</a></li>
<li><a href="/juegos.php">Juegos</a></li>
etc..
</ul>
<div class="body">

Y en footer:
Citar
</div>
<div class="footer">
<p>Pie de pagina</p>
<div>
</body>
</html>


Luego para la pantalla juegos.php
index.php:
Citar<¿php
$title = 'Nuestros juegos';
$active = 'juegos'; //estos parametros te sirven para saber que opcion del menu esta activa

include('header.php');
?>
Listado de juegos lalala
<?php include('footer.php');  ?>

Como ves es supersimple, asi lo hacia yo.

matriax

#10
Cita de: josepzin en 19 de Junio de 2009, 09:07:28 AM
Yo creo que estás haciendo desastres a nivel conceptual :D:D

Pero si no tienes idea y vas solucionando tus problemas, mejor así que nada.

De todos modos, para el tema de usar un template yo tenía (antes de pasarme al MVC) una solucion mucho mas simple que todo eso que planteas.

Creo que algo te comenté, la idea es hacer algunos simples includes y nada mas, ejemplo:

index.php:
Citar<¿php
$title = 'Titulo de la web';
$active = 'inicio'; //estos parametros te sirven para saber que opcion del menu esta activa

include('header.php'); // en header.php tienes todo el codigo HTML que estaria antes de los datos
?>
<p>Bienvenido a mi web</p>
<?php include('footer.php'); // HTML con el pie de pagina ?>

Luego en header.php algo asi:
Citar<?php header("Content-Type: text/html; charset=utf-8"); // <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<html>
<header>
<title><?php echo $title ?></title>
cargas css
cargas js
metas
</header>
<body>
<h1><?php echo $title ?></h1>
<ul class="menu">
<li><a href="/">Inicio</a></li>
<li><a href="/juegos.php">Juegos</a></li>
etc..
</ul>
<div class="body">

Y en footer:
Citar
</div>
<div class="footer">
<p>Pie de pagina</p>
<div>
</body>
</html>


Luego para la pantalla juegos.php
index.php:
Citar<¿php
$title = 'Nuestros juegos';
$active = 'juegos'; //estos parametros te sirven para saber que opcion del menu esta activa

include('header.php');
?>
Listado de juegos lalala
<?php include('footer.php');  ?>

Como ves es supersimple, asi lo hacia yo.

Y asi lo estoy haciendo yo josepzin, como me dijistes. Pero te repito, que lo de eval lo unico que lo utilizo es para usar un script, si no, no lo utilizaria. Y la unica alternativa para no usar el "eval" es meter un archivo script.php en cada carpeta de juego y meter luego un include en el template que llame a ese script.php y solucionado.

Pero como quiero ahorrarme ese script.php, meto las lineas en una variable y luego uso eval ya que es la unica forma de que me muestre bien el script usando solo un .php por juego(ya que el uso del scripts es diferente para cada uno, si fuera igual no habria ningun problema).

En fin que de momento voy tirando XD.

Ah, y Gracias a todos por la ayuda!  ;)
Pagina Oficial: http://www.taykron.com
Flash Portal : http://www.arkatia.com
Blog Personal : http://matriax.blogspot.com/

HarvesterOfAcorns

Las bases de datos, al menos MySQL que es la que conozco, son fáciles de utilizar una vez instaladas y esto es algo que muchos hosting ya lo hacen por ti, digamos que vienen de serie.

Cita de: matriax en 18 de Junio de 2009, 05:33:08 PM

De forma que por ejemplo tenga un SlideColors.php tal que asi:

Ejemplo de lo que tendria SlideColors.php :


<?
$autorname = 'TayKrOn Games';
$gamename = 'Slide Colors';
$urlautor = 'http://www.taykron.com';
$description = 'Es un juego match3,etc....';
?>

<?
/* Template */
include ($_SERVER['DOCUMENT_ROOT'] . '/pc/games/template.php');
?>



A mi entender para lo que necesitas en eso que estás haciendo sería suficiente conocer algunas sentencias SQL y unas pocas funciones PHP; los beneficios serían notorios, creo que podrías reducirlo todo a un único archivo que podrías utilizar para los distintos juegos y para otros que decidas incluir después, con la ventaja que eso supone en futuras modificaciones.

Para hacerlo con un solo archivo podrías seguir el siguiente planteamiento, con MySQL:

Código (php) [Seleccionar]

<?php

//Archivo de juego, único con la dirección http://www.pagina.com/juegos.php?juego=comecocos

//recoges el valor juego de la url

$juego $_GET("juego");

//accedes a la base y obtienes los datos

mysql_select_db("tu_base_de_datos");

mysql_connect('host','user',pass');

//seleccionas los datos para la tabla juegos donde el campo juego coincide con el que recibes en //la url

$res = mysql_query("select * from tabla_juegos where juego = '
$juego'");

//recoges los datos en una matriz asociativa

$row = mysql_fetch_array($res);

//cierras las conexión

mysql_close();

//ya tendrás todas tus variables para este juego en particular

$autorname = $row["autorname"];
$gamename = $row["gamename"];
....
// y siguiendo tu scritp donde incluías el template
?>


Hola! te encuentras en la pagina oficial de <? echo $gamename; ?> .<br><br>
...
...

Como ves te has ahorrado el include del template y lo mejor de todo es que evitas hacer un archivo para cada juego en particular, basta con tener una entrada en tu tabla_juegos de la base de datos para cada juego.

Por lo demás no huyas de los include y los require, la estructura que apunta josepzin es la más apropiada si has de reutilizar código en distintas páginas y si lo que necesitas es utilizar el mismo código en distintas páginas y varias veces en cada una de ellas, combinas el uso de includes con el de funciones.

Código (php) [Seleccionar]


// en funciones.php

...

function script($id,$valor1,$valor2,...){

echo $valor;
if($valor2 > valor1){

}
...

}

function talycual(){}

...

//en juego.php

include('funciones.php');
include('header.php');

// es preferible usar include_once()
// o require_once() para evitar repetir la inclusión de código


//tus variables

$i1 = ...;
$i2 = ...;

$v1 = ...;
$v2 = ...;

//utilizas tus funciones

script($i1,$v1,$v2);
talycual();

<tags></tags>

//las reutilizas

script($i2,$v2,$v1);

<tags></tags>
.....

include('footer.php');




Creo que te merece la pena el esfuerzo de aprender las bases de datos, y en mi opinión es mejor aprenderlo a la par que el PHP.

StraT

Hola Matriax:

No entiendo muy bien lo que quieres hacer, sinceramente. No obstante, decirte que eval lo que hace es coger un texto e interpretarlo como código fuente PHP, luego ejecutarlo. Esto, aparte de que no suele ser necesario -y cuando lo es generalmente es porque algo se está haciendo mal- es muy inseguro. Si consiguen "violar" el parámetro, pueden ejecutar cualquier cosa en tu servidor (especialmente si vas a pasar por url el parámetro... ains).

En la función "script" que has puesto, suponiendo que script retorne algo textual, deberías hacer $script = script(id1,true,false); y luego echo $script; De todas formas ya te digo, si nos explicas mejor lo que quieres hacer, te lo hacemos xD.

Un saludo ^^
quot;Solo hay dos cosas infinitas, el universo y la estupidez humana, aunque de lo primero no estoy muy seguro\\\" Einstein

matriax

Lo que queria hacer ya esta hecho , es el portal flash.

Y lo necesitaba entre otras cosas para esto:


La pagina "template_games.php" tiene esto:

Antes del <html>
Citar<?
/* Para los ratings */
include ($_SERVER['DOCUMENT_ROOT'] . '/scripts/rating/includes/rating_functions.php');
?>
( Con esto cargo la funcion para las puntuaciones en la pagina de los templates )


Luego en el Body incluyo esto:
Citar<? eval ($rateid) ?>
( Le digo donde quiero mostrar la puntuacion del juego, la cual cojera de un script de la pagina del juego)



Y la pagina del juego freakquiz.php tiene esto:
Citar<?php
$flashname = 'Freak Quiz';
$autorname = 'TayKrOn Games';
$urlautor = 'http://www.taykron.com';
$swfname = 'freakquiz.swf';
$size = 'width="640" height="480"';
$rateid = ' echo pullRating(1,true,false,true);';
Etc...
?>

<?
/* TEMPLATE GAMES */
include ($_SERVER['DOCUMENT_ROOT'] . '/templates/games/template_games.php');
?>

- Lo que hago es cargar la plantilla templates_games.php y todas las variables se sustituyen por las que estan definidas mas arriba. entre ellas la de $rateid.

Es la unica forma que he encontrado para hacer que funcione, ya que las otras formas o daban error o me sacaban como texto "echo pullRating(1,true,false,true);" en lugar de como codigo que es lo que si me hace eval.

Alguna otra solucion que se pueda aplicar a como lo tengo montado ahora mismo y sin utilizar "eval" ?
Pagina Oficial: http://www.taykron.com
Flash Portal : http://www.arkatia.com
Blog Personal : http://matriax.blogspot.com/

StraT

Pues sí...

$rateid = pullRating(1,true,false,true);

Y luego <?=$rateid?> en el body. Y listos.

Saludos
quot;Solo hay dos cosas infinitas, el universo y la estupidez humana, aunque de lo primero no estoy muy seguro\\\" Einstein






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.