MySql est un logiciel de gestion de base de données; il est gratuit et fourni en standard dans le pack d'installation EasyPhp. Ce SGBD est employé dans de très nombreux sites pour sa stabilité, par contre ses fonctionalités sont limitées. Il ne supporte ni les procédures stockées ni les triggers, le langage de manipulation de données est assez pauvre. Malgré ses défauts, MySql représente une solution pratique pour des applications non stratégiques ou peu sensibles.

L'administration d'une base

MySql fournit un environnement d'administration PhpMyAdmin, pour l'utiliser après avoir lancé le serveur Apache, sélectionner l'item "administration" (click droit sur l'icone EasyPhp du bureau); sélectionner enfin "PhpMyAdmin"

Créer la base.

fig 1 menu d'administration

Création des utilisateurs.

Par défaut l'utilisateur "root" (sans mot de passe) administre MySql, pour créer des utilisateurs ayant des droits sur la base créée il faut revenir au menu d'administration (fig 1) et sélectionner "Utilisateurs et privilèges".

fig 2 création d'un utilisateur

Ici l'utilisateur à les droits sur les tables de la base dbPizza mais pas de privilège d'administration.

Création d'une table dans la base dbPizza.

MySql propose différents type de données :

a) De type entier.

b) De type réel.

c) De type texte.

Application : la table Pizza.

A partir de l'écran d'administration (fig 1), sélectionner la base de données dbPizza :

fig 3 sélection de la base

L'écran suivant apparait :

fig 4 exécution de script

Il est possible de faire exécuter un quelconque script sql dans la fenêtre de la figure 4, de charger un fichier de commandes sql ou de créer de manière interactive une table, c'est ce que nous allons faire dans un premier temps :

Indiquer que vous aller créer la table Pizza ayant 4 champs.

Vous informez l'écran suivant :

fig 5 création d'une table

Sauvegarder la structure.

Le cas Livraison de Pizzas (LdP)

Le modèle entité/association (MEA) suivant présente la modélisation des données du cas LdP :

fig 6 MEA du LdP

1) Chargement de la base.

A partir de l'écran de gestion de la base de donnée dbPizza, supprimer la table Pizza et exécuter le script dbPizza.sql :

Télécharger le script

Exécuter le script téléchargé.

 

Taper la requète et l'exécuter afin de vérifier l'intégrité des données de la table Pizza.

2) Php et MySql.

Toutes les fonctions d'accès à MySql sont préfixées en PHP par mysql_.

a) Ouverture et fermeture d'une connexion.

$connect = mysql_connect("localhost","Grand","patrice");
if($connect){
  echo ("Connexion réussie");
  mysql_close($connect);
  }
   else
  echo("Echec à la connexion");

mysql_connect retourne un identifiant de connexion (ou 0 si la connexion a échoué). Cet identifiant sera utilisé ensuite pour les requêtes sur la base. A noter qu'à la fin de l'exécution du script la connexion est automatiquement fermée, donc ici l'instruction mysql_close est inutile. L'instruction mysql_pconnect par contre mainteint une connexion permanente pour le même utilisateur.

b) Création d'un jeu d'enregistrements.

L'instruction mysql_db_query permet d'exécuter une requête donnée pour une connexion et une base donnée :

$sql = "select * from pizza ";
$req = mysql_db_query("dbpizza", $sql, $connect);

$req devient l'identifiant de la requête.

<?
$connect = mysql_connect("localhost","Grand","patrice");
if($connect){
  echo ("Connexion réussie");
  $sql = "select * from pizza ";
  $result = mysql_db_query("dbpizza",$sql,$connect);
  if($result)
    echo ("requête correcte");
    else
    echo("erreur dans la requête");
  mysql_close($connect);
}
else
echo("Echec à la connexion");
?>

L'instruction mysql_db_query implante en mémoire un jeu d'enregistrements, construit à partir du contenu de la requête; les instructions suivantes vont permettre de parcourir ce jeu d'enregistrements.

c) Parcours du jeu d'enregistrements

Plusieurs instructions permettent de parcourir le jeu d'enregistrement :

$ligne est la ligne d'enregistrement retournée, dans le cas où il n'y a plus d'enregistrement courant, l'instruction mysql_fetch_row retourne 0. $ligne est un tableau dont l'indice commence à 0 et dont chaque valeur correspond à chaque champ, ici $row[1] correspond au deuxième champ (le libellé de la pizza).

Les deux lignes suivantes produisent le même effet que plus haut, l'indice du tableau est remplacé par le nom du champ dans la requête.

$ligne = mysql_fetch_array($result);
echo ($ligne["libPizza"]);

Remarque : mysql_fetch_array autorise de désigner aussi les champ par leur rang comme mysql_fetch_row

Ceci se fera dans une boucle de parcours du jeu d'enregistrements :

(si l'on veut afficher le libellé et le nombre de personnes des pizzas)

$ligne = mysql_fetch_array($result);
while($ligne){
  echo ("<br> ".$ligne["libPizza"]." pour ".$ligne["nbPersonnes"]." personnes");
  $ligne = mysql_fetch_array($result);
  }

Notez le premier ordre de lecture avant la boucle.

Mais on trouvera, dans la littérature ou les sites traitant de PHP, une version nettement plus concise :

  while($ligne = mysql_fetch_array($result))
    echo ("<br> ".$ligne["libPizza"]." pour ".$ligne["nbPersonnes"]." personnes");

Notez bien l'instruction $ligne = mysql_fetch_array($result) qui effectue d'abord une affectation et ensuite est évaluée dans le while.

Autres fonctions utiles

int msql_affected_rows(int identifiantDeRequête) : retourne le nombre de lignes affectées par une requête insert, update ou delete.

int msql_num_rows(int identifiantDeRequête) : retourne le nombre de lignes sélectionnées dans un select.

 

Mise en oeuvre

Créer le formulaire commande.php :

Vous pourrez du formulaire qui présente les objets HTML.

Question 1

Vous testerez votre formulaire en postant dans une autre page les pizza et nombres associés dans une autre page de manière à afficher :

Vous avez choisi :

CLA4 nb: 3

REI2 nb: 2

Question 2

Enregistrez la commande en vérifiant le numéro du client