Enrera
Mòdul 6
Creació i gestió d'entorns web dinàmics (PHP)
  Pràctica
1
2
3
4
   
Exercicis
Exercicis
 
 
 
 
  Alta i modificació d'entrevistes
   
  En aquesta pràctica s'observen els fitxers de codi d'alta i modificació d'entrevistes.
   
   
Formulari d'alta d'entrevistes
   
Les altes d'entrevistes les feu a partir del fitxer entre_alta.php. A la figura següent teniu el resultat d'executar-lo (recordeu que hi podeu accedir mitjançant l'opció de menú Nova entrevista):
   
Veure codi

Figura 6.4.1. Entrada d'entrevistes

   
 

El formulari creiem que és prou clar: uns radio button per a Estat entrevista i Sol·licitant; una àrea de text per als Temes tractats, i caselles de text per a la resta de camps.

Els camps de data i hora necessiten algun tractament especial pel que fa a la validació.

Com veieu, el que fa aquest fitxer és recollir la informació entrada al formulari, crear una consulta d'inserció i desar la informació a la base de dades.

Els comentaris que acompanyen el codi són prou aclaridors dels diferents passos que se segueixen.

   
 

 

  Formulari de modificació d'entrevistes
   
Pràctica

El fitxer entre_modi.php és el que gestiona la modificació de les entrevistes que ja s'han entrat mitjançant entre_alta.php. El formulari de modificació d'entrevistes és pràcticament idèntic al d'alta. Fins i tot es podrien fer tots dos processos en un sol fitxer i un sol formulari variat dinàmicament, però això complicaria la pràctica.

Podeu veure a la imatge següent que gairebé no hi ha diferències externes entre tots dos formularis:

   
Veure codi

Figura 6.4.2. Modificació d'entrevistes

   
 

El que canvia són els botons del final, en què teniu, a més de Restableix, que ja era a les altes, els botons Modifica i Descarta canvis. Amb el primer es desen les modificacions fetes al formulari, i amb el segon es deixa l'entrevista tal com estava.

També canvia lleugerament el format de les dates recollides de la taula, perquè es mantenen en el mateix fomat que arriba (aaaa-mm-dd). Si es volgués, es podria reformatar.

   
   
  Canvis en el codi php
 

A diferència del codi d'alta, a la part inicial del fitxer s'hi fan dues coses:

  • Captura i preparació de les dades de l'entrevista perquè es presentin al formulari a partir de l'identificador que passeu a la modificació (prèvia).
  • Tractament de les dades i de la navegació un cop s'han premut els botons del formulari (posterior):
    • Prement el botó Modifica s'envia a dalt la variable $modifica.
    • Prement el botó Descarta canvis s'envia la variable $descarta.

Detallem tot això una mica més:

   
  Preparar variables del formulari
 

S'accedeix a les modificacions des de l'Historial d'entrevistes (histentre.php). A la part inferior de la taula que mostra les entrevistes podeu seleccionar el número identificador de l'entrevista (ID) i triar una de les tres opcions que es mostren: Consulta, Modifica, Esborra.

Figura 6.4.3

Quan cliqueu sobre Modifica feu una crida a la pàgina entre_modi.php (passant per una pàgina intermèdia anomenada distri.php) i passeu una variable de sessió $_SESSION['identre'] en què hi ha el número que identifica el registre de l'entrevista.

Per preparar, doncs, els valors que voleu que apareguin al formulari de modificació, simplement heu de fer una consulta que torni els valors corresponents a l'entrevista que té com a identificador el número de $identre (identificador del registre d'entrevista).

   
 

if (isset($_SESSION['identre'])){
$identre = $_SESSION['identre'];

// Consulta de selecció de l'entrevista sol·licitada
$sql = "SELECT iden, curs_acad, estat, datapet, dataent, horaent, solicita, temes, assistent ";
$sql .= " FROM entrevista WHERE iden = $identre";

//Execució de la consulta. si hi ha problemes, missatges d'error
$result = $ConTut->Execute($sql) or DIE("Error en la consulta: ".$ConTut->ErrorMsg()) ;

// Si no som al final (= hem trobat el registre sol·licitat)...
if (!$result->EOF){
// Omplim variables 'pont' amb el valor de la BD
// Aquestes variables seran recollides pel formulari i es mostraran aquests valors
$up_estat = $result->Fields('estat');
$up_datapet = $result->Fields('datapet');
$up_dataent = $result->Fields('dataent');
$up_horaent = substr($result->Fields('horaent'),0,5);
$up_solicita = $result->Fields('solicita');
$up_assistents = $result->Fields('assistent');
$up_comentaris = $result->Fields('temes');
}else{
echo " No s'ha trobat cap registre que respongui a aquesta identificació";
return;
}
}

  Llistat 6.4.1. Consulta per recuperar dades de l'entrevista que s'ha de modificar.
   
 

Fixeu-vos que el primer que feu és veure que $identre estigui definida, i si ho està, podeu entrar a preparar les dades.

El que feu a continuació és passar el contingut de la base de dades a les variables que fareu servir per omplir els valors del formulari. Així, per exemple, $up_assistents recollirà el contingut del camp assistent de la base de dades, i més avall el recollireu perquè es mostri a la casella corresponent del formulari.

   
  Si ho descarteu tot...
 

