Enrera
Mòdul 5

Creació i gestió d'entorns web dinàmics (PHP)

  Pràctica
Pràctica_1
Pràctica_2
Pràctica_3
Pràctica_4
   
Exercicis
Exercicis
 
   Altres aspectes    
 

L'objectiu d'aquesta pràctica és donar a conèixer algunes de les opcions disponibles en la llibreria ADODB relacionades amb menús dinàmics i automatizació de presentació de dades per pantalla.

També tractarem l'exportació de dades a altres formats estàndards.
 
Utilitats vàries
   
Pràctica

Menús i bases de dades

 
Hi ha un funció de l'objecte ADORecordSet que és capaç de crear un menú a partir de les dades extretes d'una consulta de dos camps, ja que presenta en el menú el contingut de la primera columna, i ens retorna el valor de la segona columna dels valors escollits. En el cas que les dades extretes només continguin una columna, aquesta és la que es visualitza i s'envia.
 
GetMenu($nom_menu,$opc_selec,$blanc,$selec_mult,$quants,$atributs);
 
Aquesta funció genera un menú HTML del tipus ( <Select><Option>..</Select> ), i podem passar-li força paràmetres a fi de personalitzar-la, i són els seguents:
 
  • Nom del menú. Indiquem el nom que assignem a la finestra de menú. A més també serà el nom de l'array on ens retorna les dades seleccionades per l'usuari.
  • Opcions de selecció. Definim si volem opcions marcades per defecte activades, en el cas que la selecció múltiple estigui activada, podem passar un array amb els valors activats per defecte.
  • Blanc . Valor lògic per activar una opció en blanc dins del menú, o només deixar seleccionar els valors de la consulta.
  • Selecció múltiple. Valor lògic que permet o inhabilita la selecció múltiple. En cas d'estar activada, podem seleccionar diferents opcions utilitzant les tecles de CTRL i SHIFT, igual que les seleccions en l'entorn Windows.
  • Quants. Establim quina amplada té la finestra de selecció, en el cas de valer 0, el que ens crea és una finestra desplegable.
  • Atributs. Podem afegir altres atributs al menú, com poden ser funcions del JavaScript, estils, comportaments...
 

Veure codi

Executar codi

<?php
/*-----------------------------------------------------------------
* Mòdul: 5 Pràctica: 4 Fitxer: m5p41.php
* Autor: D116 Data:
* Descripció: Exemple de creació d'un menú GETMENU d'ADOB
* Pre condi.: ADODB,BD tutoria, fitxer de connexió tutoria_con.php
* Post cond.: Es crida a si mateix
-----------------------------------------------------------------*/
?>

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html><head>
<title>Mòdul 5 Pràctica 41</title>
</head><body>
<!-- Creem un formulari que quan prememem Enviar
es crida a si mateix (m5p41.php) -->
<form name="Menu_1" method="post" action="m5p41.php">

<?php
include("../adodb/adodb.inc.php");
include("./connexio/tutoria_con.php");

$sql="select codi,cognom1 from professor";
$recordSet =$ConTut->Execute($sql)or DIE($ConTut->ErrorMsg());

if (!$recordSet->EOF){
$nom_menu='Menu_1'; // Nom del menú.
$opc_selec=array('CS-DBG','CN-RAM'); // Opcions marcades per defecte
$blanc=True; // La primera opció en blanc?
$selec_mult=True; // Permet selecció multiple amb CTRL/SHIFT
$quants=8; // Opcions visualitzades. Tamany finestra visual
$atributs=''; // afegeix atributs a la comanda SELECT del menú
// es poden afegir events, jscript...

if (isset($_POST['Menu_1'])) {
print '<h3> Valors retornats per la variable Menu_1 :</h3> ';
print_r($_POST['Menu_1']); //Visualitza l'array retornat
print '<BR><BR>';
// Retorna a la variable nom_menu, un array amb el contingut del
// contingut del segon camp. En aquest cas ens retorna 'cognom1'
// de les opcions escollides.
}

print $recordSet->GetMenu($nom_menu,$opc_selec,$blanc,$selec_mult,
$quants,$atributs);
}
$recordSet->Close();
$ConTut->Close();
?>

<input type="submit" name="enviar" value="Enviar">
</form>
</body>
</html>

Llistat 5.4.1. Codi fitxer m5p41.php
 
Si executeu el codi següent, podreu visualitzar les dades que retorna. És interessant observar que en el cas de selecció múltiple retorna un array amb tantes posicions com seleccions s'han activat. Aquesta funció és una virtut més dels arrays associatius.
 
Funcions automatizades de visualització
 
Hi ha una funcio inclosa en el paquet de l'ADODB, desenvolupada en el fitxer 'tohtml.inc.php', anomenada 'rs2html( )', que converteix les dades contingudes en un objecte RecordSet en una taula Html.
 
rs2html($RecodSet,$Atrib_Taula,$Nom_Col,$Car_Especials)
 
