PHP et les Bases de données - Généralités Conception d une base de données Méthodes utilisées : MERISE, UML Modèle conceptuel des données MCD, Modèle logique MLD, Modèle Physique MPD. Ces aspects seront abordés plus tard dans le cours Bases de données Création d une base de données et d une table Utiliser PHPMYADMIN pour créer une table user : Id_user, Login, pass, statut a) Création de la base de données TCRT
b) Création de la table users c) création des champs : id_users, login, pass, statut d) modification du champ pass : remplacer VARCHAR par PASSWORD si on veut crypter le mot de passe. Sélectionner l onglet INSERER pour remplir la table
e) Après validation
f) Affichage du contenu de la table users : onglet AFFICHER Requête SQL pour créer la base de données tcrt CREATE DATABASE tcrt ; Requête SQL pour créer la table users dans la base de données tcrt CREATE TABLE IF NOT EXISTS `users` ( `id_user` int(11) NOT NULL auto_increment, `login` varchar(50) NOT NULL, `pass` varchar(60) NOT NULL, `statut` enum('a','u') NOT NULL, PRIMARY KEY (`id_user`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; Requête SQL pour insérer le contenu dans la table users dans la base de données tcrt INSERT INTO `users` (`id_user`, `login`, `pass`, `statut`) VALUES (1, 'admin', '*63D85DCA15EAFFC58C908FD2FAE50CCBC60C4EA2', 'a'), (2, 'bob', '*63D85DCA15EAFFC58C908FD2FAE50CCBC60C4EA2', 'u'); Requête SQL pour extraire le contenu de la table users Select * from users ; Utiliser la ligne de commandes pour gérer les bases de données
C:\xampp\mysql\bin>mysql -u root que user root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 22 Server version: 5.0.51a Source distribution connexion en tant Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>use tcrt mysql>show tables tcrt mysql>select * from users ; users mysql>? mysql>quit sélection de la base tcrt affichage des tables de la base affichage du contenu de la table liste des commandes disponibles sortie de MySQL Utilisation de MySQL avec PHP Connexion à Mysql en PHP sur la base tcrt : connexion.php //variables $serveur_db = "localhost"; $user_db = "root"; $pass_db = ""; $base_db = "tcrt"; serveur MySQL utilisateur MySQL par défaut(admin) mot de passe de root par défaut choix de la base de donnée //1- connection au serveur Mysql $con = mysql_connect($serveur_db, $user_db, $pass_db); if(!$con){ echo 'Echec serveur Contactez le Webmaster'; exit(); //2- choix de la base $db = mysql_select_db($base_db)
or die('echec base Contactez le Webmaster'); Exploitation de la base de donées tcrt, requêtes sur la table users : bdd.php require_once('connexion.php'); $query='select * from users'; $result=mysql_query($query); if (mysql_num_rows($result) > 0){ echo '<table>'; while($row=mysql_fetch_assoc($result)){ echo '<tr>'; foreach ($row as $key=>$value){ echo '<td>'.$value.'</td>'; echo '</tr>'; echo '</table>'; else { echo '<h1>erreur</h1>'; EXEMPLE Base de données : TCRT Table :Users CREATE TABLE IF NOT EXISTS `users` ( `id_user` int(11) NOT NULL auto_increment, `login` varchar(50) NOT NULL, `pass` varchar(80) NOT NULL, `statut` enum('a','u') NOT NULL, PRIMARY KEY (`id_user`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; -- -- Contenu de la table `users` -- INSERT INTO `users` (`id_user`, `login`, `pass`, `statut`) VALUES (1, 'admin', '*63D85DCA15EAFFC58C908FD2FAE50CCBC60C4EA2', 'a'), (2, 'bob', '*63D85DCA15EAFFC58C908FD2FAE50CCBC60C4EA2', 'u'), (3, 'bill', '*63D85DCA15EAFFC58C908FD2FAE50CCBC60C4EA2', 'u');
Connexion.php //variables $serveur_db = "localhost"; $user_db = "root"; $pass_db = ""; $base_db = "tcrt"; //1- connexion au serveur //************************** $con = mysql_connect($serveur_db, $user_db, $pass_db); if(!$con){ echo 'Echec serveur Contactez le Webmaster'; exit(); //2- choix de la base //************************** $db = mysql_select_db($base_db) or die('echec base Contactez le Webmaster'); Bd.php require_once('connexion.php'); $query="select * from users"; $result=mysql_query($query); if (mysql_num_rows($result) > 0){ echo '<table border=1>'; while($row=mysql_fetch_assoc($result)){ echo "<pre>"; print_r($row); echo '<tr>'; foreach ($row as $key=>$value){ echo '<td>'.$value.'</td>'; echo '</tr>'; echo '</table>'; else { echo '<h1>erreur</h1>';
Gestion des utilisateurs de MySQL Pour se connecter sur un serveur MySQL, il faut fournir un compte utilisateur existant dans la base de comptes. Par défaut le compte existant est root, sans mot de passe. C est l administrateur. Pour des questions de sécurité, il est préférable de créer un compte utilisateur en lui affectant des droits(privilèges) sur les base et les tables. Privilèges utilisateurs Tables mysql.user, mysql.db, mysql.tables_priv, mysql.columns_priv Si on affecte les privilèges ON *.* : Y sera écrit dans la table USER
Si on affecte les privilèges ON base.* : Y écrit dans DB Si on affecte les privilèges ON base.table : Y écrit dans TABLES_PRIV Si on affecte les privilèges ON base.table + (champs) : Y écrit dans COLUMNS_PRIV Attribution des privilèges en ligne de commande GRANT priv_type [(column_list)] [, priv_type [(column_list)]]... ON [object_type] {tbl_name * *.* db_name.* TO user [IDENTIFIED BY [PASSWORD] 'password'] [, user [IDENTIFIED BY [PASSWORD] 'password']]... [REQUIRE NONE [{SSL X509] [CIPHER 'cipher' [AND]] [ISSUER 'issuer' [AND]] [SUBJECT 'subject']] [WITH with_option [with_option]...] Connexion à mysql : mysql u <user> -p -h <hostname hostaddres> Un user est caractérisé par : nom, mot de passe, host. Lorsqu on crée le user on crée également le host sur lequel il se connecte : localhost, adresseip, nom dns. Cette information est écrite dans la table user. Cas particulier : localhost ne met pas en jeu le protocole TCP/IP, mais les named pipes. Lors de la connexion, on peut préciser h suivi du nom du serveur MySQL. mysql> grant select ON *.* to 'bob'@'192.160.0.%' identified by 'toto'; Ici bob peut se connecter avec le mot de passe toto à partir du sous-réseau 192.168.0.0 avec le privilège SELECT sur toutes les bases et toutes les tables Contenu de la table mysql.user Root équivalent à partir de n importe quel host: mysql> grant all on *.* to 'admin'@'%' identified by toto' with grant option;
Connexion sécurisée et gestion des sessions Index.php $erreur = isset($_get['erreur'])? $_GET['erreur'] : "" ; <html> <head><title>identification</title> <style type="text/css"> </style> </head> <body> <form action="login.php" method="post"> <table border="1" align="center" cellpadding="3" cellspacing="0"> <tr><th colspan="2">authentification</th></tr> <tr> <th >Login : </th> <td><input name="login" type="text" id="login" value="" /></td> </tr> <tr> <th >Mot de passe : </th> <td><input name="pass" type="password" id="pass" value="" /></td> </tr> <tr> <td colspan="2"> switch ($erreur) { case 1: echo "<center><font color='red'>login ou mot de passe incorrect</font></center>"; break; case 2: echo "<center><font color='red'>veuillez vous connecter d'abord!</font></center>"; break; default: break; </td> </tr> <tr> <th colspan="2" > <input type="submit" name="submit" value="envoyer" /></th> </tr> </table> </form> </body> </html> Login.php require_once('connexion.php'); $login = isset($_post['login'])? $_POST['login'] : "" ; $pass = isset($_post['pass'])? $_POST['pass'] : "";
$query = "select * from users where login='$login' and pass=password('$pass') "; $result = mysql_query($query); if (mysql_num_rows($result) > 0){ $tmp = mysql_fetch_assoc($result); mysql_close(); //cookie /*setcookie("login", $login, time()+(4*3600)); setcookie("pass", $pass, time()+(4*3600));*/ //session session_start(); $_SESSION['login']='ok'; $_SESSION['id_user']=$tmp['id_user']; $_SESSION['statut']=$tmp['statut']; $_SESSION['nom']=$tmp['login']; C:\xampp\tm p header('location: accueil.php'); login s:2:"ok";id_user s:1:"2";statut s:1:"u";nom s else { :3:"bob";5:"admin"; //echec header('location: index.php?erreur=1'); exit(); Accueil.php include('sessionverif.php'); //reception de variables, chargement d'un en-tête include('header.php'); include ('footer.php'); Sessionverif.php //vérification si session en cours session_start(); if(!isset($_session['login']) OR $_SESSION['login']!='ok'){ header("location: index.php?erreur=2"); exit(); Header.php
$statut = isset($_session['statut'])? $_SESSION['statut'] : ""; <html> <head> <title>bienvenue</title> <style type="text/css" media="all"> #lignemenu{ float:left; background-color:blue; width:100%; color:white; #lignemenu.droite{ float:right; text-align:right; margin-right:10px; font-family:"trebuchet MS"; #lignemenu.gauche{ float:left; text-align:center; font-family:"trebuchet MS"; text-decoration:none; color:white; margin-left:30px; a { color:white; text-decoration:none; #lienbandeau{ text-decoration:none; color:yellow; #bandeau img{ width:100%; body { margin-left: 0px; margin-top: 0px; margin-right:0px; </style> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"></head> <body> <div id="bandeau" ><img src="bandeau.jpg"></div> <div id="lignemenu"> <div class="droite">
</div> echo $_SESSION['nom'].' connecté. session id : '.session_id().' - <a id="lienbandeau" href="finsession.php">déconnexion</a>'; <div class="gauche"> </div> switch($statut) { case "a" : include('menuadmin.php'); break; case "u" : include('menu.php'); break; </div> Menu.php <a href="accueil.php" >Accueil</a> <a href="productlist.php" >Catalogue</a> <a href="sessionview.php" >Voir mon Panier</a> <a href="commandeview.php" >Voir mes commandes</a> Menuadmin.php <a href="accueil.php" >Accueil</a> <a href="productlist.php" >Catalogue</a> <a href="ajoutproduits.php" >Ajout de Produit</a> <a href="sessionview.php" >Voir mon Panier</a> <a href="commandeview.php" >Voir mes commandes</a> Footer.php </body> </html>