Abans de canviar res al formulari, heu de preparar les diferents sortides que tindrà.

Si cliqueu sobre el botó Descarta modificacions, enviareu a la mateixa pàgina la variable $descarta. Per preveure aquest cas, posareu el codi següent:

   
  if (isset($_REQUEST['descarta'])) {
header("Location: histentre.php?".session_name()."=".session_id());
}
  Llistat 6.4.2. Codi en cas que premeu Descarta canvis
   
 

Ja veieu que es tracta simplement de comprovar que s'ha definit $descarta, i en cas afirmatiu, reencaminar a la pàgina d'historial d'entrevistes.

   
  Desar modificacions
 

Si cliqueu al botó Modifica del formulari, enviareu, com s'ha dit, la variable $modifica. Fem igual que anteriorment: si s'ha definit aquesta variable (per tant, vol dir que s'ha clicat al botó), entrareu per enregistrar les dades modificades.

Controleu, també, que no hagin quedat buides les dues dates (de petició i d'entrevista).

Fareu una consulta amb l'Update que va substituint les dades anteriors per les aportades de nou des del formulari.

   
 

if (isset($_REQUEST['modifica'])) {
// Desem els valors passats des del formulari en les variables corresponents
$identre = $_REQUEST['identre'];
$datapet = $_REQUEST['datapet'];
$dataent = $_REQUEST['dataent'];
$horaent = $_REQUEST['horaent'];
$solicitant = $_REQUEST['solicitant'];
$assistents = $_REQUEST['assistents'];
$comentaris = $_REQUEST['comentaris'];
$estat = $_REQUEST['estat'];

// Si alguna de les dates està en blanc, saltarem actualització per evitar problemes
if ($datapet != "" or $dataent != ""){
// Actualitzar dades

// Evitem problemes amb la gravació de camps amb apòstrofs
// Si al php.ini tenim magic_quotes_gpc a 'on', no cal passar per addslashes()
// Si està a 'off', cal tractar els apòstrofs amb addslashes()
if ( ini_get('magic_quotes_gpc') == '' ) {
$assistents = addslashes($assistents);
$comentaris = addslashes($comentaris);
}

// Consulta d'actualització de dades
$sql = "UPDATE entrevista SET datapet='$datapet', horaent='$horaent', dataent='$dataent', ";
$sql .= "solicita=$solicitant, assistent='$assistents', temes='$comentaris', estat=$estat ";
$sql .= "WHERE iden = $identre";

// Executem consulta. Si hi ha problemes, missatge d'error
if ($ConTut->Execute($sql) === false) {
print 'Error a l\'hora d\'actualitzar les dades: '.$ConTut->ErrorMsg().'<BR>';
}

}
// Redireccionem de nou a l'historial d'entrevistes
header("Location: histentre.php?".session_name()."=".session_id());
}

  Llistat 6.4.3. Consulta d'actualizació amb l'Update
   
  Un cop s'han desat les modificacions de l'entrevista, es torna a la pàgina d'Historial d'entrevistes.
   
   
  El formulari
 

Veureu un exemple per a cadascun dels inputs diferents que té el formulari de modificació.

Comencem pels radio buttons del camp estat. El mateix porcediment servirà també per al sol·licitant. Aquí, el que interessa és posar l'etiqueta checked al radio que tingui la selecció. Podeu veure al codi següent la manera de fer-ho:

   
  <? $triat = ($up_estat == "Pendent") ? "checked" : ""; ?>
<input name="estat" type="radio" value="1" <? echo $triat ?> >
   
 

Ja veieu que es defineix una variable $triat que s'omple amb checked en el supòsit que el valor $estat que hi havia a la base de dades fos Pendent; en cas contrari, no s'omple amb res. Al final de l'input, s'hi posa $triat, de manera que si és checked, apareixerà amb el radio button seleccionat.

Això ho repetireu per a cadascun dels radio buttons del formulari.

   
  Per als inputs de tipus text, cal que ompliu el valor value=$variable capturada. A l'exemple podeu veure com es fa per a l'input assistents, al qual s'aplica el valor $up_assistents.
   
  <input name="assistents" type="text" id="assistents" size="30" maxlength="30" value="<? echo $up_assistents; ?>" >
   
   
  Queda només veure l'input de textarea. A l'exemple de codi teniu com ho podeu fer per omplir inputs d'aquest tipus:
   
  <textarea name="comentaris" cols="50" rows="10" id="comentaris"><? echo $up_comentaris; ?></textarea>
   
 

Amb això i els canvis que s'han explicat abans, s'ompliran els camps del formulari amb els valors continguts a la taula.

Observeu, finalment, que els tres botons tenen els noms que estan remarcats en el codi següent.

A part d'això, fixeu-vos també que es reenvia amb un input de tipus ocult (hidden) el valor $identre perquè es vagi mantenint vigent dins d'entre_modi.php.

   
  <input name="identre" type="hidden" id="identre" value="<? echo $identre ?>">
<input name="modifica" type="submit" id="modifica" value="Modificar">
&nbsp;
<input name="descarta" type="submit" id="descarta" value="Descartar canvis">
&nbsp;
<input name="neteja" type="reset" id="neteja" value="Restablir">
  Llistat 6.4.4. Botons del formulari
   
   
Amunt
Pràctica
1
2
3
4
   
Exercicis
Exercicis