La fonction DELETE, eviter les erreurs ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : La fonction DELETE, eviter les erreurs ?

par Ajoloca » 02 févr. 2007, 23:01

Re,
Voici une structure, réduite à sa plus simple expression, mais qui respecte la notion d'identifiant.
Image
Et voici le code SQL pour un moteur InnoDB (Qui gère les contraintes référentielles)
CREATE TABLE membres (
  id_membre INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nom VARCHAR(50) NULL,
  PRIMARY KEY(id_membre)
)
ENGINE=InnoDB;

CREATE TABLE commandes (
  num_commande INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  id_membre INTEGER UNSIGNED NOT NULL,
  date_cmde TIMESTAMP NULL,
  PRIMARY KEY(num_commande),
  FOREIGN KEY(id_membre)
    REFERENCES membres(id_membre)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
)
ENGINE=InnoDB;

par iclo » 02 févr. 2007, 22:34

Regardes du côté des clés étrangères pour faire le lien entre la table membre et la table commande.

par Brice83 » 02 févr. 2007, 22:29

Re,

Tu as un ÉNORME, MONSTRUEUX, ... problème de conception.
Non, a chaque commande= 1 ligne !

donc mettre une clée primaire n'est pas possible !

A moins que j'insert cette clée ?

exemple :

le membre commande, j'utilise donc INSERT INTO commande VALUES ('$id',.....) et là oui, je pourrait selectionner par rapport au numéro d'identifiant !

cette solution est t'elle mieux ?

par albat » 02 févr. 2007, 22:29

RTu as un ÉNORME, MONSTRUEUX, ... problème de conception.
Et moi qui craignais de paraître agressif... :roll:

par albat » 02 févr. 2007, 22:27

Sans vouloir me montrer sévère, je dirais que ta base souffre d'un gros défaut de modélisation. :-*

par Ajoloca » 02 févr. 2007, 22:22

Re,

Tu as un ÉNORME, MONSTRUEUX, ... problème de conception.

par Brice83 » 02 févr. 2007, 22:15

Merci de vos réponses !

albat ==> deux membres ne peuvent pas avoir le même pseudo donc que je sélectionne par rapport à l'id, a l'email , ou au pseudo, le code sélectionnera la bonne personne et sans erreur !

puis la sélection a l'id me parait un peu complexe car en fonction de ces actions sur mon site le membre qui a l'id n°4 dans la table membre peut très bien avoir l'id n° 59 dans la table commande... et l'id n° 197 dans la table 'commentaire'... !

donc la sélection à l'id me parait completement impossible dans mon cas..

car exemple :

mon tout premier membre s'inscrit, il a donc l'ID 1 dans la table membres et ne commande rien ! Un second membre s'inscrit,a donc l'ID 2 dans 'membres' et lui,passe une commande qui s'inscrit dans la table 'commande',il obtient donc l'id 1 dans cette table....!

tu vois ou je veut en venir ?

par maïa » 02 févr. 2007, 21:52

je ne crois pas que cela génère une erreur,
peut être que la question a se poser est : si il y a une suppression est ce que cela implique une autre action,
si oui fait un test sur le nombre de supression
si non bahhh quoi ?

par albat » 02 févr. 2007, 21:51

Les membres inscrits doivent être identifiés selon leur... identifiant.
Donc pas besoin d'utiliser le pseudo.
$sql = "DELETE FROM membres WHERE id=".$id;       // si id est numérique
$sql = "DELETE FROM membres WHERE id='".$id."'";  // si id est alphanumérique

par Ajoloca » 02 févr. 2007, 21:51

Bonjour,

MySQL ne retourne pas d'erreur dans le sens ou tu l'entends, il va te retourner le nombre d'enregistrements affectés.

Si dans la table en question il ne trouve pas d'enregistrements correspondant à tes critères, il te dit tout simplement que le traitement c'est effectué sur 0 (zéro) enregistrements.

C'est la même chose que si tu fais un SELECT sur une table et il ne trouve pas d'enregistrements.

par Brice83 » 02 févr. 2007, 21:28

Je vient d'essayer "manuellement" avec phpmyadmin et voici ce que j'ai en retour :
Nombre d'enregistrements effacés : 0 (traitement: 0.0003 sec.)requête SQL:DELETE FROM unetable WHERE pseudo = 'Anthony'
dois-je en conclure que même si un pseudo n'est pas présent dans une table,aucune erreur ne sera retourner ?

La fonction DELETE, eviter les erreurs ?

par Brice83 » 02 févr. 2007, 20:34

Bonsoir,

Pour mon espace membre,je suis en train de créer la fonction de désinscription :
DELETE FROM membres WHERE id='$id' AND pseudo='$pseudo'
Seulement,j'ai aussi d'autres tables ou le membre est susceptible d'y etre MAIS ce n'est pas obliger car cela dépend de ce qu'il a fait sur mon site !

Donc,si je demande un DELETE sur une table ou ce membre n'est pas présent, je suppose que ca finira avec une erreur ?

Et si oui, comment éviter cette erreur ?

merci