É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 13 novembre 2015 Christine Dufour, 2015 1/ 13
SCI6306 2/ 13 Au programme aujourd hui 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)
SCI6306 3/ 13 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)
SCI6306 4/ 13 Code PHP pour enregistrer des données [1/2] 5blocspour enregistrer des données dans la table X de la base de données Y 1. Connexion avec la base de données Y 2. Préparation de la requête SQL pour l ajout des données dans la table X 3. Exécution de la requête SQL en précisant les valeurs à saisir 4. Fermeture de la requête 5. 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»
SCI6306 5/ 13 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()); }
SCI6306 6/ 13 Nom d usager sur serveur MySQL Code PHP pour enregistrer : Bloc 1 1. Connexion avec la base de données $pdo_options[pdo::attr_errmode] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=localhost;dbname=sci6306a15-eq01', 'sci6306a15-eq01', 'mdp', $pdo_options); $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
SCI6306 7/ 13 Code PHP pour enregistrer : Bloc 2 2. 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 : 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 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.
SCI6306 8/ 13 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 i.e. la liste des variables 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)
SCI6306 9/ 13 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.
SCI6306 10 / 13 Où placer le code? [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.
SCI6306 11 / 13 Où placer le code? [2/2] Scénario 2 : Dans le même fichier que celui contenant le formulaire, au début du fichier 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. Fichier superviseur.php Ici, le bouton avait pour nom «bouton_superviseur» et sa valeur, lorsque cliqué, est «Enregistrer». 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.
SCI6306 12 / 13 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.
SCI6306 13 / 13 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.