Bouton supprimer !

Eléphanteau du PHP | 32 Messages

10 juin 2008, 13:04

Bonjour tout le monde !

J'ai un tableau avec un bouton supprimé qui au début ne devait supprimé que le ligne du tableau ! cela marcher très bien !
Maintenant que j'ai avancer dans mon projet, ce bouton supprimé doit toujours supprimé la ligne du tableau mais aussi supprimé ce qui réfère à la ligne.
A la base le bouton ne supprimé que la ligne dans la table "clients_prospects"
Maintenant "clients_prospects" est reliés par sa clef primaire a "clients" et a "devis" ET "clients" relier à "projet" pas num_client qui est la clef primaire de "clients" !

le bouton supprimé ce présente ainsi :
                echo '<td bgcolor="#FFFFFF"><a href="clients_et_prospects.php?action=del&id='.$res[0].'"><img src="supprimer.jpg" border=0 /></a></td>'; 


Ce qui réfère au "action" c'est :
 if(isset($_GET['action'])) 
{
    mysql_query("DELETE FROM clients_prospects WHERE id='{$_GET['id']}'");
    mysql_query("DELETE FROM clients WHERE id='{$_GET['id']}'");
    mysql_query("DELETE FROM devis WHERE id='{$GET['id']}'");
    }



MON PROBLÈME !
il supprime les entrées de clients_prospects et de clients ! mais pas celle e devis
et ensuite je ne sais pas comment supprimer dans la table projets car il n'y a pas "ID" dans cette table !


Je me souviens qu'au BTS on met appris a relier les tables dans phpmyadmin, ce qui permettais de supprimer une ligne et que toute les entrées relier a cet ligne soi supprimé mais la mon prédécesseur n'a pas relier les tables sur phpmyadmin, elle a juste défini les clés primaires !

d0m
Mammouth du PHP | 1141 Messages

10 juin 2008, 13:14

salut,

peux tu donner la structure de tes différentes tables stp (nom des champs, type,...)
sous la forme d'un create table?

Eléphanteau du PHP | 32 Messages

10 juin 2008, 13:18

J'ai mis toute les tables pour être plus clair !

Code : Tout sélectionner

