Page 1 sur 2

Supprimer enregistrement dans la BDD_

Posté : 20 janv. 2010, 15:37
par Cindy1989s
Bonjour,

Je voudrais supprimer un enregistrement précis dans ma BDD (PHPMyAdmin) à savoir le client sur lequel on clique sur mon site. J'ai déjà la liste de tous mes clients qui s'affiche et si on clique sur l'un d'entre eux les informations lui correspondant, qui sont dans la BDD, s'affichent.
Mais je ne sais pas du tout comment m'y prendre pour supprimer le client "cliqué"... A part commencer par une requête SQL "delete" ... :roll:

mysql_query('DELETE FROM formulaire...

Auriez-vous une idée?

Re: Supprimer enregistrement dans la BDD_

Posté : 20 janv. 2010, 15:49
par AB
Le principe est de trouver les éléments - ou le plus souvent : l'identifiant unique ID - qui vont faire que tu ne peux pas te tromper de ligne pour l'effacement.
Si tu n'as pas saisi, donnes nous le schéma de ta table.

Sinon c'est très bien expliqué ici

Re: Supprimer enregistrement dans la BDD_

Posté : 20 janv. 2010, 15:58
par Cindy1989s
Hm hm je comprends bien mais je sais pas comment inscrire dans ma requête qu'il faut supprimer le client sur lequel on vient de cliquer :oops:

Et ma table "formulaire" s'organise comme ça :

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `formulaire` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `CIVILITE` varchar(5) NOT NULL, `NOM` varchar(50) NOT NULL, `PRENOM` varchar(50) NOT NULL, `EMAIL` varchar(50) NOT NULL, `TELEPHONE` varchar(30) NOT NULL, `ADRESSE` varchar(200) NOT NULL, `CODE_POSTAL` int(5) NOT NULL, `VILLE` varchar(50) NOT NULL PRIMARY KEY (`ID`) )

Re: Supprimer enregistrement dans la BDD_

Posté : 20 janv. 2010, 16:29
par AB
Et bien quand tu liste tes clients tu indiques dans un champ caché son ID qu'il te suffit de récupérer ensuite dans la variable correspondante du tableau post

Typiquement dans ton code html qui liste tes clients
<form action = "#" method = "post">
<?php while ($row_client = mysql_fetch_assoc($requête))
{?>
<p>
Nom, prénom : <?php echo $row_client['NOM'].' '.$row_client['PRENOM']?> <input name="supprimer" type="submit" value = "Suppr" />
<input type="hidden" name="id_client" value="<?php echo $row_client['ID']?>" />
</p>
<?php } ?>
</form>
et dans la partie php, ta requête pour la suppression
<?php
if (isset($_POST['supprimer']))
{
$id_a_supprimer =  isset($_POST['id_client']) && is_numeric($_POST['id_client'])? intval($_POST['id_client']) : null;
$query = "DELETE FROM formulaire WHERE  ID = ".$id_a_supprimer."";	
//etc.
}
Inutile de préciser que cette page doit être protégée... pour que n'importe qui trouvant son adresse ne puisse pas l'utiliser.

EDIT J'avais oublié le bouton du formulaire ! Le code a été modifié en ce sens.

Re: Supprimer enregistrement dans la BDD_

Posté : 21 janv. 2010, 10:20
par Cindy1989s
<!-- TRAITEMENT SUPPRESSION D'UN CLIENT --> 

<?php
if (isset($_POST['supprimer']))
{
$id_a_supprimer =  isset($_POST['id']) && is_numeric($_POST['id'])? intval($_POST['id']) : null;
$query = "DELETE FROM formulaire WHERE ID = ".$id_a_supprimer."";      
}
?>
Erreurs :
- Notice: Undefined variable: requête in C:\wamp\www\TOURNANT\template_blog_orange\pages\Lecture_BDD\supprimer_client.php on line 58
- Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\TOURNANT\template_blog_orange\pages\Lecture_BDD\supprimer_client.php on line 58


:oops:

Re: Supprimer enregistrement dans la BDD_

