Informatique


Ajouter un enregistrement (1-1)(1-n)

Le cas pratique

Construire la DB "entreprise", celle-ci décrit les clients d'une entreprise par les attributs suivants:

  • le nom
  • le prénom (prévoir une valeur par défaut pour les sociétés)
  • l'adresse
  • le code postal
  • la catégorie du client (société, privé, parastatal, publique, asbl)
  • Actif ou non actif
On précise qu'un client appartient à une et une seule catégorie
  • Réaliser les MCD, MLD, MPD
  • Créer les tables "client" et "categorie"
  • Création et exécution de la requête sql


Les MCD, MLD et MPD

La relation entre les 2 entités du MCD est de type (1-1)(1-n), dans ce cas, pour le MLD et le MPD, la relation disparaît et la clé du côté (1-n) est dupliquée du côté (1-1).

Le MCD de l'application

Le MLD de l'application

Pour passer du MCD au MCD l'association disparaît, elle est matérialisée par la duplication de la clé côté (1-n) du côté (1-1).

client: id_cli, nom_cli, preno_cli, adres_cli, codep_cli, flag_cli, id_cat
categorie: id_cat, nom_cat, pourc_cat

Dans la table client le champ id_cat est appelé "clé étrangère", celle-ci est de même type et de même taille que la clé id_cat de la table categorie.

Le MPD de l'application

Voici l'aperçu de la structure des 2 tables.

Structure de la table client

id_cli nom_cli preno_cli adres_cli codep_cli flag_cli id_cat
TINY,unsigned,
primary,AI
VARCHAR(60) VARCHAR(30) VARCHAR(250) CHAR(4) BOOLEAN TINY

Structure de la table categorie

id_cat nom_cat pourc_cat
TINY,unsigned,primary,AI VARCHAR(20) TINY


Création et exécution de la requête sql

Dans quel ordre allons-nous procéder?

2 fichiers sont nécessaires, un pour la table categorie et un pour la table client.
On va d'abord s'occuper de remplir la table categorie ensuite on remplira la table client. Dans le formulaire de la table client on placera une liste déroulante permettant de choisir la catégorie du client, cette liste déroulante sera remplie dynamiquement à partir de la table categorie.

Remplir la table categorie
Nous allons éviter le test de première ouverture pour ne pas encombrer le code.
  • on récupère le tableau $_POST
  • connexion à MySQL et à la base de données entreprise
  • on établit la requête d'insertion avec la commande INSERT, cette requête est une simple chaîne de caractères affectée à une variable
  • on applique la requête avec mysqli_query, le résultat n'est pas affecté à une variable car on attend pas de réponse en retour
Exemple
<h2>Enregistrer une catégorie</h2>

<form action="incat.php" method="post">
	Catégorie  : <input type="text" name="nom"><br>
	Remise : <input type="text" name="pourc"><br>
	<input type="submit" value="Enregistrer">
</form>
<?php 
 $nom=$_POST['nom'];
 $pourc=$_POST['pourc'];
 include("connexion.php");
 $req="insert into categorie(id_cat,nom_cat,pourc_cat)values(NULL,'$nom','$pourc')";
 $reqex=$con->exec($req);
 $con=NULL;
?>
Remplir la table client
Nous allons éviter le test de première ouverture pour ne pas encombrer le code.
  • on utilise l'attribut value pour passer les valeurs par défaut
  • on utilise la table categorie pour remplir dynamiquement une liste déroulante permettant de choisir la catégorie du client
  • on récupère le tableau $_POST
  • connexion à MySQL et à la base de données entreprise
  • on établit la requête d'insertion avec la commande INSERT, cette requête est une simple chaîne de caractères affectée à une variable
  • on applique la requête avec mysqli_query, le résultat n'est pas affecté à une variable car on attend pas de réponse en retour
Exemple
<h2>Enregistrer un client</h2>

<form action="incli.php" method="post">
Nom  : <input type="text" name="nom"><br>
Prénom : <input type="text" name="preno" value="société"><br>
Adresse : <input type="text" name="adres"><br>
Code postal : <input type="text" name="codep"><br>
Actif: <input type="radio" name="flag" value="1"><br>
Non-Actif: <input type="radio" name="flag" value="0"><br>
<?php
 include("connexion.php");
 $req="select * from categorie";
 $reqex=$con->query($req);
?>
<select name="categ">	
<?php 
 while($ligne=$reqex->fetch(PDO::FETCH_ASSOC))	{
  echo("<option value=$ligne[id_cat]>$ligne[nom_cat]</option>");
 }
?>
</select>	
	<input type="submit" value="Enregistrer">
</form>

<?php 
 $nom=$_POST['nom'];
 $preno=$_POST['preno'];
 $codep=$_POST['codep'];
 $adres=$_POST['adres'];
 $flag=$_POST['flag'];
 $categ=$_POST['categ'];
 $req="insert into client(id_cli,nom_cli,preno_cli,adres_cli,codep_cli,flag_cli,id_cat)values(NULL,'$nom','$preno','$adres','$codep','$flag','$categ')";
 $reqex=$con->exec($req);
 $con=NULL;
?>