Els paràmetres que hi podem passar són els següents:
 
  • RecodSet. Objecte que conté les dades que s'han de presentar.
  • Atributs de taula. Propietats gràfiques de la taula.
  • Nom de les columnes. Ens permet definir un array amb el contingut del títol de les columnes. En cas de no passar-l'hi, utilitza el nom del camp que consta a la BD.
  • Caràcters especials. Habilita la funció 'htmlspecialchars' del PHP per incloure caràcters d'escapament i de conversió de signes per visualitzar-los en HTML.
 

Veure codi

Executar codi

<?php
/*-----------------------------------------------------------------
* Mòdul: 5 Pràctica: 4 Fitxer: m5p42.php
* Autor: D116 Data:
* Descripció: Exemple de visualització. RS2HTML() d'ADOB
* Pre condi.: ADODB,BD tutoria, fitxer de connexió tutoria_con.php
* Post cond.:
-----------------------------------------------------------------*/
?>

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html><head>
<title>Mòdul 5 Pràctica 42</title>
</head><body>

<?php
include("../adodb/adodb.inc.php");
include("../adodb/tohtml.inc.php");
include("./connexio/tutoria_con.php");

$sql="select codi,nom,cognom1,email, anybaixa from professor";
$RS =$ConTut->Execute($sql)or DIE($ConTut->ErrorMsg());

if (!$RS->EOF){

$Atrib_Taula=" width= '100%' border ='3' cellpadding='3'
cellspacing='5' bgcolor='#FFCC66' bordercolor='#0000FF'";
$Nom_Colum=array('Codi','Nom','Cognom','Adreça electrònica',
'Any de baixa');
$Carac_html=False;

// Automatizació de visualització
rs2html($RS,$Atrib_Taula,$Nom_Colum,$Carac_html);
}

$RS->Close();
$ConTut->Close();
?>

</body>
</html>

Llistat 5.4.2. Codi fitxer m5p42.php
 
Tots el paràmetes d'aquesta funció són opcionals, excepte el primer, que identifica el conjunt de registres que s'ha de representar.
 

Figura 5.4.1. Resultat execució fitxer m5p42.php

 
Seria molt interessant que visualitzessiu el codi d'aquesta funció, que es troba a la carpeta 'adodb' amb el nom de 'tohtml.php'.
 
Altres automatizacions de visualització de dades
 
