libro de visita en pocos minutos – con tbs

Luego de ver recientemente un articulo breve como usar un simple mvc, me acordé de que hace mucho yo tenía previsto presentar una introducción a la programación PHP con TBS – TinyButStrong (Pequeño Pero Fuerte), que aplicandolo algunas buenas prácticas puede reemplazar a un conjunto de librarías MVC (Model-View-Controller). Al menos la “V” está asegurada ;), lo de la “M” y “C” depende de las prácticas si será un “MC” combinado o por separado…

Lo mostrado es parte de un material que estoy preparando para instruir a un compañero de trabajo (un programador), para que en el futuro trabajemos ambos con sistemas web, de una manera más o menos compatible. No pretendo decir que se haga en 10 min, 20 o 5, pero quisiera mostrarles a todos la simplicidad que basta para realizar algunas páginas útiles, o partes de algún sistema.

Voilá aqui el sistema demo, con una sola tabla:

CREATE TABLE feedbacks (
 id int(10) unsigned NOT NULL AUTO_INCREMENT,
 name varchar(100) NOT NULL,
 feedback varchar(255) NOT NULL,
 PRIMARY KEY (id)
);

Que sea un sistemita donde un usuario web puede dejar un comentario. Tipo un libro de visita sencillito.

En la primer fase mostramos el contenido guardado en la tabla.

La librería TBS facilita el trabajo, y hace una limpia separación del código PHP del diseño HTML !! Es tán “limpio” que ni se “debe” incluir código PHP en el template de HTML, quiere decir que el template HTML se puede totalmente preparar con algún editor wysiwyg-web, sin temor de perder algún formato especial, o algún símbolo “oculto”.

La ayuda oficial de esta librería está en su sitio original.

Bueno, manos a la obra. que tenemos que hacer:

  1. Crear la tabla en una base de datos MySQL.
  2. Crear un directorio web para el aplicativo web
  3. Insertar una copia de la librería TBS. Suelo usar el archivo tbs_class_php5.php y renombrarlo a tbs_class.php. Sí viste bien, un sólo archivo!!
  4. Crear un archivo template con la vista – usando puro HTML !
  5. Crear un archivo de controlador/modelo, que hace el resto del trabajo. Normalmente lo llamo index.php.
  6. Luego: probarlo, navegando a http://localhost/midirectorio/index.php en el servidor web.

That’s it.

Ahora a ver como.

Digamos que ya cremos la tabla del paso 1,

y tengo un servidorcito web instalado en mi maquina local y me aseguré que tanto el servidor web, como la base de datos MySQL están funcionando, creé un directorio para el aplicativo de prueba (paso 2), y copié el archivo de la librería TBS (paso 3) o simplemente todo el contenido del paquete TBS.

Para empezar creamos un template sencillo, para mostrar el contenido de la tabla:

<div>
<table>
<tr><td>[vlist1.id;block=div]</td><td>[vlist1.name]</td></tr>
<tr><td colspan=2>[vlist1.feedback]</td></tr>
</table>
</div>

Si solo esto ! Para la demo lo guardo con el nombre: vista.htm

y un archivo index.php con:

<?
// -------- opcional para depurar el codigo...
error_reporting(E_STRICT);

// -------- comexion tomado del manual de MySQL:
$db_cnx = mysql_connect('localhost', 'dbuser', 'dbpasswd')
 or die('Could not connect: ' . mysql_error());
//echo 'Connected successfully';
mysql_select_db('test_db') or die('Could not select database');

// -------- carga libreria TBS y una plantilla para la vista
include_once('tbs_class.php');        // renombrado el archivo tbs_class_php5.php a tbs_class.php !!
$TBS =new clsTinyButStrong;
$TBS->LoadTemplate('vista.htm') ;

// -------- insertar aqui controlador de análisis de formulario y operaciones de ABM ----------
// -------- mostrar contenido
$TBS->MergeBlock('vlist1',$db_cnx,'SELECT * FROM ' . $table_name);
$TBS->Show();

mysql_close($db_cnx);
?> 

Si tenemos algo cargado en la tabla, ya se puede visualizar de esta manera. La primer meta está alcanzada.

En un segundo paso ampliamos este modelo y lo convertimos en una página que permite un ABM (alta-baja-modificaciones) básico. BASICO dije, realmente, porque es un demo nomás. Claro para usar en el mundo real hay que cranear alguito más y implementar también ciertos controles, que tiene que ver con la seguridad del sistema, y para evitar corrupción de datos…

Bueno, lo más sencillo primero: el template vista.htm cambio así

Deje su comentario:
<form id="formArea" action="" method="post">
<input id="id" name="id" type="hidden" value="[vform1.id;noerr]" />
Nombre: <input id="name" name="name" type="text" value="[vform1.name;noerr]" />
<input type="submit" value="Grabar" /><br/>
Comentario: <input id="feedback" name="feedback" type="text" value="[vform1.feedback;noerr]" style="width: 300px;" />
</form>
<hr />

<div>
<table>
 <tr><td>[vlist1.id;block=div]</td><td>[vlist1.name]</td></tr>
 <tr><td colspan=2>[vlist1.feedback]</td></tr>
 <tr><td><a href="?modificar=[vlist1.id]">modificar</a></td>
 <td><a href="?eliminar=[vlist1.id]">eliminar</a></td></tr>
</table>
</div>
<div>[vlist1;block=div;nodata]No hay registros en la base de datos !!</div>

Arriba está el formulario que nos sirve tanto para insertar un registro nuevo, como para modificar un registro específico.

