Page 1 sur 1

problème de sélection !

Posté : 19 févr. 2007, 15:56
par Invité
Bonjour,

ce code me pose problème :
$abc = mysql_query("SELECT id, efface, valide FROM membres WHERE efface=3 AND valide=0") or die ('Erreur selection pour effacement auto : '.mysql_error());
$bcd = mysql_fetch_array($abc);
$id = $bcd['id'];
$efface = $bcd['efface'];
$valide = $bcd['valide'];
if ($efface==3 && valide==0) {
mysql_query("DELETE FROM parraine WHERE id='$id'") or die ('Erreur : '.mysql_error());
}
mysql_query("DELETE FROM membres WHERE efface=3 AND valide=0") or die ('Erreur suppression membre : '.mysql_error());
echo'Toutes les requetes ont été effectuer sans problème';
Donc, je sélectionne dans ma table " membres " tout les membres qui ont un 'efface==3' et un 'valide==0' pour les effacer dans une autre table " parraine' ! Dans ma tables membres, toutes ces personnes sont bien effacer car je ne demande pas de sélection à l'id mais dans la table parraine, cela ne m'efface qu'un seul ID ?

A tout les coups,le problème vient de la :
DELETE FROM parraine WHERE id='$id'
donc,comment je pourrais faire pour sélectionner tout ceux que je veut effacer ? car mon code ci-dessus est tout a fait correct mais apparemment la variable $id ne peut contenir qu'une seule valeur !

merci !

Posté : 19 févr. 2007, 16:38
par Ryle
Sans boucle, tu ne liras que le premier enregistrement avec mysql_fetch_array() .... tu n'éffaceras donc que le premier id :)
while ($row = mysql_fetch_array($rs)) {
  ...
}

Nota : il te manque un $ à $valide:
if ($efface==3 && valide==0)

Nota bis : en sql, seule les chaines doivent être délimitées par des apostrophes (varchar, date, etc.) pas les nombres (et tant qu'à faire, il vaut mieux sortir les variables des chaines) :
"DELETE FROM parraine WHERE id =". $id

Posté : 19 févr. 2007, 17:05
par Invité
merci mais je doit etre bete :
mysql_query("UPDATE membres SET efface=efface+1 WHERE valide=0") or die ('Erreur ajout jour effacement : '.mysql_error());
$abc = mysql_query("SELECT id, efface, valide FROM membres WHERE efface=3 AND valide=0") or die ('Erreur selection pour effacement auto : '.mysql_error());
while ($bcd = mysql_fetch_array($abc)){
$id = $bcd['id'];
$efface = $bcd['efface'];
$valide = $bcd['valide'];}
if ($efface==3 && $valide==0) {
mysql_query("DELETE FROM parraine WHERE id='$id'") or die ('Erreur : '.mysql_error());
}
et ca fait pareil ==> une seule sélection est effacé ?

Posté : 19 févr. 2007, 17:37
par Ryle
Et avec quelques echo pour voir ce qu'il fait ?
$abc = mysql_query("SELECT id FROM membres WHERE efface=3 AND valide=0") 
  or die ('Erreur selection pour effacement auto : '.mysql_error()); 
while ($bcd = mysql_fetch_array($abc)){ 
  // j'ai viré tout ce qui était lié à efface==3 et valide==0, puisque ces critères sont déjà définis par la requête

  echo 'Suppression pour ID : ' . $bcd['id'] .'<br />';

  $rs = mysql_query("SELECT COUNT(*) AS nb FROM parraine WHERE id=" . $bcd['id']);
  $row = mysql_fetch_assoc($rs);
  echo 'NB Parraine à supprimer : ' . $row['nb'] .'<br />';

  mysql_query("DELETE FROM parraine WHERE id=" . $bcd['id']) or die ('Erreur : '.mysql_error()); 

  echo 'NB ligne supprimées : ' . mysql_affected_rows();
}