Enrera
Mòdul 6

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
 
   Selecció d'entrevista    
 

En aquesta pràctica s'explica la creació del mòdul de selecció d'entrevista. Aprofitareu algunes de les opcions incloses a la llibreria ADODB.

 
Desenvolupament de la pràctica
   
 

Amb la figura següent podeu fer-vos una idea aproximada de les tasques encomanades al fitxer histentre.php. Veniu de la selecció d'alumnes (selecalum.php), on l'única dada que interessa és el número de matrícula de l'alumne/a, ja que amb aquesta dada heu de visualitzar totes les entrevistes relacionades amb aquest alumne/a al llarg de la seva estada al centre.

   
 
 
Figura 6.3.1. Esquema dels blocs abstractes del fitxer codi histentre.php i relacionats
   
  En qualsevol sistema de manteniment de dades és imprescindible l'existència de quatre opcions bàsiques: donar d'alta un registre, modificar-lo, consultar-lo i esborrar-lo.
   
  Precisament, en aquesta pràctica detallareu la programació necessària que permet veure totes les entrevistes fetes a un alumne/a al llarg del seu historial acadèmic al centre, i inserir-ne de noves, modificar, consultar i eliminar les ja existents. Aquestes accions no les fa directament el fitxer histentre.php, sinó que envia les dades necessàries a distri.php, que segons les opcions seleccionades i l'origen d'aquestes dades, encamina (distribueix) els fitxers especialitzats a donar d'alta (entre_alta.php), modificar (entre_modi.php), consultar i donar de baixa. Les opcions de consultar i donar de baixa ataquen el mateix fitxer d'ordres (entre_cons.php), amb la diferència que hi ha una variable de sessió anomenada baixa que condiciona la presentació i execució del fitxer entre_cons.php.
   
  Fitxer Histentre.php
   
  Per poder visualtizar les entrevistes d'un alumne/a, utilitzareu la classe ADODB Pager, explicada al mòdul 5, pràctica 4. En primer lloc, heu de construir la sentència SQL que filtrarà les dades de l'alumne/a seleccionat. A la sentència SQL es força que la visualització de les dates sigui dia/mes/any, ja que internament a la BD es guarda com a any/mes/dia.
   
Veure codi /* Convertim el format de la data per tal que el 'pager' ens la mostri així
Això mateix es podria fer també sobre la consulta SQL amb la funció de MySQL DATE_FORMAT()*/

// Format visual dates d/m/aa per data petició i data entrevista
$fm_datapet = $ConTut->SQLDate('d/m/Y','datapet');
$fm_dataent = $ConTut->SQLDate('d/m/Y','dataent');

$sql = "SELECT iden , TRIM(curs_acad), estat, $fm_datapet , $fm_dataent, temes ";
$sql .= "FROM entrevista WHERE matricula=".$matricula." ORDER BY curs_acad DESC, datapet DESC";

// Comprovem que la consulta contingui algun registre

$result = $ConTut->Execute($sql) or die($ConTut->ErrorMsg());
$result->Close();

