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, Requêtes, Sessions Jour 5 : Sessions, Requêtes, Insertion de données Jour 6 : Sécurité, questions, retours sur la formation. ACCÈS À LA BASE DE DONNÉES Requêtes avec PHP Fonctions MySQL de PHP Rechercher dans la documentation PHP des informations sur MySQL mysql_connect() mysql_select_db() mysql_query() mysql_real_escape_string() mysql_fetch_object() ou mysql_fetch_array() Connexion à une base de données Fonction mysql_connect(host, user, password) Fonction mysql_select_db(database) N’utiliser qu’une seule fois dans un script Script plus rapide Moins de charge sur la base de données <?php $lienDB = @mysql_connect(“localhost”, “utilisateur”,”motDePasse”); if (!$lienDB) die(“Erreur de connexion à la base de données”); if (!@mysql_select_db(“database”,$lienDB)) die(“Erreur de sélection de la base de données”); ?> Exécution d’une requête Fonction mysql_query() <?php $lienDB = @mysql_connect(“localhost”, “utilisateur”,”motDePasse”); if (!$lienDB) die(“Erreur de connexion à la base de données”); if (!@mysql_select_db(“database”,$lienDB)) die(“Erreur de sélection de la base de données”); @mysql_query(“INSERT INTO livres (titre,auteur) VALUES (‘Test’,1)”,$lienDB); ?> Récupération de données Fonction mysql_fetch_array() ou mysql_fetch_object() <?php $lienDB = @mysql_connect(“localhost”, “utilisateur”,”motDePasse”); mysql_select_db(“baseDedonnees”,$lienDB); if (!$lienDB) die(“Erreur de connexion à la base de données”); $resultat = @mysql_query(“SELECT * FROM livres”,$lienDB); for ($i=0;$i<@mysql_num_rows($resultat);$i++) { $livres[] = @mysql_fetch_object($resultat); } // Accès aux données echo “<ul>”; foreach($livres as $livre) { echo “<li>”.$livre->titre.”</li>”; } echo “</ul>”; ?> Sécurisation des requêtes Tous les paramètres reçus de l’utilisateur et utilisés dans une requête doivent-être sécurisés : mysql_real_escape_string() Formulaires Base de donnée <?php $lienDB = @mysql_connect(“localhost”, “utilisateur”,”motDePasse”); mysql_select_db(“baseDedonnees”,$lienDB); if (!$lienDB) die(“Erreur de connexion à la base de données”); // Sécurisation $login = mysql_real_escape_string($_POST[“login”],$lienDB); @mysql_query(“SELECT * FROM utilisateurs WHERE login=’”.$login.”’”,$lienDB); ?> Le paramètre magic_quotes de PHP peut poser des problèmes. Avant sa désactivation, il faut vérifier que tous les paramètres sont sécurisés ! UTILISER UNE SESSION Mode d’emploi en PHP Démarrer une session Utiliser la fonction session_start() Cette fonction doit-être utilisée avant tout envoi de données à l’utilisateur, car elle envoie des données dans l’en-tête de connexion HTTP. Stocker des informations sur l’utilisateur PHP défini un tableau destiné à contenir les informations sur l’utilisateur $_SESSION[] Enregistrer une donnée : Appel obligatoire à session_start en début de script Initialisation de $_SESSION[“nomVariable”] C’est tout Accéder aux informations sur l’utilisateur Il faut obligatoirement faire appel à session_start() en debut de script. $_SESSION[“nomVariable”] contient la donnée précédemment stockée C’est tout. Effacer les informations de session Utiliser la fonction session_destroy() : efface toutes les données Utiliser session_start() : recrée une nouvelle session MODÉLISATION DE L’APPLICATION Quels fichiers, quelles fonctions ? QUELLES FONCTIONS ? Un fichier par fonction de l’application CRÉATION DE LIBRAIRIES Organisation du code source Utilisation de librairies PHP Appel à des fonctions définies dans un autre fichier : include / include_once require / require_once : erreur si le fichier n’est pas trouvé *_once : le fichier n’est pas parsé une deuxième fois, évite les erreurs (fonctions déjà déclarées) include ou require : équivalent à la recopie du fichier appelé à la place de l’instruction d’inclusion Require ou include ? require : si le fichier n’est pas trouvé, une erreur est levée par PHP. include : si le fichier est absent, un avertissement est levé par PHP. Meilleures pratiques Regrouper les fonctions qui ont un lien dans un même fichier php : une librairie. Regrouper les librairies dans un répertoire /lib Identifier les librairies indispensables pour toutes les pages. Créer un fichier /conf.php regroupant les paramètres de connexion à la base de données et les paramètres globaux de l’application. Créer un fichier /init.php qui fait appel à toutes les librairies indispensables, dans le bon ordre, et à /conf.php. Utiliser ce fichier dans toutes les pages. QUELLE LIBRAIRIES UTILISÉES PAR TOUTE L’APPLICATION ? Un fichier par librairie ! Librairies Connexion, requêtes MySQL Authentification et gestion de l’identité Affichage des éléments de la page : titre, menu, footer, etc... Application Créer les fichiers conf.php, init.php. Créer une librairie d’affichage : écriture de l’en-tête HTML et du pied de page, écriture du menu. Créer une librairie d’authentification : analyse dans tous les cas si $_POST contient une demande d’authentification ou de déconnexion. Créer la librairie d’échange avec MySQL. Partir du modèle de page web fourni pour l’exercice.