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.