Cours 10 Formulaires Web pour saisie de données dans une base

Transcription

Cours 10 Formulaires Web pour saisie de données dans une base
École de bibliothéconomie et des sciences de l’information
SCI6306 Bases de données documentaires
Cours 10
Formulaires Web pour saisie de données
dans une base de données relationnelle
avec PHP (partie 2 de 2)
Faculté des arts et des sciences
11 novembre 2016
© Christine Dufour, 2016
1 / 14
11 novembre 2016
SCI6306
2 / 14
Au programme aujourd’hui
B.A.-BA de la chasse aux erreurs en PHP
Intégration Web d’une base de données
MySQL pour l’enregistrement de données
Partie 2 : Préparation du code PHP pour enregistrer
les données
Travail en laboratoire : Volet C (Partie A) (et, si
désiré, finalisation de l'exercice)
11 novembre 2016
SCI6306
3 / 14
B.A.-BA de la chasse aux erreurs en PHP
Exploitation de la coloration syntaxique de NotePad++
Exploitation de l'association, dans NotePad++ des caractères
"d'encadrement" (parenthèses, balises, etc.)
Utilisation de la mise en commentaires pour cibler le morceau de code
problématique
11 novembre 2016
SCI6306
4 / 14
Étape 3 : Code PHP
Approche utilisée
PHP pour non programmeurs!
Approche des « blocs de construction » :
chacun des blocs se traduit en différents
morceaux de codes
Présentation dans les acétates des différents blocs
de code avec identification des éléments à modifier
(éléments indiqués en italique bleu)
11 novembre 2016
SCI6306
5 / 14
Étape 3 : Code PHP
Code PHP pour enregistrer des données [1/2]
5 blocs pour enregistrer des données dans la table X de la
base de données Y
1.
2.
3.
4.
5.
Connexion avec la base de données Y
Préparation de la requête SQL pour l’ajout des données dans la
table X
Exécution de la requête SQL en précisant les valeurs à saisir
Fermeture de la requête
Fermeture de la base de données
Caractéristiques générales d’une page PHP
Fichier avec extension .php
Code PHP encadré par une balise d’ouverture <?php et de
fermeture ?>
Le code présenté correspond à l’exemple « demo-formulaire »
11 novembre 2016
SCI6306
6 / 14
Étape 3 : Code PHP
Code PHP pour enregistrer des données [2/2]
Structure générique pour enregistrement
try
{
[Blocs 1 à 5]
}
// Gestion des erreurs
catch(Exception $e)
{
exit('Erreur : '.$e->getMessage());
}
11 novembre 2016
SCI6306
7 / 14
Étape 3 : Code PHP
Code PHP pour enregistrer : Bloc 1
Connexion avec la base de données
1.
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=sci6306a16-eq13',
'sci6306a16-eq13', 'mdp', $pdo_options);
Nom
d’usager
sur
serveur
MySQL
$bdd->exec("SET CHARACTER SET utf8");
Considérations particulières
Mot de passe sur
serveur MySQL
Nom de la base de
données MySQL
•
Comme les informations d’identification sur le serveur sont passées en clair dans le code,
ce bloc n’est habituellement pas inséré directement dans le code PHP, pour des
raisons de sécurité.
•
On place cette information dans un fichier séparé (nommé ouverture_bd.php dans
l’exemple utilisé), fichier que l’on dépose dans un dossier App_Data, dossier qui fait
l’objet d’une protection particulière sur le serveur.
•
Dans le fichier PHP qui sert à l’enregistrement des données, on insère ce fichier en
l’appelant avec une commande INCLUDE :
include 'App_Data/ouverture_bd.php';
Chemin relatif pour se rendre jusqu’au
fichier contenant le bloc d’instruction
11 novembre 2016
SCI6306
8 / 14
Étape 3 : Code PHP
Code PHP pour enregistrer : Bloc 2
2.
Variable
dans
laquelle on
enregistre
la requête
SQL
Préparation de la requête SQL pour enregistrer les données
$requete_ajout = $bdd->prepare('INSERT INTO donnees (q1,
q2_1, q2_2, q2_3, q3, q4, q5, q5_autre, q6) VALUES (:q1,
:q2_1, :q2_2, :q2_3, :q3, :q4, :q5, :q5_autre, :q6);');
À noter :
Requête SQL

La requête pour l’ajout est une requête SQL INSERT INTO. Pour un
formulaire permettant la modification des données, il s’agirait plutôt d’une
requête UPDATE.

Les valeurs à verser dans la table (clause VALUES) ne sont pas définies
dans la requête. Elles sont représentées, à cette étape, par des variables
avec la syntaxe :nom_variable. Les valeurs de ces variables seront
définies dans le bloc suivant.
11 novembre 2016
SCI6306
9 / 14
Étape 3 : Code PHP
Code PHP pour enregistrer : Bloc 3
3.
Exécution de la requête et définition des variables
$requete_ajout->execute(array('q1' => $_POST['q1'], 'q2_1'
=> $_POST['q2_1'], 'q2_2' => $_POST['q2_2'], 'q2_3' =>
$_POST['q2_3'], 'q3' => $_POST['q3'], 'q4' =>
$_POST['q4'], 'q5' => $_POST['q5'], 'q5_autre' =>
$_POST['q5_autre']));
À noter :

“Array” = vecteur contenant les variables de la requête SQL avec leurs
valeurs

Syntaxe générique
array('nom_var1'=>valeur1, 'nom_var2'=>valeur2)

Les valeurs des variables sont les valeurs conservées dans les contrôles
du formulaire que l’on peut interpeller avec la syntaxe
$_POST['nom_controle1'] (formulaire avec méthode POST)
11 novembre 2016
SCI6306
10 / 14
Étape 3 : Code PHP
Code PHP pour enregistrer : Blocs 4 et 5
// Bloc 4 : fermeture de la requête
$requete_ajout->closeCursor();
// Bloc 5 : fermeture de la base de
données
$bdd=null;
À noter : il est important de toujours fermer les
requêtes et la base de données.
11 novembre 2016
SCI6306
11 / 14
Étape 3 : Code PHP
Où placer le code pour l'enregistrement? [1/2]
Scénario 1 : Dans un fichier à part du fichier
du formulaire, au début du fichier
Fichier merci.php
Scénario à retenir lorsque l’on veut, après
avoir soumis le formulaire, aller à une
autre page, comme par exemple, ici, à
une page de remerciement.
11 novembre 2016
SCI6306
12 / 14
Étape 3 : Code PHP
Où placer le code pour l'enregistrement? [2/2]
Scénario 2 : Dans le même fichier que celui contenant le
formulaire, au début du fichier
Fichier superviseur.php
Particularité : Le code
pour l’enregistrement
est inséré dans une
condition IF pour qu’il
ne s’exécute que si la
page a été rechargée
après avoir cliqué sur le
bouton de soumission.
Ici, le bouton avait pour
nom « action » et sa
valeur, lorsque cliqué,
est « Enregistrer
superviseur ».
Scénario à retenir lorsque
l’on veut permettre la
saisie en continu de
plusieurs réponses au
formulaire, comme, par
exemple, pour la saisie
de nouveaux
superviseurs pour
InfoStage.
11 novembre 2016
SCI6306
13 / 14
Exemple d’interface complexe [1/2]
Bouton 1 : Nouveau
Recharge la page.
Bouton 2 : Modifier
Sur la base du choix du menu déroulant, recharge la page
en donnant comme valeurs aux différents contrôles les
données du stage choisi (requête SELECT).
Bouton 4 : Supprimer
Supprime les données du stage affiché (requête DELETE). Bouton
affiché uniquement lors de la modification d’un stage existant.
Bouton 3 : Enregistrer
Enregistre les données : Requête INSERT INTO s’il s’agit d’un nouveau stage, Requête UPDATE s’il s’agit d’un stage
existant. C’est ici que les contraintes additionnelles sont validées.
11 novembre 2016
SCI6306
14 / 14
Exemple d’interface complexe [2/2]
L’action du formulaire associé aux
boutons consiste à recharger la
page. Grâce aux différentes
conditions IF, seules les instructions
PHP correspondant au bouton
ayant provoqué la « recharge » de
la page seront exécutées.