Pregunta Contestada Nº1

Bueno, primero que nada, decir que mi blog parseo solo la dejaré con fines de presentar proyectos y desarrollos de proyectos, y esta web dejarla únicamente para postear tutoriales y respuestas a ciertas consultas que se han hecho en la web y he podido resolver correctamente, y en ciertos casos, si no di una solución concreta, aquí plantear la totalidad o gran parte de la solución.

Partimos!

Un usuario de un foro en el que generalmente doy soporte, planteó la siguiente duda que para algunos es básica, pero para otros no tanto y para estos últimos va dirigido este post:

¿Cómo hacer un echo dentro del mismo sitio?

Probablemente, la pregunta en si no se entienda sin un contexto de pormedio, pongamoslo así:

¿Qué sucede cuando queremos, que al hacer una petición php se mantenga la estructura visual de la página?

Hay muchas soluciones para este hecho, una de las que di en dicho foro fue el uso de secciones y templates.

La otra solución, tiene un sólo nombre…Ajax.

Por ahora sólo me enfocaré en el uso de secciones y templates, porque para programadores novatos, toma menos tiempo de entender, ya que para entender todo lo que Ajax involucra hay que tener un previo conocimiento en Javascript.

¿Qué se recomienda tener claro para este post?

Recomiendo tener claro los siguientes temas:

  • Uso de la función include()
  • Uso de la variable $_GET

Sin más que agregar, voy a dar comienzo a la solución del problema planteado al principio:

  1. ¿Cúal es la idea de las secciones?
    La idea de las secciones es brindar al sitio cierta clase de “orden”, que beneficiará tanto al desarrollador como al usuario, ya que para acceder a los distintos destinos dentro del sitio ya no será necesario valerse de los nombres de los archivos, salvo la primera vez (cuando se esté desarrollando el sitio), otro beneficio, es poder usar una misma estructura visual para todas las peticiones php, que solo se cargará una vez y quedará almacenada en la información del sitio, por lo que no habrá que cargar imagen por imagen una y otra vez.
  2. ¿Qué es un template?
    Según nuestra amiga Wikipedia un template o plantilla es:

    • Una forma de dispositivo que proporciona una separación entre la forma o estructura y el contenido.
    • Relativo a sistema computacionales, por ejemplo paquetes de programas basados en la web, utilizan en la actualidad un sistema de plantillas para separar la lógica del programa del formato visualizado. Típicamente, estas plantillas incluirán variables (frecuentemente denotadas como {VARIABLE}), y posiblemente unos pocos operadores lógicos para permitir una mejor adaptabilidad de la plantilla.

    Ambas definiciones (escogidas no al azar), involucran el concepto de separación, ¿por qué lo he escogido?, sencillo, porque ello es lo que buscamos, separar las peticiones de la estructura propiamente tal.

Lo que debe resultar al final de este tutorial es algo (más producido obviamente) como ésto.

Ahora, vamos a trabajar con dos archivos nada más, el resto basta con entender como funciona el segundo archivo:

  1. index.php (Plantilla):
    Este archivo de ejemplo será básico, pero en pocas palabras es el que contiene la estructura principal del sitio, es aquel elemento del sitio que se mantendrá tal cual.
    El archivo en cuestión es el siguiente:

    <html>
    <head>
    <title>Ejemplo de secciones http://trickyweb.wordpress.com</title>
    </head>
    <body>
    <?
    /* La idea es que la variable $pg capta el valor contenido en la url y cada valor para $pg es una sección */
    $pg = $_GET["pg"];
    switch($pg){
    case 1:
    $header = "Página 1";
    break;
    default:
    if(empty($pg)){
    $header = "Index";
    }else{
    $header = "ERROR 404";
    }
    break;
    }
    ?>
    <div id="header" style="border:1px black solid">
    <? echo $header; ?>
    </div>
    <div id="contenido" style="border:1px black solid">
    <? include("contenido.php") ?>
    </div>
    <div id="footer" style="border:1px black solid">
    <a href="http://trickyweb.wordpress.com">TrickyWeb 2009</a>
    </div>
    </body>
    </html>

  2. contenido.php:
    Este archivo contiene básicamente las instrucciones para incluir ciertos archivos en los momentos necesarios, para ejemplo, te invito a hacer un archivo html llamado 1.php que contenga el contenido que quieras, ya que luego lo ocuparás dentro del ejemplo:


    <?
    //Capturamos la variable $pg contenida en la URL
    $pg = $_GET["pg"];
    switch($pg){
    case 1:
    if(file_exists("1.php")){
    //Si el archivo existe, se incluye
    include("1.php");
    }else{
    //Si el archivo no existe, sale un mensaje de error.
    echo "El archivo no existe";
    }
    break;
    default:
    if(empty($pg))
    echo "Estás en el index!!";
    else
    echo "La página no existe!";
    break;
    }
    ?>