Abajo en la lista de los ítemes agregué más detalles: los botones para modificar o eliminar un registro, y además una línea de texto que aparece cuando no hay ningún registro para mostrar. Cuando hay varios registros, se genera una página con varios “div” que incluyen una tabla para cada registro.

Bueno y el index.php ?

<?
// -------- opcional para depurar el codigo...
error_reporting(E_STRICT);

// -------- comexion tomado del manual de MySQL:
$db_cnx = mysql_connect('localhost', 'dbuser', 'dbpasswd')
 or die('Could not connect: ' . mysql_error());
//echo 'Connected successfully';
mysql_select_db('test_db') or die('Could not select database');

// -------- carga libreria TBS y una plantilla para la vista
include_once('tbs_class.php');        // renombrado el archivo tbs_class_php5.php a tbs_class.php !!
$TBS =new clsTinyButStrong;
$TBS->LoadTemplate('vista.htm') ;

// -------- procesar registros etc...
$table_name = 'feedbacks';
$table_fields = array('name', 'feedback');

if (isset($_POST['name'])){
 // -- chequear si campo ID esta vacio, lo mas simple !!
 // construir set_value sql part...
 $sql_upd = "";
 $sql_ins = "";
 foreach ($table_fields as $fieldname) {
 if (strlen($sql_ins) > 0){
 $sql_ins .= ", ";
 }
 $sql_ins .= "'" . $_POST[$fieldname] . "' ";

 if (strlen($sql_upd) > 0){
 $sql_upd .= ", ";
 }
 $sql_upd .= $fieldname . " = '" . $_POST[$fieldname] . "' ";
 }

 if (strlen($_POST['id'])){
 $result = mysql_query("UPDATE ".$table_name." SET ". $sql_upd. " WHERE id = " . $_POST['id']) or die('Query failed: ' . mysql_error());
 } else {
 $result = mysql_query("INSERT INTO ".$table_name." (".implode(', ', $table_fields).") VALUES (". $sql_ins. ")") or die('Query failed: ' . mysql_error());
 }
 mysql_free_result($result);
}

if (isset($_GET['eliminar'])){
 $result = mysql_query("DELETE FROM ".$table_name." WHERE id = " . $_GET['eliminar']) or die('Query failed: ' . mysql_error());
 mysql_free_result($result);
}

// -------- mostrar contenido nuevo
if (isset($_GET['modificar'])){
 $TBS->MergeBlock('vform1',$db_cnx,"SELECT * FROM ".$table_name." WHERE id = " . $_GET['modificar']);
} else {
 $TBS->MergeBlock('vform1',array());
}

$TBS->MergeBlock('vlist1',$db_cnx,'SELECT * FROM ' . $table_name);
$TBS->Show();

mysql_close($db_cnx);
?> 

Bueno, en este index.php me compliqué un poquito, hice un paso más: realicé una pequeña abstracción de las operaciones. Esta abstracción puede ser el primer paso para la creación de una función “universal” para la tarea de ABM, que se podría guardar en una librería propia, y que podría ser reutilizada por ABMs de otras páginas del mismo aplicativo web ;).

De qué se trata, empiezo abajo. Se inserta valores en el formulario “vform1″ dependiendo si es un dato a modificar, o si debe quedar en blanco para un registro nuevo.

Para la abstracción usada aquí presumo lo siguiente:

  • se trata de ABM de UNA TABLA
  • la tabla tiene como clave UN campo (auto-)númerico con el NOMBRE “id”
  • los demás campos son de FORMATO texto

Que hace el bloque de ABM:

  • define “la estructura” de la tabla (la “M” de un eventual “MVC”)
  • construye la sentencia SQL para insert y update (actualizar) un registro
  • luego según operacion requerida se ejecuta insert o update (“A” o “M” de “ABM”)
  • Caso se requiere eliminar (la “B” de “ABM”) se ejecuta la operacion delete

voilá.

ya tenés tu página funcionando. en serio !

Así de fácil, gracias a Skrol29 y su equipo de tinybutstrong.

Claro que es una demo bastante sencilla nomás, pero espero que ya sirve para mostrar la facilidad de uso de esta estupenda librería.

 

edit:

bueno, aqui la versión inicial del archivo index.php, quer estaba más sencillo en la parte de la actualización:

...
// -------- procesar registros etc...

if (isset($_POST['name'])){
 
 // insertar nuevo o acatualizar ?? -- chequear si campo ID esta vacio, lo mas simple !!
if (strlen($_POST['id'])){
 $result = mysql_query("UPDATE feedbacks SET name = '".$_POST['name']."', feedback = '".$_POST['feedback']."' WHERE id = " . $_POST['id']) or die('Query failed: ' . mysql_error());
 } else {
 $result = mysql_query("INSERT INTO feedbacks (name, feedback) VALUES ('".$_POST['name']."', '".$_POST['feedback']."')") or die('Query failed: ' . mysql_error());
 }
 mysql_free_result($result);
 
}

if (isset($_GET['eliminar'])){
 $result = mysql_query("DELETE FROM ".$table_name." WHERE id = " . $_GET['eliminar']) or die('Query failed: ' . mysql_error());
 mysql_free_result($result);
}

// -------- mostrar contenido nuevo
...
About these ads

~ por clickdimension en 3 noviembre 2010.

Una respuesta to “libro de visita en pocos minutos – con tbs”

  1. Great post. I was checking continuously this blog and I’m impressed! Extremely useful info specially the last part :) I care for such information much. I was looking for this certain info for a very long time. Thank you and good luck.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: