Cours 12 Publication dynamique de contenu d`une base de

publicité
École de bibliothéconomie et des sciences de l’information
SCI6306 Bases de données documentaires
Cours 12
Publication dynamique de contenu d'une
base de données sur le Web avec PHP
Faculté des arts et des sciences
25 novembre 2016
© Christine Dufour, 2016
1 /19
25 novembre 2016
SCI6306
Au programme aujourd’hui
Publication Web
Processus
Fichier PHP pour publication
Code PHP pour publier : blocs, processus et
exemples
Exercices
Note : les deux prochains (et derniers) cours
se feront en laboratoire
2 /19
25 novembre 2016
SCI6306
3 /19
Processus pour la publication Web
Balises HTML et
codes PHP
entremêlés pour
générer le
contenu :
. Balises HTML
pour les
éléments fixes
. Codes PHP pour
les éléments
dynamiques
Page HTML
Fichier PHP (publication)
Données
structurées
en champs
dans une(des)
table(s)
Base de données
Côté
Client
Côté
Serveur
25 novembre 2016
SCI6306
4 /19
Fichier PHP pour publication Web
Différent de celui pour l'enregistrement (saisie)
Enregistrement : requêtes INSERT INTO, UPDATE ou
DELETE pour manipuler les données (ajout, modification,
suppression) d’une base de données
Publication : requêtes SELECT pour extraire des
données d’une base de données
Ce qui peut être publié
Tout ce que l'on peut générer par une requête SQL : une
donnée ou une table de données
Formatage des données (en texte, en tableau, en liste à
puces, etc.) fait par le biais du HTML
25 novembre 2016
SCI6306
5 /19
Code PHP pour publier : Blocs
6 blocs pour afficher des données extraites
d’une base de données X à partir d’une requête Y
1. Connexion avec la base de données X
2. Définition d'une requête Y
3. Exécution de la requête Y
4. Affichage des résultats de la requête Y
5. Fermeture de la requête Y
6. Fermeture de la base de données X
25 novembre 2016
SCI6306
Structures algorithmiques de base
Structures logiques (conditionnelles)
Aiguillage simple (SI … ALORS … SINON)
Aiguillage complexe (CHOIX MULTIPLES)
Structures répétitives (boucles)
Nombre de cycles inconnus (TANT QUE)
Nombre de cycles prédéterminés (POUR)
Utiles tant pour la saisie via Web que pour la
publication
Structures qui existent dans tous les langages
procéduraux
6 /19
25 novembre 2016
SCI6306
7 /19
Structures algorithmiques de base
SI … ALORS … SINON (aiguillage simple)
Fonctionnement
Exécute minimalement un bloc d'instructions si la condition est vraie;
Peut aussi inclure un bloc d'instructions si la condition est fausse
Structure générique (forme complète en PHP*)
IF (condition)
{Bloc d'instructions à exécuter si la condition
est vraie}
ELSE
{Bloc d'instructions – facultatif – à exécuter
si la condition est fausse}
Exemple
Pour vérifier la valeur d'un contrôle et définir des actions différentes en
fonction de cette valeur
* Rappel forme compacte pour affichage :
(condition?élément retourné si vrai:élément retourné si faux)
25 novembre 2016
SCI6306
8 /19
Structures algorithmiques de base
CHOIX MULTIPLES (aiguillage complexe)
Fonctionnement
Exécute différents blocs d'instructions en fonction des valeurs prises par une
variable.
Structure générique (PHP)
SWITCH (variable) {
CASE valeur1:
Bloc d'instructions à exécuter si variable = valeur1;
break;
[…]
DEFAULT:
Bloc d'instructions à exécuter si variable = autres valeurs;
}
Exemple
Pour personnaliser l'affichage des données en fonction des différentes valeurs prises
par un champ. Note : pourrait aussi se faire par une série de IF imbriqués mais cela
devient rapidement compliqué lorsqu'il y a plusieurs valeurs à tester.
Exemple : http://dufour.ebsi.umontreal.ca/algo/condition.php
Page PHP : http://cours.ebsi.umontreal.ca/sci6306/docs/sci6306_c12_condition.pdf
25 novembre 2016
SCI6306
Structures algorithmiques de base
TANT QUE (boucle avec répétitions inconnues)
Fonctionnement
Exécute un bloc d'instructions tant que la condition
demeure vraie
Structure générique (PHP)
WHILE (condition)
{Bloc d'instructions à exécuter}
Exemple
Particulièrement utile pour passer à travers les
enregistrements dans une table de résultats
retournée par une requête SQL
9 /19
25 novembre 2016
SCI6306
10 /19
Structures algorithmiques de base
POUR (boucle avec répétitions connues)
Fonctionnement
Exécute un bloc d'instructions de manière répétitive, à l'intérieur d'une
boucle allant d'une valeur de départ à une valeur de fin.
Structure générique (PHP)
FOR (valeur de départ; valeur de fin; valeur de
l'incrémentation)
{Bloc d'instructions à exécuter}
Exemple
Autre manière pour passer à travers l’ensemble des enregistrements
dans une table de résultats retournés par une requête SQL lorsque l'on
connait le nombre de lignes que l'on veut.
Exemple : http://dufour.ebsi.umontreal.ca/algo/repetition.php
Page PHP : http://cours.ebsi.umontreal.ca/sci6306/docs/sci6306_c12_repetition.pdf
25 novembre 2016
SCI6306
11 /19
Code PHP pour publier : processus [1/5]
Étape 1 (BLOCS 1, 2, 3)
Préparer la requête SQL
(visualiser la table de
résultats)
Mais pourquoi ???
Table de résultats
PRENOM
Jean
Hop
Étape 2 (BLOC 4)
Préparer le code HTML pour
afficher une ligne de la table
des résultats
Étape 3 (BLOC 4)
Identifier les éléments HTML
qui se répéteront pour chaque
ligne de la table des résultats
Traitement de la
table de résultats
Jean
Rappel : une table de résultats est lue
de manière linéaire, ligne par ligne!
Page Web résultante
Voici la liste des répondants :
1. Ligne 1
Peupu
• Répondant : Jean Peupu
Lavie
• Répondant : Hop Lavie
2. Ligne 2
Hop
Étape 4 (BLOCS 4, 5, 6)
Insérer le code PHP
(acétates suivantes)
NOM
Peupu
Lavie
25 novembre 2016
SCI6306
12 /19
Étape 2 : Code PHP
Code PHP pour publier : processus [2/5]
Exemple (INSCRIP) : je veux faire afficher pour chacun
Le cours optionnel 2001 Histoire 101 se donne
des cours, dans un paragraphe, son horaire et son statut : le 1e jour de la semaine, à 09:00:00 heure.
Étape 1 (BLOCS 1, 2, 3)
Préparer la requête SQL
(visualiser la table de
résultats)
Étape 2 (BLOC 4)
Préparer le code HTML pour
afficher une ligne de la table
des résultats
Étape 3 (BLOC 4)
Identifier les éléments HTML
qui se répéteront pour chaque
ligne de la table des résultats
Étape 4 (BLOCS 4, 5, 6)
Insérer le code PHP
(acétates suivantes)
NO_
SELECT no_cours, titre,
COURS
jour, heure, statut FROM
20001
cours ORDER BY no_cours; 20002
TITRE
JOUR
HEURE
STATUT
Histoire 101
Éthique 302
1
1
09:00:00
13:00:00
optionnel
obligatoire
Forme spécifique (pour la première ligne)
<p>Le cours optionnel <strong>20001 Histoire 101</strong> se donne le 1e jour
de la semaine, à 09:00:00 heure.</p>
Forme générique (pour toutes les lignes; italique = données dynamiques)
<p>Le cours statut <strong>no_cours titre</strong> se donne le joure jour de la
semaine, à heure heure.</p>
DÉBUT BOUCLE
<p>Le cours statut <strong>no_cours titre</strong> se donne le joure jour
de la semaine, à heure heure.</p>
FIN BOUCLE
1. Code PHP pour la ligne de résultat générique
2. Code PHP pour la boucle
3. Code PHP pour l'ensemble des blocs
25 novembre 2016
SCI6306
13 /19
Code PHP pour publier : processus [3/5]
<?php echo $donnees['statut'];?>
<?php echo $donnees['titre'];?>
<p>Le cours statut <strong>no_cours titre</strong> se
<?php echo $donnees['no_cours'];?>
donne le joure jour de la semaine, à heure heure.</p>
<?php echo $donnees['jour'];?>
<?php echo $donnees['heure'];?>
Résultat final
<p>Le cours <?php echo $donnees['statut'];?> <strong><?php
echo $donnees['no_cours'];?> <?php echo
$donnees['titre'];?></strong> se donne le <?php echo
$donnees['jour'];?><sup>e</sup> jour de la semaine, à <?php
echo $donnees['heure'];?> heure.</p>
Code PHP pour la
ligne générique
25 novembre 2016
SCI6306
14 /19
Code PHP pour publier : processus [4/5]
<?php
while ($donnees = $req_cours->fetch())
{
?>
<p>Le cours <?php echo $donnees['statut'];?> <strong><?php
echo $donnees['no_cours'];?> <?php echo
$donnees['titre'];?></strong> se donne le <?php echo
$donnees['jour'];?><sup>e</sup> jour de la semaine, à <?php
echo $donnees['heure'];?>.</p>
<?php
}
?>
Code PHP pour la
boucle
25 novembre 2016
SCI6306
15 /19
Code PHP pour publier : processus [5/5]
Blocs
PHP
Bloc 1
<?php
include "App_Data/ouverture_bd.php";
Bloc 2
$req_cours = $bdd->prepare('SELECT no_cours, titre, jour, heure, statut FROM cours
ORDER BY no_cours;');
Bloc 3
$req_cours->execute();
Bloc 4
while ($donnees = $req_cours->fetch())
{
?>
<p>Le cours <?php echo $donnees['statut'];?> <strong><?php echo
$donnees['no_cours'];?> <?php echo $donnees['titre'];?></strong> se donne le
<?php echo $donnees['jour'];?>e jour de la semaine, à <?php echo
$donnees['heure'];?>.</p>
<?php
}
Bloc 5
$req_cours->closeCursor();
Bloc 6
$bdd=null;
?>
Code PHP pour
l'ensemble des blocs
25 novembre 2016
SCI6306
16 /19
Code PHP pour publier : autre exemple [1/3]
Exemple (INSCRIP) : je veux produire la liste des étudiants
inscrits à un cours :
Étape 1 (BLOCS 1, 2, 3)
Préparer la requête SQL
(visualiser la table de
résultats)
Étape 2 (BLOC 4)
Préparer le code HTML pour
afficher une ligne de la table
des résultats
Étape 3 (BLOC 4)
Identifier les éléments HTML
qui se répéteront pour chaque
ligne de la table des résultats
Étape 4 (BLOCS 4, 5, 6)
Insérer le code PHP
(acétates suivantes)
• Bretécher, Claire (10002)
• Asimov, Isaac (10004)
SELECT DISTINCT etud.no_etud, nom
FROM etud, suit
WHERE etud.no_etud=suit.no_etud
ORDER BY etud.no_etud;
Forme spécifique (pour la première ligne)
<ul>
<li>Bretécher, Claire (10002)</li>
</ul>
Forme générique (pour toutes les lignes)
<ul>
<li>nom (no_etud)</li>
</ul>
<ul>
DÉBUT BOUCLE
<li>nom (no_etud)</li>
FIN BOUCLE
</ul>
1. Code PHP pour la ligne de résultat générique
2. Code PHP pour la boucle
3. Code PHP pour l'ensemble des blocs
NO_ETUD
10002
10004
NOM
Bretécher, Claire
Asimov, Isaac
25 novembre 2016
SCI6306
17 /19
Code PHP pour publier : autre exemple [2/3]
<ul>
<?php
while ($donnees = $req_etudiant->fetch())
{
?>
<li><?php echo $donnees['nom'];?> (<?php echo
$donnees['no_etud'];?>)</li>
<?php
}
?>
</ul>
Code PHP pour la
ligne générique et
pour la boucle
25 novembre 2016
SCI6306
18 /19
Code PHP pour publier : autre exemple [3/3]
Blocs
PHP
Bloc 1
<?php
include "App_Data/ouverture_bd.php";
Bloc 2
$req_etudiant = $bdd->prepare('SELECT DISTINCT etud.no_etud, nom FROM etud, suit
WHERE etud.no_etud=suit.no_etud ORDER BY etud.no_etud;');
Bloc 3
$req_etudiant->execute();
?>
Bloc 4
<ul>
<?php
while ($donnees = $req_etudiant->fetch())
{
?>
<li><?php echo $donnees['nom'];?> (<?php echo $donnees['no_etud'];?>)</li>
<?php
}
?>
</ul>
Bloc 5
Bloc 6
<?php
$req_etudiant->closeCursor();
$bdd=null;
?>
Code PHP pour
l'ensemble des blocs
25 novembre 2016
SCI6306
19 /19
Exercices collectifs en classe
Exercice 1 : Refaire le processus pour un
autre besoin (production d'un tableau
présentant la moyenne obtenue par cours)
Exercice 2 : Examiner des fichiers PHP pour
la publication Web pour comprendre à quoi ils
servent
Téléchargement