Y con eso estaría listo el tutorial, la idea es que del ejemplo puedas ir flexibilizando la codificación, no es necesario que los nombres de archivo sean 1,2,3… o el contenido de la variable (o el nombre de la variable) sean el mismo, de hecho, el contenido puede ser alfanumérico.

Cualquier duda, sugerencia o comentario son bienvenidos.

Bytes!

VN:F [1.6.8_931]
Rating: 0.0/10 (0 votes cast)

6 Responses to “Pregunta Contestada Nº1”

  1. RNT says:

    Buena explicación, creo que siempre es bueno poner unas pocas ideas de seguridad cuando se programe.

    Hacer como:

    include($_GET["pg"]);

    Son una muy mala idea, ya que permitimos que se realicen inclusiones de archivos no deseados.

    Siempre se debe validar que el contenido de las variables (tanto en $_GET como en $_POST), para solo utilizarlas cuando corresponda.
    Por ejemplo, no permitir caracteres “/”, “\” o “..”, a la vez de verificar si el archivo existe, o cosas así.

    Evitemos “hackeos” por malos sistemas mal programados, y así nuestro prestigio nunca se verá afectado!

    Saludos!

    UN:F [1.6.8_931]
    Rating: 0.0/5 (0 votes cast)
  2. cizambra says:

    Siempre se debe validar que el contenido de las variables (tanto en $_GET como en $_POST), para solo utilizarlas cuando corresponda.
    Por ejemplo, no permitir caracteres “/”, “\” o “..”, a la vez de verificar si el archivo existe, o cosas así.

    En efecto, por eso puse como ejemplo, un switch que elija sólo números, ya que así, en cualquier caso aparte, simplemente no se hace nada. Los caracteres “/”, “\” o “..” generalmente afectan durante la inclusión de un $_GET como bien mencionaste antes.

    Gracias por el comentario!, nunca está de mas hacer esas acotaciones, se me pasó esta vez por tratar de acortar un poco el tutorial, trataré de solucionarlo para los siguientes tutoriales, saludos!

    UN:F [1.6.8_931]
    Rating: 0.0/5 (0 votes cast)
  3. Very nice blog, your article is interesting, i have bookmarked it for future referrence

    UN:F [1.6.8_931]
    Rating: 0.0/5 (0 votes cast)
  4. resveratrol says:

    Good work, your articles are very interesting, i am glad that i googled your blog

    UN:F [1.6.8_931]
    Rating: 0.0/5 (0 votes cast)
  5. You have a lot of interesting articles here, but you must improve your blog design

    UN:F [1.6.8_931]
    Rating: 0.0/5 (0 votes cast)
  6. unlock codes says:

    I came across your article, and i think you are very good writer, keep us posting

    UN:F [1.6.8_931]
    Rating: 0.0/5 (0 votes cast)

Leave a Reply

Please leave these two fields as-is:

Protected by Invisible Defender. Showed 403 to 7,286 bad guys.