Posté : 21 janv. 2010, 10:50
par Cindy1989s
En mettant 'reponse' à la place de 'requête' ça ne met plus d'erreurs mais ça ne supprime pas pour autant :(

Code affichant la liste des clients :
<!-- AFFICHAGE DE L'ENSEMBLE DES CLIENTS ENREGISTRES --> 
<?php
mysql_connect("localhost", "root"); 
mysql_select_db("tournant"); 

// Requête qui récupère toutes les données de la table
$reponse = mysql_query("SELECT nom, prenom FROM formulaire") or die(mysql_error());

// Organisation des données
while ($donnees = mysql_fetch_array($reponse) )
{

$nom = $donnees['nom'];
$prenom = $donnees['prenom'];
echo '<br /><li><a href="http://localhost/TOURNANT/template_blog_orange/pages/lecture_bdd/lecture_infos.php?nom='.$nom.'&prenom='.$prenom.'">'; ?>
<?php echo $donnees['nom'];?> <?php echo $donnees['prenom'];?></a> <br />

<?php
}
mysql_close();?>


<!-- SUPPRESSION D'UN CLIENT --> 
							
<form action = "traitement_suppression_client" method = "post">
<?php 
while ($row_client = mysql_fetch_assoc($reponse))
{
?>
<p>
Nom, prénom : <?php echo $row_client['nom'].' '.$row_client['prenom']?> 
<input name="supprimer" type="submit" value = "Supprimer" />
<input type="hidden" name="ID" value="<?php echo $row_client['ID']?>" />
</p>
<?php 
}
?>
 </form>
Page PHP
<!-- TRAITEMENT SUPPRESSION D'UN CLIENT --> 

<?php
if (isset($_POST['supprimer']))
{
id_a_supprimer =  isset($_POST['ID']) && is_numeric($_POST['ID'])? intval($_POST['ID']) : null;
$mysql_query = "DELETE FROM formulaire WHERE ID = ".$id_a_supprimer."";      
}
?>

Re: Supprimer enregistrement dans la BDD_

Posté : 21 janv. 2010, 12:31
par AB
<?php
if (isset($_POST['supprimer']))
{
id_a_supprimer =  isset($_POST['ID']) && is_numeric($_POST['ID'])? intval($_POST['ID']) : null;
$mysql_query = "DELETE FROM formulaire WHERE ID = ".$id_a_supprimer."";    
//etc.  
}
?>
Dans mon exemple il y avait 'etc.' qu'il fallait compléter et non pas simplement effacer.
La requête est écrite, il suffit maintenant de l'exécuter
<?php
if (isset($_POST['supprimer']))
{
id_a_supprimer =  isset($_POST['ID']) && is_numeric($_POST['ID'])? intval($_POST['ID']) : null;
$query = "DELETE FROM formulaire WHERE ID = ".$id_a_supprimer."";      
$delete = mysql_query($query) or die(mysql_error());
}
?>

Re: Supprimer enregistrement dans la BDD_

Posté : 21 janv. 2010, 12:46
par Cindy1989s
Merci :D mais même en mettant ça :
<?php
if (isset($_POST['supprimer']))
{
$id_a_supprimer =  isset($_POST['ID']) && is_numeric($_POST['ID'])? intval($_POST['ID']) : null;
$query = "DELETE FROM formulaire WHERE ID = ".$id_a_supprimer."";  
$delete = mysql_query($query) or die(mysql_error());
}
echo 'Suppression effectuée'
?>
Il me dit "suppression effectuée" quand je clique sur un client mais pourtant il reste dans la base :roll:

Re: Supprimer enregistrement dans la BDD_

Posté : 21 janv. 2010, 13:03
par AB
Bah oui si tu fais afficher "Suppression effectuée" sans condition, tu afficheras toujours cette mention.
DELETE efface les enregistrements qui satisfont la condition donnée par clause_where, et retourne le nombre d'enregistrements effacés...
Donc la bonne syntaxe est
<?php
if (isset($_POST['supprimer']))
{
$id_a_supprimer =  isset($_POST['ID']) && is_numeric($_POST['ID'])? intval($_POST['ID']) : null;
$query = "DELETE FROM formulaire WHERE ID = ".$id_a_supprimer."";  
$delete = mysql_query($query) or die(mysql_error());
}