# phpMyAdmin SQL Dump # version 2.5.3 # http://www.phpmyadmin.net # # Serveur: localhost # Généré le : Mardi 10 Juin 2008 à 13:14 # Version du serveur: 4.0.15 # Version de PHP: 4.3.3 # # Base de données: `gestion_clients` # # -------------------------------------------------------- # # Structure de la table `clients` # CREATE TABLE `clients` ( `num_client` int(6) NOT NULL default '0', `id` int(11) NOT NULL default '0', PRIMARY KEY (`num_client`) ) TYPE=MyISAM COMMENT='Liste de tous les clients'; # # Contenu de la table `clients` # # -------------------------------------------------------- # # Structure de la table `clients_prospects` # CREATE TABLE `clients_prospects` ( `id` int(11) NOT NULL auto_increment, `nom_societe` varchar(40) default NULL, `activite_societe` varchar(40) default NULL, `nom_resp` varchar(40) NOT NULL default '', `prenom_resp` varchar(40) default NULL, `etat` enum('prospect','client') NOT NULL default 'prospect', `adresse_societe` varchar(120) default NULL, `code_postal_societe` int(5) default NULL, `ville_societe` varchar(30) NOT NULL default '', `tel_fixe` int(10) unsigned zerofill default NULL, `tel_port` int(10) unsigned zerofill default NULL, `tel_fax` int(10) default NULL, `email` varchar(40) NOT NULL default '', `num_siret` int(14) default NULL, `code_ape_naf` varchar(5) default NULL, `ftp` varchar(20) default NULL, `id_ftp` varchar(20) default NULL, `mdp_ftp` varchar(20) default NULL, `domaine_ftp` varchar(120) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM COMMENT='Liste des clients et prospects' AUTO_INCREMENT=6 ; # # Contenu de la table `clients_prospects` # # -------------------------------------------------------- # # Structure de la table `contrats` # CREATE TABLE `contrats` ( `num_contrat` int(11) NOT NULL default '0', `num_projet` int(11) NOT NULL default '0', `date_contrat` int(15) NOT NULL default '0', `type_contrat` enum('site web','référencement') NOT NULL default 'site web', `montant_total_ttc` float(7,2) NOT NULL default '0.00', `pdf_contrat` varchar(120) NOT NULL default '', `commentaires` text, PRIMARY KEY (`num_contrat`) ) TYPE=MyISAM COMMENT='Liste des contrats'; # # Contenu de la table `contrats` # # -------------------------------------------------------- # # Structure de la table `depenses` # CREATE TABLE `depenses` ( `date` int(15) NOT NULL default '0', `objet` varchar(50) NOT NULL default '', `montant_ttc` float(7,2) NOT NULL default '0.00', PRIMARY KEY (`date`,`objet`) ) TYPE=MyISAM COMMENT='Liste des dépenses (loyer, charge, ...)'; # # Contenu de la table `depenses` # # -------------------------------------------------------- # # Structure de la table `devis` # CREATE TABLE `devis` ( `num_devis` int(11) NOT NULL default '0', `id` int(11) NOT NULL default '0', `etat_devis` enum('non accepté','accepté','traité') NOT NULL default 'non accepté', `designation_devis` text NOT NULL, `date_devis` int(15) NOT NULL default '0', `montant_devis_ht` float(7,2) NOT NULL default '0.00', `pdf_devis` text NOT NULL, `commentaires` text, PRIMARY KEY (`num_devis`) ) TYPE=MyISAM COMMENT='Liste des devis'; # # Contenu de la table `devis` # # -------------------------------------------------------- # # Structure de la table `domaines_emails` # CREATE TABLE `domaines_emails` ( `nom_domaine` varchar(120) NOT NULL default '', `email_domaine` varchar(30) NOT NULL default '', `id_domaine` varchar(20) NOT NULL default '', `mdp_domaine` varchar(20) NOT NULL default '0', PRIMARY KEY (`nom_domaine`,`email_domaine`) ) TYPE=MyISAM COMMENT='email, id, login de connexion par nom de domaine'; # # Contenu de la table `domaines_emails` # # -------------------------------------------------------- # # Structure de la table `factures` # CREATE TABLE `factures` ( `num_facture` int(15) NOT NULL default '0', `num_projet` int(11) NOT NULL default '0', `etat_facture` enum('en attente de réglement','en retard','réglée') NOT NULL default 'en attente de réglement', `designation_facture` text NOT NULL, `date_facture` int(15) NOT NULL default '0', `montant_facture_ttc` float(7,2) NOT NULL default '0.00', `tva` enum('oui','non') NOT NULL default 'oui', `date_encaissement` int(15) NOT NULL default '0', `montant_encaissement_ttc` float(7,2) default NULL, `commentaires` text, PRIMARY KEY (`num_facture`) ) TYPE=MyISAM COMMENT='Factures clients'; # # Contenu de la table `factures` # # -------------------------------------------------------- # # Structure de la table `frais_deplacement` # CREATE TABLE `frais_deplacement` ( `num_client` int(6) NOT NULL default '0', `date_deplacement` int(15) NOT NULL default '0', `nom_pers` varchar(30) NOT NULL default '', `distance_km` float(5,2) NOT NULL default '0.00', `indemnites_km` float NOT NULL default '0', `montant_frais` float(5,2) NOT NULL default '0.00', PRIMARY KEY (`num_client`,`date_deplacement`) ) TYPE=MyISAM COMMENT='Liste des frais de déplacement chez un client'; # # Contenu de la table `frais_deplacement` # # -------------------------------------------------------- # # Structure de la table `ordres_virement` # CREATE TABLE `ordres_virement` ( `num_ordre_virement` int(11) NOT NULL auto_increment, `num_projet` int(11) NOT NULL default '0', `date_debut` int(15) NOT NULL default '0', `date_fin` int(15) NOT NULL default '0', `montant_mensualite` float(6,2) NOT NULL default '0.00', `pdf_ordre_virement` varchar(120) NOT NULL default '', `commentaires` text, PRIMARY KEY (`num_ordre_virement`) ) TYPE=MyISAM COMMENT='Liste des différents ordres de virement' AUTO_INCREMENT=2147483647 ; # # Contenu de la table `ordres_virement` # # -------------------------------------------------------- # # Structure de la table `produits` # CREATE TABLE `produits` ( `num_produit` int(11) NOT NULL auto_increment, `type_produit` enum('site web','domaine','référencement','hébergement','autre') NOT NULL default 'site web', `nom_produit` varchar(80) NOT NULL default '', `description_produit` text, `tarif_produit` float(7,2) NOT NULL default '0.00', PRIMARY KEY (`num_produit`) ) TYPE=MyISAM COMMENT='Détails des différents produits' AUTO_INCREMENT=21 ; # # Contenu de la table `produits` # # -------------------------------------------------------- # # Structure de la table `produits_projets` # CREATE TABLE `produits_projets` ( `num_projet` int(11) NOT NULL default '0', `num_produit` int(11) NOT NULL default '0', `expire_le` int(15) default NULL, `nom_domaine` varchar(130) default NULL, `commentaires` text, PRIMARY KEY (`num_projet`,`num_produit`) ) TYPE=MyISAM COMMENT='Table regroupant les différents produits par projet'; # # Contenu de la table `produits_projets` # # -------------------------------------------------------- # # Structure de la table `projets` # CREATE TABLE `projets` ( `num_projet` int(11) NOT NULL auto_increment, `nom_projet` varchar(30) NOT NULL default '', `num_client` int(6) NOT NULL default '0', PRIMARY KEY (`num_projet`) ) TYPE=MyISAM COMMENT='Liste des projets en fonction des clients' AUTO_INCREMENT=2 ; # # Contenu de la table `projets` # INSERT INTO `projets` VALUES (1, 'oh non', 0); # -------------------------------------------------------- # # Structure de la table `virements_suivi` # CREATE TABLE `virements_suivi` ( `num_ordre_virement` int(11) NOT NULL default '0', `date_virement` int(15) NOT NULL default '0', `etat_virement` enum('Non effectué','OK') NOT NULL default 'Non effectué', PRIMARY KEY (`num_ordre_virement`,`date_virement`) ) TYPE=MyISAM COMMENT='Suivi mensuel des virements'; # # Contenu de la table `virements_suivi` #