// Si hem trobat dades, vol dir que hi ha entrevistes per l'alumne
if ($result->RecordCount() > 0) {

  Llistat 6.3.1. Codi parcial del fitxer histentre.php
   
  Una vegada teniu les dades, heu de definir les propietats i els objectes que compondran la classe ADODB Pager. Podeu consultar el mòdul 5, pràctica 4.
   
Veure codi // Creem una instància del 'pager' de l'ADODB
$pager = new ADODB_Pager($ConTut, $sql);

// Icones o de moviment
$pager->first = '<img src="./imatges/First.gif" border=0 width="18" height="13">';
$pager->prev = '<img src="./imatges/Previous.gif" border=0 width="14" height="13">';
$pager->next = '<img src="./imatges/Next.gif" border=0 width="14" height="13">';
$pager->last = '<img src="./imatges/Last.gif" border=0 width="18" height="13">';
$pager->linkSelectedColor = "black"; // Color link seleccionat.

$pager->showPageLinks = True; // visualitza el nombres de planes
$pager->linksPerPage = 15; // màxim nombre de planes visibles

// Característiques de la taula a dibuixar
$pager->gridAttributes = " width=100% border='1' cellpadding='3' cellspacing='0' bgcolor='#CCFFCC' bordercolor='#005500'";

// Definim encapçalament
$pager->gridHeader = true;
$pager->gridHeader = array ('Id','Curs','Estat','Data petició','Data entrevista','Temes tractats');

// Descripció missatge de situació a peu de tabla (pàgina x de n.)
$pager->page ='Pàg: ';
$pager->htmlSpecialChars=False; // Activar HTML dins els camps

//$pager->cache = 60;
echo "<center>";
$pager->Render($rows=5); // Nombre de files a visualitzar per plana

 

Llistat 6.3.2. Codi parcial del fitxer histentre.php

   
  Amb aquest codi, s'aconsegueix paginar i visualitzar el resultat de la consulta. Podeu comprovar que al camp Temes tractats apareixen trossos de text amb negreta, ja que heu permès visualitzar codi HTML amb la propietat htmlSpecialChars, perquè quan heu donat d'alta l'entrevista, heu inclòs les directives d' HTML <b>... </b> entre el text, la qual cosa provoca que el text que s'inclou entre les marques es mostri en negreta.
   
 

Figura 6.3.2. Visualització de l'historial d'entrevistes amb la classe Pager de l'ADODB

   
  Ara heu de buscar la manera de seleccionar una entrevista de les visualitzades, per passar-la a GetMenu de l'ADODB, que deixi seleccionar només els identificadors que visualitzeu en pantalla a través de la classe Pager. El problema és saber quina pàgina està visualitzant l'ADODB_Pager. Si rasqueu una mica el fitxer adodb_pager.inc.php, que és l'encarregat d'implementar-ho, trobareu que utilitza una variable de sessió anomenada adodb_curr_page, per tant, amb aquesta dada i el valor de files que s'ha de visualitzar per pàgina que heu definit (row=5), ja teniu els valors d'ordre mínim i màxim dels registres que visualitzeu. Fixeu-vos que a la sentència SQL establiu quin interval de registres voleu seleccionar amb la instrucció LIMIT.
   
Veure codi // OBJECTE GetMenu() per seleccionar ID per modif./consult./esborrar

// Càlcul per trobar límits de sentència SQL i només visualitzar els
// registres que mostra en pantalla l'objecte PAGER anterior.

if (isset($_SESSION['adodb_curr_page'])){
$curr_pag = $_SESSION['adodb_curr_page']; // variable d'ADODB_Pager
$lim_min = $rows*($curr_pag-1);
$lim_max = ($rows*$curr_pag);
} else {
$lim_min = 0;
$lim_max = $rows;
}

// Sentència SQL per a GetMenu

$sql1 = "SELECT iden, iden FROM entrevista WHERE matricula=";
$sql1 .= $matricula." ORDER BY curs_acad DESC, datapet DESC ";
$sql1 .= "LIMIT ".$lim_min." , ".$lim_max ;

$result1 = $ConTut->Execute($sql1) or die($ConTut->ErrorMsg());

$nom_menu = 'iden'; // Nom del menú.
$opc_selec = ''; // Opcions marcades per defecte
$blanc = False; // La primera opció en blanc no acceptada
$selec_mult = False; // No permet selecció multiple amb CTRL/SHIFT
$quants = 1; // Opcions visualitzades. Mida finestra visual
$atributs = ''; // Afegeix atributs a la comanda SELECT del menú
// es poden afegir events, jscript...

?>
<form name="form1" method="post" action="distri.php?<?php echo session_name()."=".session_id()?>">

Selecciona Id.:
<?php
print $result1->GetMenu($nom_menu, $opc_selec, $blanc, $selec_mult,
$quants, $atributs);

  Llistat 6.3.3. Codi parcial del fitxer histentre.php
  Seguidament heu de definir les propietats de l'objecte GetMenu (consulteu el mòdul 5, pràctica 4) i crear el formulari form 1, que ha de contenir la selecció de l'identificatiu d'entrevista i els botons de consultar, modificar i esborrar entrevista. Observeu que el paràmetre action del formulari us envia al fitxer distri.php.
   
 

Figura 6.3.3. Selecció d'identificatiu d'entrevista

   
  Al formulari podeu apreciar que passeu un paràmetre ocult amb el valor del nom del fitxer, i que els botons de consultar, modificar i esborrar passen els paràmetres cons, modi i esbo respectivament. Aquests paràmetres són els que utilitzareu al fitxer distri.php.
   
Veure codi <form name="form1" method="post" action="distri.php?<?php echo session_name()."=".session_id()?>">
Selecciona Id.:
<?php
print $result1->GetMenu($nom_menu, $opc_selec, $blanc, $selec_mult,
$quants, $atributs);
?>
<input name="origen" type="hidden" value="histentre.php">
<input type="submit" name="cons" value="Consulta">
<input type="submit" name="modi" value="Modificar">
<input type="submit" name="esbo" value="Esborrar">

</form>
</center>

  Llistat 6.3.4. Codi parcial del fitxer histentre.php
   
  Fitxer Distri.php
   
  Aquest fitxer és un fitxer de pas. La funció principal d'aquest fitxer és la de distribuir. En funció d'on ve i els paràmetres que rep, us encamineu a un o altre fitxer.
   
 
Si el fitxer origen és...
Si el botó seleccionat anteriorment ha estat...
Modifica
Esborra
Consulta
Histentre.php
entre_modi.php
entre_cons.php
[baixa = cert]
entre_cons.php
[baixa = fals]
Histsegui.php
segui_modi.php
segui_cons.php
[baixa = cert]
segui_cons.php
[baixa = fals]
   
  A la taula anterior heu modelitzat en dues dimensions la funció principal del fitxer distri.php. A la llista següent, es crea la primera fila d'aquesta taula amb codi PHP.
   
Veure codi if ($origen == "histentre.php"){
$_SESSION['identre'] = $iden;
if (isset($_POST['modi'])){ // Modifiquem entrevista
header("Location: entre_modi.php?".session_name()."=".session_id());
}
if (isset($_POST['esbo'])){ // Visualitzem entrevista i confirmem esborrat
$_SESSION['baixa'] = True;
header("Location: entre_cons.php?".session_name()."=".session_id());
}
if (isset($_POST['cons'])){ // Visualitzem entrevista
$_SESSION['baixa'] = False;
header("Location: entre_cons.php?".session_name()."=".session_id());
}
}
  Llistat 6.3.5. Codi parcial del fitxer distri.php
   
Atenció ! Reordeu que en donar d'alta un registre a la taula entrevistes s'enllaça directament per menú amb el fitxer entre_alta.php. El fitxer distri.php només controla les accions que necessiten l'identificatiu d'entrevista, ja que modifiquen, consulten o esborren un registre ja existent a la BD. Donar d'alta provoca la creació d'un nou registre, i no fa falta controlar-ne l'identificatiu, ja que se n'encarrega la BD.
 
Amunt
Pràctica
pràctica_1
Pràctica_2
Pràctica_3
Pràctica_4
Exercicis
Exercicis