if ($delete == 1) echo '1 enregistrement à été supprimé';
?>
Mais cela ne résoudra pas pour autant ton problème qui est ailleurs

Question : à quoi sert ce code ?
// Organisation des données
while ($donnees = mysql_fetch_array($reponse) )
{

$nom = $donnees['nom'];
$prenom = $donnees['prenom'];
echo '<br /><li><a href="http://localhost/TOURNANT/template_blog_orange/pages/lecture_bdd/lecture_infos.php?nom='.$nom.'&prenom='.$prenom.'">'; ?>
<?php echo $donnees['nom'];?> <?php echo $donnees['prenom'];?></a> <br />

<?php
}
mysql_close();

Re: Supprimer enregistrement dans la BDD_

Posté : 21 janv. 2010, 15:10
par Cindy1989s
En résumé, cette page me sert à afficher les clients. J'ai repris mon ancien code qui permettait d'afficher la liste des clients et j'ai ajouté à la suite ce que tu m'as donné.

Je te mets ici cette page là toute entière :
<!-- AFFICHAGE DE L'ENSEMBLE DES CLIENTS ENREGISTRES --> 

<?php
mysql_connect("localhost", "root"); 
mysql_select_db("tournant"); 

// Requête qui récupère toutes les données de la table
$reponse = mysql_query("SELECT nom, prenom FROM formulaire") or die(mysql_error());

// Organisation des données
while ($donnees = mysql_fetch_array($reponse) )
{

$nom = $donnees['nom'];
$prenom = $donnees['prenom'];
echo '<br /><li><a href="http://localhost/TOURNANT/template_blog_orange/pages/lecture_bdd/traitement_suppression_client.php?nom='.$nom.'&prenom='.$prenom.'">'; ?>
<?php echo $donnees['nom'];?> <?php echo $donnees['prenom'];?></a> <br />


<!-- SUPPRESSION D'UN CLIENT --> 
							
<form action = "traitement_suppression_client" method = "post">
<?php 
while ($row_client = mysql_fetch_assoc($reponse))
{
?>
<p>
Nom, prénom : <?php echo $row_client['nom'].' '.$row_client['prenom']?> 
<input name="supprimer" type="submit" value = "Supprimer" />
<input type="hidden" name="ID" value="<?php echo $row_client['ID']?>" />
</p>
<?php 
}
?>
</form>
								
<?php
}
mysql_close();
?>


Re: Supprimer enregistrement dans la BDD_

Posté : 21 janv. 2010, 15:13
par Cindy1989s
Et la page 'traitement_suppression_client' est celle ci :
<?php
if (isset($_POST['supprimer']))
{
$id_a_supprimer =  isset($_POST['ID']) && is_numeric($_POST['ID'])? intval($_POST['ID']) : null;
$query = "DELETE FROM formulaire WHERE ID = ".$id_a_supprimer."";  
$delete = mysql_query($query) or die(mysql_error());
}

if ($delete == 1) echo '1 enregistrement a été supprimé';
?>

Re: Supprimer enregistrement dans la BDD_

Posté : 21 janv. 2010, 17:00
par AB
Un exemple à peu près bien structuré dans une seule page :
<?php 
mysql_connect("localhost", "root");
mysql_select_db("tournant"); 


// Requête qui efface un enregistrement suivant son ID
if (isset($_POST['supprimer']))
{
	$id_a_supprimer =  isset($_POST['ID']) && is_numeric($_POST['ID'])? intval($_POST['ID']) : null;
	$query = "DELETE FROM formulaire WHERE ID = ".$id_a_supprimer."";  
	
	$delete = mysql_query($query) or die(mysql_error());
}



