PHP MySQL nevegació

De Cacauet Wiki
Salta a la navegació Salta a la cerca

Utilitzarem la base de dades Fitxer:Ufs.sql.

En aquest exercici es tracta de realitzar 5 pàgines web dins les quals es pugui navegar entre elles, visualitzant les diferents dades de la nostra base de dades de UFs. Escolta les explicacions del professor a clase i realitza el següent exercici.

Requeriments de les pàgines a realitzar

Cadascuna de les pàgines ha d'incloure:

  • Possibilitat de veure totes les dades agrupades o bé filtrant a través d'un paràmetre que li passarem amb el mètode GET.
  • Link de filtratge: cada pàgina pot mostrar totes les dades o bé filtrar. Per filtrar es posaran links (indicats a cada pàgina, és la 2a part del nom de la pàgina.
    Per exemple, a ufs_per_assignatura.php es mostraran totes les UFs amb cada assignatura corresponent (i agrupant per ella mateixa). Cada assignatura ha de portar un link per filtrar només per aquesta.
  • Ha d'haver també un botó per desfiltrar.
  • Capçalera amb títol i informació de les dades amb les que filtrem (si ho fem). Per exemple, a la pàgina UFs per assignatura caldrà mostrar la informació de l'assignatura triada (la que passem per GET).
    A través d'aquesta capçalera també podrem tornar a la pàgina que ens ha portat. Per exemple, a la pàgina ufs_per_assignatura.php podem visualitzar el llistat de UFs d'una assignatura, però també cal posar a la capçalera el professor que les imparteix amb un link a la pàgina assignatures_per_professor.php i la titulació de l'assignatura amb link a assignatures_per_titulacio.php
  • Llistat de les dades que s'indica més avall, amb links que permetin navegar les dades.
    Per exemple, a les assignatures_per_professor.php es llistaran les assignatures i on aparegui el nom de l'assignatura ha d'haver un link a ufs_per_assignatura.php amb el filtre adeqüat.


Pàgines a realitzar

Les pàgines a realitzar seran les següents amb les dades que ha d'incloure:

  1. assignatures_per_professor.php
    • Nom del professor (link de FILTRATGE)
    • Títol assignatura -> link a ufs_per_assignatura.php
    • Titulació de l'assignatura -> link a assignatures_per_titulacio.php
    • Hores totals de l'assignatura
  2. assignatures_per_titulacio.php
    • Nom de la titulació (link de FILTRATGE)
    • Títol de l'assignatura -> link a ufs_per_assignatura.php
    • Professor que imparteix l'assignatura -> link a assignatures_per_professor.php
    • Hores totals de l'assignatura
    • Curs al què pertany
    • Nº de mòdul de la titulació
  3. ufs_per_assignatura.php
    • Tïtol de la UF -> link a qualificacions_per_uf.php
    • Títol de l'assignatura (link de FILTRATGE)
    • Titulació -> link a assignatures_per_titulació.php
    • Hores de la UF
    • Curs al què pertany
  4. qualificacions_per_uf.php
    • Títol de l'assignatura -> link a ufs_per_assignatura.php
    • Títol de la UF (link de FILTRATGE)
    • Nom de l'alumne -> link a qualificacions_per_alumne.php
    • Qualificació ordinària
    • Qualificació extraordinària
  5. qualificacions_per_alumne.php
    • Nom i cognoms de l'alumne (link de FILTRATGE)
    • Títol de l'assignatura -> link a ufs_per_assignatura.php
    • Títol de la UF -> link a qualificacions_per_uf.php
    • Qualificació ordinària
    • Qualificació extraordinària

Mapa web de l'exercici

Navegacio ufs.png


Exemple de codi

Podeu partir de l'exercici anterior: PHP MySQL select. Utilitzarem l'exemple de la pàgina ufs_per_assignatura.php.

Divideix per vèncer

És important atacar els problemes de manera progresiva sempre que programem. Així podràs construir en diverses etapes un codi complex que no es pot atacar d'un sol cop. En particular, per aquest, es recomana:

  1. Aconseguir mostrar les dades que es demanen a l'exercici
  2. Afegir la funcionalitat del filtratge de manera manual (afegint el ?id=... al final del nom de la web).
  3. Afegir els links de filtratge dins la mateixa pàgina.
  4. Afegir els links d'enllaç amb les altres pàgines.

Codi

Per tal d'aconseguir que el paràmetre GET que introduïm filtri el contingut, haurem d'afegir una clàusula WHERE a la query que enviem al MySQL. Per concatenar utilitzem l'operador ".="

<?php
...
	# (2.1) creem el string de la consulta (query)
	$consulta = "SELECT UFs.* , assignatures.nom AS nom_assignatura
			FROM UFs JOIN assignatures
			ON UFs.id_assignatura=assignatures.id_assignatura ";

	# "pesquem" el paràmetre GET
	$id_ass = $_GET['id_assignatura'];
	# afegim el WHERE a la query en cas de que el paràmetre existeixi. (FILTRATGE)
	if ($id_ass)
		$consulta .= " WHERE assignatures.id_assignatura=$id_ass";

	# (2.2) enviem la query al SGBD per obtenir el resultat
	$resultat = mysql_query($consulta);
...
?>

i un tros més avall el codi caldrà crear els links més o menys d'aquesta manera:

echo "\t\t<a href='ufs_per_assignatura.php?id_assignatura=".$registre['id_assignatura']."'>".$registre['nom_assignatura']."</a>\n";

...et voilà!