d0m
Mammouth du PHP | 1141 Messages

10 juin 2008, 13:25

Effectivement il semble que la table soit mal construite.

A part si j'ai loupé la table, rien ne lie un devis à un client.
L'id du client n'étant pas celle d'un devis du client, impossible de supprimer les devis du client lorsque tu supprimes le client car tu ne sais pas quel devis correspond à quel client.

Il faudrait revoir la structure des tables si c'est possible pour toi en ajoutant par exemple dans la table devis un champ id de client.

Pour ce qui est des projets, il suffit de supprimer les projets donc le numéro de client correspond aux clients que tu supprimes (voir du coté des jointures en SQL).

Mais je te le redis, les tables sont mal conçues au départ, il faudrait penser à les revoir.

Eléphant du PHP | 67 Messages

10 juin 2008, 14:03

j'ai juste survolé mais outre la structure de ta base ca marchera mieux avec
mysql_query("DELETE FROM devis WHERE id='{$_GET['id']}'");
qu'avec
mysql_query("DELETE FROM devis WHERE id='{$GET['id']}'");

tu a oublié le "_"

Eléphanteau du PHP | 32 Messages

10 juin 2008, 14:33

Merci ! :D
j'avais même pas vu :s
Modifié en dernier par flippaeti le 10 juin 2008, 15:24, modifié 1 fois.

Eléphanteau du PHP | 32 Messages

10 juin 2008, 15:23

"devis" et relier à "clients" par la table "clients_prospects"

Eléphant du PHP | 67 Messages

10 juin 2008, 16:02

Dans ce cas ta requete de DELETE est plus compliqué que celle que tu a écrit tu doit en effet passer soit par une jointure soit par une sous-requete (perso je prefere les sous-requete mais c'est une question de gout)

EDIT: Ce n'est pas parce que deux tables ont une colonne qui ont le meme nom qu'il y a un lien entre les tables il faut rajouter des contrainte de clé étrangére.

Sinon tu a toujours la possibilité de rajouter des champs par exemple id_client dans les tables autres que client mais sans contraintes sur la base c'est mons propre...
Modifié en dernier par vince_weed le 10 juin 2008, 16:15, modifié 1 fois.

Eléphanteau du PHP | 32 Messages

10 juin 2008, 16:14

j'ai fais cela mais je ne trouve pas l'erreur !

Code : Tout sélectionner

if(isset($_GET['action'])) { mysql_query("DELETE FROM clients_prospects WHERE id='{$_GET['id']}'"); mysql_query("DELETE FROM clients WHERE id='{$_GET['id']}'"); mysql_query("DELETE FROM devis WHERE id='{$_GET['id']}'"); $select=mysql_query("SELECT num_client FROM clients WHERE id='{$_GET['id']}')"); while($s=mysql_fetch_array($select)) { mysql_query("DELETE FROM projets WHERE id='{$s['num_client']}'"); } }

Eléphant du PHP | 67 Messages

10 juin 2008, 16:22

pour supprimer les projets ou le client a pour id : $_GET['id']

tu a juste a faire:

mysql_query('DELETE FROM projets WHERE num_client = '.$_GET['id']);
Par contre avec ta base actuelle les deux deletes précédents sont faux à mon avis (ils ne suppriment pas les lignes souhaitées si j voit bien ce que tu veut faire (cf édit précédent))

Eléphanteau du PHP | 32 Messages

10 juin 2008, 16:32

Code : Tout sélectionner

mysql_query('DELETE FROM projets WHERE num_client = '.$_GET['id']);
cela est impossible car num_ client est différent de l'id !

Eléphant du PHP | 67 Messages

10 juin 2008, 16:37

ok tu doit donc passer par ta table client

 mysql_query("DELETE FROM projets WHERE num_client IN
                                (SELECT num_client FROM clients WHERE id='{$_GET['id']}')");
          
(solution avec sous-requete)

Eléphanteau du PHP | 32 Messages

10 juin 2008, 16:59

ouais mais c'est la première que j'ai fais elle n'a pas fonctionner !
mysql sous phpmyadmin m'a sorti des erreurs !

Eléphant du PHP | 67 Messages

10 juin 2008, 17:04

tu peut poster l'erreur?

Eléphanteau du PHP | 32 Messages

10 juin 2008, 17:10

requête SQL :

Code : Tout sélectionner

DELETE FROM projets WHERE num_client IN ( SELECT num_client FROM clients WHERE id = '10' )
MySQL a répondu:

#1064 - Erreur de syntaxe près de 'SELECT num_client
FROM clients
WHERE id = '10' )' à la ligne 1


Si je met = au lieu de IN c'est pareil !