// Requête qui récupère toutes les données de la table
$query = "SELECT ID, NOM, PRENOM FROM formulaire";
$liste = mysql_query($query) or die(mysql_error());

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Supression client</title>
</head>

<body>

<div>
<?php if (isset($delete) && $delete == 1) echo '1 enregistrement à été supprimé';?>
</div>

<div>
<form action = "#" method = "post">
<?php
while ($row_client = mysql_fetch_assoc($liste))
{ ?>
<p>
Nom, prénom : <?php echo $row_client['NOM'].' '.$row_client['PRENOM'].' ';?>
<input name = "supprimer" type = "submit" value = "Supprimer" />
<input type = "hidden" name = "ID" value = "<?php echo $row_client['ID']?>" />
</p>
<?php } ?>
 </form>
</div>

</body>
</html>
J'ai pas testé mais c'est le principe

Re: Supprimer enregistrement dans la BDD_

Posté : 22 janv. 2010, 10:29
par Cindy1989s
Ca c'est bien ce que j'ai sur ma deuxième page oui :)

Traitement_suppression_client :
<!-- TRAITEMENT SUPPRESSION D'UN CLIENT --> 

<?php
if (isset($_POST['supprimer']))
{
$id_a_supprimer =  isset($_POST['ID']) && is_numeric($_POST['ID'])? intval($_POST['ID']) : null;
$query = "DELETE FROM formulaire WHERE ID = ".$id_a_supprimer."";  
$delete = mysql_query($query) or die(mysql_error());
}

if ($delete == 1) echo 'L\'enregistrement a été supprimé';
?>
Et sur ma première page, je n'ai gardé que ça ( il me semble que cette fois ci ça ne liste qu'une seule fois ):

Suppression_client :
<?php
mysql_connect("localhost", "root"); 
mysql_select_db("tournant"); 

// Requête qui récupère toutes les données de la table
$reponse = mysql_query("SELECT nom, prenom FROM formulaire") or die(mysql_error());
?>
							
<!-- Organisation des données -->
<form action = "traitement_suppression_client" method = "post">
<?php
while ($donnees = mysql_fetch_array($reponse) )
{

$nom = $donnees['nom'];
$prenom = $donnees['prenom'];
echo '<br /><li><a href="http://localhost/TOURNANT/template_blog_orange/pages/lecture_bdd/traitement_suppression_client.php?nom='.$nom.'&prenom='.$prenom.'">'; ?>
							
<?php echo $donnees['nom'];?> <?php echo $donnees['prenom'];?></a> <br />
							
							
<input name="supprimer" type="submit" value = "Supprimer" />
<input type="hidden" name="ID" value="<?php echo $row_client['ID']?>" />
							
<?php
}
mysql_close();?>
Maintenant, j'ai une liste de clients et un bouton 'supprimer'. Si je clique sur le bouton, j'arrive sur 'page web introuvable' et si je clique sur un client 'Undefined variable: delete in C:\wamp\www\TOURNANT\template_blog_orange\pages\Lecture_BDD\traitement_suppression_client.php on line 41'

Re: Supprimer enregistrement dans la BDD_

Posté : 22 janv. 2010, 10:38
par Cindy1989s
EDIT : Si je clique sur le bouton 'supprimer ' j'arrive bien sur ma deuxième page 'traitement_suppression_client'. Mais rien n'est supprimé pour autant.
Je crois que le problème vient du fait que ce n'est pas relié. Si je clique sur le bouton 'supprimer' il n'y a pas de client sélectionné et si je clique sur un client il ne sait pas qu'il faut le supprimer.
Peut être que si une fois qu'on avait cliqué sur un client, le bouton 'supprimer' apparaissait ça serait mieux, non ?

Re: Supprimer enregistrement dans la BDD_

Posté : 22 janv. 2010, 11:34
par AB
Un exemple à peu près bien structuré dans une seule page...
ça veut dire que tout est inclus dans cette page.
Il te suffit de copier-coller le code que je t'ai proposé dans une nouvelle page (vierge) et de la tester séparément sans rien modifier au départ.

Si ça te retourne des erreurs, on avisera.