Page 1 sur 1
Problème d'une boucle for pour supprimer...
Posté : 08 juil. 2005, 15:44
par raistlin
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!
Posté : 08 juil. 2005, 15:52
par ouckileou
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
Posté : 08 juil. 2005, 15:56
par Augure
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");
Posté : 08 juil. 2005, 15:56
par raistlin
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

Posté : 08 juil. 2005, 15:59
par ouckileou
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
Posté : 08 juil. 2005, 15:59
par Augure
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
Posté : 08 juil. 2005, 16:04
par raistlin
Merci à vous vous deux...
mais pourquoi je dois enlever les `` , quel est la regle?
Posté : 08 juil. 2005, 16:07
par ouckileou
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