PHP/MYSQL Web Dynamique ENSG Juin 2008
Ces 6 jours de formation Jour 1 : présentations, attentes, principes, HTML Jour 2 : CSS, et HTML Jour 3 : PHP, formulaires, Base de données Jour 4 : Rappel PHP, Extraction de données, affichage Jour 5 : Requêtes, Insertion de données Jour 6 : Sécurité, questions, retours sur la formation.
NOTRE EXEMPLE Application simple en PHP
Gestion de bibliothèque Enregistrement des ouvrages : titre, auteur, date de publication, catégorie Ajout de nouveau livres par des utilisateurs autorisés Recherche par catégorie, par titre, par auteur Accès par le web
Application web PHP : traitements MySQL : base de données contenant les informations sur les livres, utilisateurs, etc...
PHP Langage de script adapté au web
Où trouver tout ce que vous voulez savoir et tout ce que vous ne voulez pas savoir à propos de PHP?
http://www.php.net
AU REVOIR Bonne fin de journée!
LANGAGE PHP Introduction
BONJOUR LE MONDE Le n-ième He!o World
Hello world Nouveau langage, nouveau He!o world! Créer un fichier index.php
Hello world Nouveau langage, nouveau He!o world! Créer un fichier index.php <?php?> echo Hello world ;
Explications <?php?> echo Hello world ;
Explications Délimitent le code PHP <?php?> echo Hello world ;
Explications Délimitent le code PHP Tout ce qui est en dehors de ces balises n est pas interprété comme du code PHP mais directement envoyé au client. <?php?> echo Hello world ;
Hello world 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/tr/xhtml11/dtd/ xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>mon index.php!!!</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <p> <?php echo Hello World! ;?> </p> </body> </html>
Hello world 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/tr/xhtml11/dtd/ xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>mon index.php!!!</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <p> <?php echo Hello World! ;?> </p> </body> </html> Seule partie interprétée par PHP
LES VARIABLES et les opérateurs
PHP et les variables Pas besoin de déclarer les variables Pas de type de données Pas de gestion mémoire
PHP et les variables Pas besoin de déclarer les variables Pas de type de données Pas de gestion mémoire <?php $foo = bar ; $foo = 3; $foo++;?>
Opérateurs Opérateur Exemple Résultat si $bar = 3 = affectation $foo = $bar 3 + addition 2+3+$bar; 8 - soustraction 2-3-$bar; -2 * multiplication 2*3*$bar; 18 / division $bar/2; 1.5 % modulo $bar%2 1. concaténation $bar. ok 3 ok
Opérateurs Opérateur Exemple Résultat si $bar = 3 = affectation $foo = $bar 3 + addition 2+3+$bar; 8 - soustraction 2-3-$bar; -2 * multiplication 2*3*$bar; 18 / division $bar/2; 1.5 % modulo $bar%2 1. concaténation $bar. ok 3 ok Ne pas confondre avec l opérateur de comparaison ==
Opérateurs de comparaison Opérateur Exemple Résultat == égalité de valeur 3 == 3 TRUE === égalité valeur et type 3 === 3 FALSE < inférieur strict 3 < 3 FALSE <= inférieur ou égal 3 <= 3 TRUE > supérieur strict 3 > 3 FALSE >= supérieur ou égal 3 >= 3 TRUE!= différent (valeur) 3!= 3 FALSE!== différent (valeur ou type) 3!== 3 TRUE
Opérateurs logiques Opérateur! NON && ET OU
LES TABLEAUX Une structure de données très utile en PHP
PHP et les tableaux <?php // Création (facultatif) $montab = array();?> // Initialisations $montab[0] = 1; $montab[1] = 32.5; $montab[2] = Hello World ; // Tableaux à plusieurs dimensions $montab[3] = array(); $montab[3][0] = 1; $montab[3][2] = Hello World ; // Initialisation sans connaître le numéro $montab[] = 32; // Équivalent à $montab[4] = 32; // Création et initalisation $tableau2 = array(1,32.5, Hello World,32);
Tableaux de hachage <?php // Création (facultatif) $montab = array();?> // Initialisations $montab[ couleur ] = vert ; $montab[ temperature ] = 32.5; $montab[ message ] = Hello World ; // Création et initalisation $tableau2 = array( couleur => vert, temperature =>32.5, message => Hello World );
Tableaux de hachage <?php // Création (facultatif) $montab = array();?> // Initialisations $montab[ couleur ] = vert ; $montab[ temperature ] = 32.5; $montab[ message ] = Hello World ; // Création et initalisation $tableau2 = array( couleur => vert, temperature =>32.5, message => Hello World ); NB : les tableaux à plusieurs dimensions sont aussi possibles
Parcours de tableaux <?php // Récupération de la clé foreach ($tableau as $cle => $valeur) { echo <p>la clé.$cle. est associée à la valeur :.$valeur. <p> ; }?> // Pas de récupération de la clé foreach ($tableau as $valeur) { echo <p>le tableau contient la valeur :.$valeur. <p> ; }
<?php if ($truc == machin ){ // Si truc = machin }else{ // Sinon }?> Tests
LES FORMULAIRES Interactions avec l utilisateur
Données des formulaires Code source HTML <form action= fichier.php method= get > <input type= text name= nom /> <input type= submit value= Envoyer /> </form>
Données des formulaires Fichier qui devra analyser le formulaire Code source HTML <form action= fichier.php method= get > <input type= text name= nom /> <input type= submit value= Envoyer /> </form>
Données des formulaires Fichier qui devra analyser le formulaire Code source HTML <form action= fichier.php method= get > <input type= text name= nom /> <input type= submit value= Envoyer /> </form> Valeur renvoyée par l utilisateur accessible via $_GET[ nom ]
Méthodes de formulaires GET POST passé dans la barre d adresse passé en HTTP marques-page et liens possibles pas de marque-page $_GET[ nom ] $_POST[ nom ]
PETIT EXERCICE Formulaire d authentification
Exo : formulaire et PHP Créer un formulaire d authentification dans un fichier php Traiter le résultat du formulaire avec le même fichier Si le login est admin et le mot de passe pipo remplacer le formulaire par un cadre rappelant l identité de l utilisateur Afficher une information secrète Fonctions utiles : array_key_exists() et is_array() (voir la documentation de PHP)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1- transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/ html;charset=utf-8" /> <title>exercice 1</title> </head> <body> <h1>page web protégée</h1> <div id="identite"> <?php if (is_array($_post) && array_key_exists("login", $_POST) && array_key_exists("pass",$_post) && $_POST["login"]=="admin" && $_POST["pass"]=="pipo") { // Ok $connecte = true; echo "<p>bienvenue Admin!</p>"; }else{ $connecte = false; // Formulaire?> <form method="post" action="index.php"> <dl> <dt>nom</dt> <dd><input type="text" name="login" /></dd> <dt>mot de passe</dt> <dd><input type="password" name="pass" /></ dd> </dl> <p><input type="submit" value="connexion" /></ p> </form> <?php }?> </div> <div id="contenu"> <?php if ($connecte) {?> <p>informations confidentielles, accessibles uniquement pour l'admin! Trop fort!</p> <?php }else {?> <p>connectez-vous d'abord!</p> <?php }?> </div> </body> </html>
Comment fait-on pour gérer les identités grâce à la base de données?
MYSQL SGBD libre
SGBD libre Système de gestion de bases de données libre Bases de données relationnelle (standard) Suffit à la plupart des usages du web Grand succès grâce au lien fort avec PHP Libre : open source et gratuit
SGBD simple Pas de transactions (sur MyISAM) Pas de procédures stockées Pas de contrôle d intégrité
SQL Échanger avec la base de données
Un langage standard Langage normalisé Repris par tous les SGBD, mais adapté aux besoins : petites différences dans la syntaxe base et principes communs
Manipulation des données SELECT : récupération de données selon certains critères INSERT : enregistrement de nouvelles données UPDATE : modification de données existantes
Manipulation de la structure CREATE : création d une table ou d une base de données DELETE : effacement d une table ou base ALTER : modifier une table existante
MODÉLISATION Créer un schéma de base de données
Identifier les données Utilisateurs Livres Auteurs Catégories
Modélisation de la base de données
Modélisation de la base de données Utilisateur Nom Prénom Login Mot de passe Auteur Nom Prénom 1.Identifier les objets Livre ISBN Titre Année de publication Catégorie Nom
Modélisation de la base de données Utilisateur Nom Prénom Login Mot de passe Auteur Nom Prénom Livre 1.Identifier les objets 2.Trouver des identifiants uniques ISBN Titre Année de publication Catégorie Nom
Modélisation de la base de données Utilisateur id Nom Prénom Login Mot de passe Auteur id Nom Prénom Livre 1.Identifier les objets 2.Trouver des identifiants uniques ISBN Titre Année de publication Catégorie id Nom
Modélisation de la base de données 1.Identifier les objets Utilisateur id Nom Prénom Login Mot de passe 2.Trouver des identifiants uniques Livre ISBN Titre Année de publication 3.Trouver les relations entre objets et les cardinalités 1 auteur écrit plusieurs livres 1 livre n a qu un auteur Auteur id Nom Prénom Catégorie id Nom
Modélisation de la base de données 1.Identifier les objets Utilisateur id Nom Prénom Login Mot de passe 2.Trouver des identifiants uniques Livre ISBN Titre Année de publication 3.Trouver les relations entre objets et les cardinalités 1 auteur écrit plusieurs livres 1 livre n a qu un auteur 1 livre appartient à 1 ou plusieurs catégories 1 catégorie peut contenir plusieurs livres Auteur id Nom Prénom Catégorie id Nom
Modélisation de la base de données 1.Identifier les objets Utilisateur id Nom Prénom Login Mot de passe 2.Trouver des identifiants uniques Livre ISBN Titre Année de publication 3.Trouver les relations entre objets et les cardinalités 1,1 1 auteur écrit plusieurs livres 1 livre n a qu un auteur 1 livre appartient à 1 ou plusieurs catégories 1 catégorie peut contenir plusieurs livres 1,n 0,n 1,n Auteur id Nom Prénom Catégorie id Nom
Modélisation de la base de données Utilisateur id Nom Prénom Login Mot de passe Livre 1,1 1,n Auteur id Nom Prénom ISBN Titre Année de publication 1,n Catégorie 0,n id Nom
Modélisation de la base de données Utilisateur id Nom Prénom Login Mot de passe Livre 1,1 1,n Auteur id Nom Prénom 4.Relations 1-n : mettre une clé ISBN Titre Année de publication #auteur étrangère dans la table des objets qui ne sont liés qu à un seul objet 1,n 0,n Catégorie id Nom
Modélisation de la base de données Utilisateur id Nom Prénom Login Mot de passe Livre 1,1 1,n Auteur id Nom Prénom 4.Relations 1-n : mettre une clé ISBN Titre Année de publication #auteur étrangère dans la table des objets qui ne sont liés qu à un seul objet 1,n 5.Relations n-n : créer une table de liaison 1,1 Appartenance #catégorie #livre 1,1 0,n Catégorie id Nom
Exemples de données ISBN Titre Auteur 32234S Le Calme 1 08534G Tempête 1 id Nom Prénom 1 Dupond Jean 2 Dupont Georges ISBN Categorie 08534G 1 id Catégorie 08534G 2 1 Roman 2 Policier
Exemples de données ISBN Titre Auteur 32234S Le Calme 1 08534G Tempête 1 id Nom Prénom 1 Dupond Jean 2 Dupont Georges ISBN Categorie 08534G 1 id Catégorie 08534G 2 1 Roman 2 Policier
Exemples de données ISBN Titre Auteur 32234S Le Calme 1 08534G Tempête 1 id Nom Prénom 1 Dupond Jean 2 Dupont Georges ISBN Categorie 08534G 1 id Catégorie 08534G 2 1 Roman 2 Policier
Exemples de données ISBN Titre Auteur 32234S Le Calme 1 08534G Tempête 1 id Nom Prénom 1 Dupond Jean 2 Dupont Georges ISBN Categorie 08534G 1 id Catégorie 08534G 2 1 Roman 2 Policier
Exercice Créez des tables Écrivez des données d exemple : comptes d utilisateurs, livres, catégories, auteurs Écrivez et testez avec phpmyadmin des requêtes qui permettent de récupérer les livres d une certaine catégorie ou les ouvrages d un auteur (selon son nom)