A la carpeta ADODB hi ha un fitxer anomenat 'adodb-pager.inc.php', on es defineix la classe 'PAGER'. Aquesta classe utilitza la funció 'rs2html', però és capaç de paginar les dades visualitzades, i ofereix una parametrització més acurada.(Per informació de classes i objectes podeu consultar: Document d' introducció a les classes i objectes en php )
 
El format del constructor és:
 
ADODB_Pager($Adodb_Connexio,$sql,$id = 'adodb')
 
Hi hem de passar, en primer lloc, un objecte de connexió, la sentència SQL que volem executar, i un identificatiu de l'objecte 'Pager' creat; aquest últim paràmetre no és necessari, ja que n'agafa un per defecte. Només seria necessari en el cas que en la mateixa pàgina web tinguéssim diferents objectes 'Pager'.
 
A la taula següent podem observar les propietats que podem parametritzar:
 
   
id Identificador únic de l'objecte ADODB_Pager
db Objecte connexió que utilitzarà l'ADODB_Pager
sql Sentència SQL per filtrar les dades que s'han de visualitzar
rs Objecte Recordset generat per l'ADODB_Pager
curr_page Valor de la pàgina visualitzada
rows Nombre de files que s'han de visualitzar per pàgina
linksPerPage Nombre màxim d'enllaços a altres pàgines
showPageLinks Habilita la visualització dels enllaços
gridAttributes Atributs HTML de disseny de la taula que s'ha de visualitzar
first Símbol, text o gràfic a visualitzar per la incona Anar al primer...
prev Símbol, text o gràfic a visualitzar per la incona Anar a l'anterior...
next Símbol, text o gràfic a visualitzar per la incona Anar al pròxim...
last Símbol, text o gràfic a visualitzar per la incona Anar a l'últim...
moreLinks Símbol, text o gràfic a visualitzar per la incona Més enllaços superiors
startLinks Símbol, text o gràfic a visualitzar per la incona Més enllaços inferiors
htmlSpecialChars Habilita la funció del PHP per convertir símbols a codi HTML
page Text a visualitzar quan informa de les pàgines (ex.: 'Plana.-')
linkSelectColor Color d'enllaços seleccionats
cache Temps en segons que utilitzarà per al CachePageExecute
Figura 5.4.2. Propietats classe ADODB_Pager
 
 

Veure codi

Executar codi

<?php
/*-----------------------------------------------------------------
* Mòdul: 5 Pràctica: 4 Fitxer: m5p43.php
* Autor: D116 Data:
* Descripció: Exemple de visualització. RS2HTML() d'ADOB
* Pre condi.: ADODB,BD tutoria, fitxer de connexió tutoria_con.php
* Post cond.:
-----------------------------------------------------------------*/
?>

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html><head>
<title>Mòdul 5 Pràctica 43</title>
</head><body>

<?php

include("../adodb/adodb.inc.php");
include_once('../adodb/adodb-pager.inc.php'); // ADODB_PAGER
require("./connexio/tutoria_con.php");

$sql="select codi,nom,cognom1,email, anybaixa from professor";

// ---- Creem l'objecte del tipus ADODB_Pager.
$pager1 = new ADODB_Pager($ConTut,$sql);

// ---- icones, texte o signes del les icones de moviment
$pager1->first= '<img src="./First.gif" width="18" height="13">';
$pager1->prev = '<img src="./Previous.gif" width="18" height="13">';
$pager1->next = '<code>>></code>';;
$pager1->last = '<code>>|</code>';
$pager1->moreLinks = '....Més planes.';
$pager1->startLinks = 'Més pàgines....';

$pager1->page ='plana .- ';// Descripció peu tabla pàgina x de n.

// ----Habilita la funció de visualització de les planes (True,False)
$pager1->showPageLinks = True;

$pager1->linkSelectedColor = "red"; // Color link seleccionat.
$pager1->htmlSpecialChars = True;

// ------- màxim nombre d'enllaços de planes visibles
$pager1->linksPerPage = 5;

//------ Característiques HTML de la taula
$pager1->gridAttributes = " width= '100%' border ='3' cellpadding='3'
cellspacing='5'bgcolor='#FFCC66' bordercolor='#0000FF'";
$pager1->gridHeader=array('Codi Prof.','Nom', 'Cognom',
'Correu electrònic','Any de Baixa');
$pager->cache = 60;

//------ Crea la pantalla a visualitzar
$pager1->Render($rows=4); // Nombre de files a visualitzar per plana

$ConTut->Close();
?>

</body>
</html>

Llistat 5.4.3. Codi del fitxer m5p43.php
 

Figura 5.4.3. Resultat execució m5p43.php

 
Exportació de dades
 
Hi ha una funció inclosa en el paquet de l'ADODB, desenvolupada en el fitxer 'toexport.inc.php', que automatitza l'exportació de dades en format CSV o amb un fitxer delimitat per tabuladors. A la capçalera d'aquest fitxer trobareu els paràmetres de funcionament. També permet fer l'exportació directa a un fitxer.
 

Veure codi

Executar codi

<?php
/*-----------------------------------------------------------------
* Mòdul: 5 Pràctica: 4 Fitxer: m5p44.php
* Autor: D116 Data:
* Descripció: Exemple de serialització de dades.ADODB.
* Pre condi.: ADODB,BD tutoria, fitxer de connexió tutoria_con.php
* Post cond.:
-----------------------------------------------------------------*/
?>

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html><head>
<title>Mòdul 5 Pràctica 44</title>
</head><body>

<?php
include("../adodb/adodb.inc.php");
include("../adodb/toexport.inc.php");
include("./connexio/tutoria_con.php");

$sql="select codi,nom,cognom1,email, anybaixa from professor";
$RS =$ConTut->Execute($sql)or DIE($ConTut->ErrorMsg()) ;

if (!$RS->EOF){

print "<pre> <hr> <h2> Format de sortida CSV </h2> <BR>";
print rs2csv($RS); // Retorna una cadena

print '<hr> <h2> Format de sortida amb Tabuladors </h2> <BR>';
$RS->MoveFirst(); // Ens posicionem al primer registre de nou
print rs2tab($RS); // Retorna una cadena

print '<hr><h2> Format sortida Tabuladors a sortida estàndard
</h2> <BR>';
$RS->MoveFirst();
rs2tabout($RS); // direcciona el resultat cap a la sortida estandard
// pantalla, fitxer, impressora, .....
print "</pre>";

}
$RS->Close();
$ConTut->Close();
?>

</body>
</html>

Llistat 5.4.4. Codi fitxer m5p44.php
 
Com hem comentat a l'inici del capítol, podríem anar exemplificant utilitats d'aquesta llibreria, i ens faltaria curs per desenvolupar-les tots. Creiem que en aquestes alçades del mòdul ja teniu una idea bastant formada de la utilitat d'aquesta capa d'abstracció.
 
Us encoratgem a anar descobrint més utilitats, però si decidiu incorporar aquesta llibreria als vostres projectes, consulteu els fitxers 'readme.htm' i 'tute.htm' de la distribució.
   
  Respecte a les classes , objectes, mètodes i propietats d' ADODB podeu consultar la següent adreça.
   
 
http://www.markwest.me.uk/docs/phpdoc/PostNuke_ADODB/
   
Respecte a la exportació a XML, hi ha molta documentació, en el mateix ADODB trobareu contribucions i fitxers realionats amb aquest tema. També podeu trobar una funció compatible amb l'ADODB, anomenada rs2xml().

 

 
Amunt
Pràctica
pràctica_1
Pràctica_2
Pràctica_3
Pràctica_4
Exercicis
Exercicis