Supprimer des données de votre base

Après avoir vu l'affichage des données provenant d'une base de données, l'insertion et la modification de ces mêmes données, voyons maintenant la dernière opération fondamentale concernant ces base de données : la suppression de tuples.

Reprenons alors nos deux tables liste_proprietaire et liste_disque que nous avons utilise pendant tous les tutoriaux concernant les bases de données.

Je vous rappelle que l'on avait alors :

La table liste_proprietaire :

N. du propriétairePropriétaireN. tél
1LA GLOBULE06-48-85-20-54
2Jeremy06-85-98-78-12
3Benoît06-55-99-10-00
4Tibo06-98-42-01-36


La table liste_disque :

N. du propriétaireAuteurTitre
1CassiusAu rêve
1Daft PunkDiscovery
2CassiusAu rêve
2TélépopmusikGenetic world
3ClamaranRelease yourself
2Bob SinclarParadise
4The supermen loversThe player


Voyons alors, en SQL, comment supprimer un tuple de la table liste_proprietaire.

Supposons que l'on désire supprimer Tibo de notre base de données. On écrira alors :

DELETE from liste_proprietaire WHERE nom="Tibo";


En effet, on efface un tuple (ou plusieurs, tout dépend de la clause WHERE) de quelle table ?
De la table liste_proprietaire.
Quel(s) tuple(s) efface-t-on ?
On efface tous les tuples de la table liste_proprietaire ou l'attribut nom prend la valeur Tibo (dans notre cas, un seul tuple porte la valeur Tibo pour l'attribut nom).

Notez bien que la clause WHERE peut très bien contenir plusieurs conditions, elles seront alors séparés par des opérateurs booléens (AND correspondant à un ET logique ou OR correspondant à un OU logique).

Cependant, je vous rappelle que des requêtes SQL peuvent être beaucoup plus complexes, et dans ce cas, je vous renvoie à la documentation MySQL, ce qui à notre niveau (débutant) n'est pas vraiment intéressant (cela ne sert à rien de vous embrouiller les idées dès le départ).

Attention !!!

Lorsque l'on effectue une suppression de tuples, il faut toujours faire attention à effacer non seulement les tuples de la table dont on veut supprimer le(s) élément(s) mais éventuellement les autres tuples d'une autre table (si les deux tables sont jointes par le biais d'un attribut).

En effet, dans notre exemple, nous venons de supprimer de la table liste_proprietaire le tuple dont l'attribut nom valait Tibo. Cependant, on remarque que la table liste_disque comporte des éléments qui étaient liés à Tibo. Or, vu que ces elements ne nous servent plus à rien maintenant (car on a supprimer Tibo de la liste), il faut également penser à les supprimer (afin d'avoir une base de données homogène).


Voyons maintenant comment effectuer ces suppressions par le biais d'une page WEB écrite en PHP.
Prenons par exemple le cas d'une page PHP permettant la suppression de Tibo de la base de données ainsi que de toutes les informations le concernant (c'est-à-dire les disques lui appartenant).

On aura alors :

exemple1.php
<?php
// on se connecte à notre base
$base = mysql_connect ('serveur', 'login', 'pass');
mysql_select_db ('ma_base', $base) ;
?>
<html>
<head>
<title>Suppression de Tibo de la base</title>
</head>
<body>
<?php
// lancement de la requête pour effacer Tibo
$sql ='DELETE from liste_proprietaire WHERE nom="Tibo"';

// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

// lancement de la requête pour effacer les disques de Tibo (je vous rappelle que Tibo à le numéro 4)
$sql ='DELETE from liste_disque WHERE numero="4"';

// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

// on ferme la connexion à la base
mysql_close();
?>
Tibo et tous ces disques ont étés supprimés de la base de données.
</body>
</html>




Que faire en plus ?

Comme dans les tutoriaux précédents, afin de rendre vos pages beaucoup plus dynamiques, il serait intéressant de faire une page WEB contenant un formulaire possédant un menu déroulant permettant de choisir le nom du membre à effacer.
On suppose alors que ce menu déroulant à le champ NAME qui prend la valeur proprio, et que le formulaire a son champ ACTION qui prend la valeur traitement.php.
Ceci implique que dans la page traitement.php, on aura une variable $proprio qui contient le nom du propriétaire à supprimer.

On aura alors le code suivant (pour la page traitement.php placée dans le même répertoire que la page WEB contenant le formulaire) :

exemple2.php
<?php
// on se connecte à notre base
$base = mysql_connect ('serveur', 'login', 'pass');
mysql_select_db ('ma_base', $base) ;
?>
<html>
<head>
<title>Suppression d'un membre de la base</title>
</head>
<body>
<?php
// on teste si la variable du formulaire est bien déclarée
if (isset($_POST['proprio'])) {

// on recherche le numero du membre à supprimer
$sql = 'SELECT numero FROM liste_proprietaire WHERE nom = "'.$_POST[proprio].'"';

// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

// on recupere le resultat sous forme d'un tableau
$data = mysql_fetch_array($req);

// on recupere la valeur qui nous intersse
$numero_du_proprio = $data['numero'];

// on libère l'espace mémoire alloué pour cette interrogation de la base
mysql_free_result ($req);

// lancement de la requête pour effacer notre membre
$sql ='DELETE from liste_proprietaire WHERE nom="'.$_POST['proprio'].'"';

// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

// lancement de la requête pour effacer les disques de notre membre
$sql ='DELETE from liste_disque WHERE numero="'.$numero_proprio.'"';

// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

// on ferme la connexion à la base
mysql_close();

// un petit message afin de voir ce qui s'est passé
echo 'Nous venons de supprimer '.$_POST['proprio'].' de la base ainsi que tous ces disques';
}
else {
echo 'La variable de notre formulaire n\'est pas initialisée.';
}
?>
</body>
</html>


Et voila, maintenant, vous devez maîtriser tout ce qui concerne les bases de données et les pages dynamiques en PHP.
LoadingChargement en cours