Problème d'une boucle for pour supprimer...

Eléphanteau du PHP | 21 Messages

08 juil. 2005, 15:44

Bonjour je veux faire une boucle for relié à une formulaire qui envoi 2 champ (2 numéros pour supprimer les id de message de num1 a num2.

mais il s'avère que sa ne fonctionne pas, de l'aire de serait apprécié

voici un brin du code:

//On mest les variables reçu par post dans des variables
$nDebut = $_POST[nDebut];
$nFin = $_POST[nFin];
$i = nDebut;

//On se connect à la base de donnée
$link = mysql_connect($mysql_host, $mysql_user, $mysql_password) or die("erreur de connexion");

//Sélection de votre base de donnée
mysql_select_db($mysql_base,$link) or die("erreur de connexion");

//Requête pour la sélection des messages
$requete = mysql_query("SELECT `id`, `date`, `username`, `email`, `message` FROM `livre_or` ORDER BY `date` DESC")
or die("erreur de requête");

//Requête de suppression d'élément dans la table de nDebut à nFin
for($i<=nFin)
{
mysql_query("DELETE FROM `livre_or` WHERE `id`='$i' ORDER BY `id` DESC")
or die("erreur requête".mysql_error());
$i++;
}

Merci à l'avance pour votre aide!
-Raistlin

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 juil. 2005, 15:52

ta boucle for doit mal fonctionner à cause de ça :
 for($i<=nFin)  // manque un $ à nFin
à quoi sert le SELECT ?

pourquoi ne pas supprimer tous les enregistrements en une seule requête DELETE ?

-> il serait mieux d'encadrer le code PHP que tu postes avec ces balises [ php]
-> tu doit avoir une erreur quand tu exécutes ce code, si oui, c'est bien de l'indiquer

Eléphant du PHP | 91 Messages

08 juil. 2005, 15:56

1/
Il n'y a pas de ORDER BY dans un DELETE
for($i<=nFin) 
{ 
mysql_query("DELETE FROM `livre_or` WHERE `id`='$i' ") 
or die("erreur requête".mysql_error()); 
$i++; 
} 
2/
Tu peux faire plus simple :
//On mest les variables reçu par post dans des variables 
$nDebut = $_POST[nDebut]; 
$nFin = $_POST[nFin]; 
$i = nDebut; 

//On se connect à la base de donnée 
$link = mysql_connect($mysql_host, $mysql_user, $mysql_password) or die("erreur de connexion"); 

//Sélection de votre base de donnée 
mysql_select_db($mysql_base,$link) or die("erreur de connexion"); 

//Requête pour la sélection des messages 
mysql_query("DELETE FROM `livre_or` WHERE `id`>='$nDebut' AND `id`<='$nFin' ") 
or die("erreur de requête"); 
Modifié en dernier par Augure le 08 juil. 2005, 15:57, modifié 1 fois.

Eléphanteau du PHP | 21 Messages

08 juil. 2005, 15:56

rof lol merci pour la $:P j'ai parfois la tête en l'air quand je ne code pas sur Zend... pour ce qui est de tout supprimer en une seul requete serait plus éficace mais je pense pas que de tout supprimer les post dans un livre d'or est une bonne idée:P

merci je vais aller voir si sa marche...
?

Wow Augure un gros merci , t'a raison sa va vraiment me simplifier la tache j'ignorai qu'on pouvais faire sa:P

je vais le retenir ;)
-Raistlin

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 juil. 2005, 15:59

pour ce qui est de tout supprimer en une seul requete serait plus éficace mais je pense pas que de tout supprimer les post dans un livre d'or est une bonne idée:P
je n'ai pas dit supprimer tous les posts, j'ai dit supprimer tout (sous entendu ce que tu veux supprimer) en une seule requête
ce qu'Augure t'as suggéré de faire aussi avec une proposition de code :

Code : Tout sélectionner

DELETE FROM `livre_or` WHERE `id`>='$nDebut' AND `id`<='$nFin' "
variante :

Code : Tout sélectionner

DELETE FROM `livre_or` WHERE id BEETWEEN '$nDebut' AND '$nFin';
merci je vais aller voir si sa marche...
est tu sur que je peux faire:

`id`='$i'
?
enlève les `` autour de id
Modifié en dernier par ouckileou le 08 juil. 2005, 16:00, modifié 1 fois.

Eléphant du PHP | 91 Messages

08 juil. 2005, 15:59

Je fais ça en général
mysql_query("DELETE FROM livre_or WHERE id>=".$nDebut." AND id<=".$nFin") 
or die("erreur de requête"); 
PS : je m'interdis d'utiliser des nots reservés comme nom de colonne

Eléphanteau du PHP | 21 Messages

08 juil. 2005, 16:04

Merci à vous vous deux...

mais pourquoi je dois enlever les `` , quel est la regle?
-Raistlin

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 juil. 2005, 16:07

en fait ça ne change rien donc tu peux les laisser si tu veux, je pensais que ce n'était que pour les noms de tables

ça sert à différencier les noms de table/colonne des mots réservés

donc soit tu mets ça, soit tu n'utilises pas de mots réservés pour nommer tes tables/colonnes