Problème requête DELETE

omlaly - 13 mars 2013 à 10:49
 omlaly - 22 mars 2013 à 08:21
Bonjour,

J'ai un problème avec une requête SQL DELETE. En effet, je voudrais faire une requête SQL pour pouvoir supprimer un article et ses commentaires éventuels.
J'ai fait une requête SQL DELETE avec une jointure entre les deux tables
Voici les CREATE TABLE des deux tables :
Articles
CREATE TABLE IF NOT EXISTS `articles` (
  `id_article` int(11) NOT NULL AUTO_INCREMENT,
  `nom_village` varchar(255) CHARACTER SET latin1 NOT NULL,
  `nom_categorie` varchar(255) CHARACTER SET latin1 NOT NULL,
  `date_depot` datetime NOT NULL,
  `titre_article` varchar(255) NOT NULL,
  `texte_article` text NOT NULL,
  `auteur_article` varchar(255) NOT NULL,
  PRIMARY KEY (`id_article`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=60 ;


Commentaires
CREATE TABLE IF NOT EXISTS `commentaires` (
  `id_commentaire` int(11) NOT NULL AUTO_INCREMENT,
  `user_pseudo` varchar(255) NOT NULL,
  `nom_village` varchar(255) NOT NULL,
  `nom_categorie` varchar(255) NOT NULL,
  `date_depot` datetime NOT NULL,
  `texte_commentaire` text NOT NULL,
  `id_article` int(11) NOT NULL,
  PRIMARY KEY (`id_commentaire`),
  KEY `FOREIGN KEY` (`id_article`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


Voici le code PHP (la requête SQL) :
$id_article=$donnees_messages['id_article'];

// Suppression de l'article et de ses éventuels commentaires
$req_suppression_commentaires = 
"DELETE articles,commentaires FROM articles,commentaires WHERE articles.id_article=commentaires.id_commentaire AND articles.id_article=".$id_article;

$query_alerte_email_nouvel_article = mysql_query($req_suppression_commentaires) or die ('Erreur sur la requête SQL concernant la suppression des articles et des commentaires correspondants'.mysql_error()); // Envoie une requête à un serveur MySQL
echo "Vous avez supprimé cet article et ses commentaires éventuels.

";


Voici l'erreur :
Erreur sur la requête SQL concernant la suppression des articles et des commentaires correspondantsYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1


Si vous voyez quelque chose, n'hésitez pas...

Cordialement

100 réponses

J'atterris sur la page de suppression avec ce code (qui est dans la boucle d'affichage) :
if(isset($_SESSION['user_pseudo'])&&($_SESSION['user_acces']=="1")) {
echo '<tr><td id="outils_administration">Outils Administrateurs
<form action="../../supprimer_articles_commentaires_correspondants.php" method="post">
</form>
</tr></td>';}


Cordialement
0
Je viens de penser à ça : Est-ce qu'il faut que je rajoute un input hidden avec l'identifiant de l'article dans le formulaire ?

Cordialement
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
15 mars 2013 à 10:56
Pas besoin d'input hidden, il faut simplement que ton lien prennent en compte l'identifiant de l'article en l'ajoutant comme paramètre GET. Ce qui donnerait un truc du genre :
"/supprimer_articles_commentaires_correspondants.php?idart=".$donnees_messages["id_article"];


Dans ta page de suppression tu accéderas alors au paramètre GET avec un truc du genre :
$id_article = $_GET["idart"];
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
15 mars 2013 à 11:42
Ta concaténation pour ton URL est incorrecte, tes quotes sont mal placées.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Avec ce code HTML :
<form action="../../supprimer_articles_commentaires_correspondants.php?idart=.$donnees_messages["id_article"]." method="POST">
</form>
, j'arrive sur
http://www.adresse.net/supprimer_articles_commentaires_correspondants.php?idart=.$donnees_messages[


Cordialement
0
Avec ce code HTML :
<form action="../../supprimer_articles_commentaires_correspondants.php?idart='.$donnees_messages["id_article"].' method="POST">
</form>


j'arrive sur cette adresse :
http://www.adresse.net/supprimer_articles_commentaires_correspondants.php?x=9&y=19


Cordialement
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
15 mars 2013 à 13:27
Ta première concaténation est pire que l'initiale,
le deuxième je vois pas comment tu arrives à avoir des x & y.

Enfin, il n'y absolument aucune utilité à utiliser une balise FORM.
Utilise plutôt un A/HREF (un lien quoi).

Bon je te laisse te démener avec ce pauv' lien, je dois aller taffer.
0
Quand tu me dis un a href , c'est ça :
echo '<tr><td id="outils_administration">Outils Administrateurs</td><td>[../../supprimer_articles_commentaires_correspondants.php ]</tr></td>';}echo '</table>
'; 
?

Avec ce code, ça ne marche pas.

Cordialement
0
J'ai essayé ce code mais ça ne marche pas :
[../../supprimer_articles_commentaires_correspondants.php?idart= ]


Je continue mes recherches...
Cordialement
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
15 mars 2013 à 19:34
Pour rappel je ne pratique pas le PHP, ce n'est plus de mon ressort :

mon lien";
?>


Bonne soirée
0
J'ai mis ce code et ça marche :
[../../supprimer_articles_commentaires_correspondants.php?idart='.$donnees_messages['id_article'].' ]


Mais, maintenant c'est quand on poste un commentaire que ça bug, ça me met l'erreur suivante :
Erreur sur la requête SQL concernant l'insertion des commentaires sur des articlesCannot add or update a child row: a foreign key constraint fails (`sgbdd`.`commentaires`, CONSTRAINT `commentaires_ibfk_21` FOREIGN KEY (`id_commentaire`) REFERENCES `articles` (`id_article`) ON DELETE CASCADE ON UPDATE CASCADE)


Je pense que c'est à cause de la requête SQL qu'on a faite : ALTER TABLE ON DELETE CASCADE.

Cordialement
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
15 mars 2013 à 20:57
Le ON DELETE CASCADE ne fait que supprimer les éléments liés (commentaires) de ton article.
L'erreur ne vient pas de la clé étrangère que tu as ajoutée (ALTER TABLE), ou du moins ce n'est pas "à cause" mais "grâce" au cette clé étrangère, qui assure l'intégrité (les bonnes liaisons) de tes données. L'erreur doit provenir du INSERT qui lève l'erreur m'est avis (je sens que je vais encore me retrouver à expliquer du PHP )
0
Voici la requête INSERT INTO des commentaires :
// Insertion du commentaire dans la base de données
$req_insertion_texte_commentaire_article = "INSERT INTO commentaires(user_pseudo, date_depot, texte_commentaire, id_article) VALUE ('$user_pseudo', now(), '$texte_commentaire_article', '$id_article')";
$query_insertion_texte_commentaire_article = mysql_query($req_insertion_texte_commentaire_article) or die ('Erreur sur la requête SQL concernant l\'insertion des commentaires sur des articles'.mysql_error()); // Envoie une requête à un serveur MySQL
echo "Votre commentaire est posté.

";
}


Avant la requête ALTER TABLE qu'on a faite, ça marchait alors que maintenant ça me met l'erreur suivante :
Erreur sur la requête SQL concernant l'insertion des commentaires sur des articlesCannot add or update a child row: a foreign key constraint fails (`sgbdd`.`commentaires`, CONSTRAINT `commentaires_ibfk_21` FOREIGN KEY (`id_commentaire`) REFERENCES `articles` (`id_article`) ON DELETE CASCADE ON UPDATE CASCADE)


Cordialement
0
Je confirme le problème : maintenant quand on poste un commentaire, ça met l'erreur suivante :
Erreur sur la requête SQL concernant l'insertion des commentaires sur des articlesCannot add or update a child row: a foreign key constraint fails (`vincentsgbdd`.`commentaires`, CONSTRAINT `commentaires_ibfk_21` FOREIGN KEY (`id_commentaire`) REFERENCES `articles` (`id_article`) ON DELETE CASCADE ON UPDATE CASCADE)


Quand je supprime un article et ses commentaires, ça supprime donc ça ça marche.

Reste plus qu'à régler le problème ci-dessus...

Cordialement
0
Juste pour information, quand je teste la requête SQL sous PHPMyAdmin, ça me met la même erreur.
Je pense que c'est la requête ALTER TABLE qu'on a fait qui bloque ça car avant qu'on la rajoute, ça marchait.

Cordialement
0
En fait pour faire un résumé :

-quand je fais cette requête SQL :
ALTER TABLE commentaires ADD FOREIGN KEY (id_article) REFERENCES articles(id_article)
, on peut poster des commentaires mais quand j'essaye de supprimer un article et ses commentaires, ça m'affiche :
Erreur sur la requête SQL concernant la suppression des articles et des commentaires correspondantsCannot delete or update a parent row: a foreign key constraint fails (`vincentsgbdd`.`commentaires`, CONSTRAINT `commentaires_ibfk_32` FOREIGN KEY (`id_article`) REFERENCES `articles` (`id_article`))


-quand je fais cette requête SQL :
ALTER TABLE `commentaires` ADD FOREIGN KEY (`id_commentaire`) REFERENCES `articles`(`id_article`) ON UPDATE CASCADE ON DELETE CASCADE
, la suppression d'article et des commentaires correspondants fonctionne alors que quand on poste un commentaire sur un article, l'erreur suivante :
Erreur sur la requête SQL concernant l'insertion des commentaires sur des articlesCannot add or update a child row: a foreign key constraint fails (`sgbdd`.`commentaires`, CONSTRAINT `commentaires_ibfk_40` FOREIGN KEY (`id_commentaire`) REFERENCES `articles` (`id_article`) ON DELETE CASCADE ON UPDATE CASCADE)


Comment faire pour que les deux cas fonctionnent en même temps ?!

Cordialement
0
Il y a quelqu'un qui pourrait me répondre au post précédent... Comment faire pour que les deux cas fonctionnent en même temps ?

Cordialement
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 mars 2013 à 08:42
J'ai déjà répondu, ton INSERT est puné voilà tout.

T'as vraiment du fun à pomper les aides sans les comprendre pour faire un bout de code en plus d'un mois qui aurait pris moins de 5 jours à un néophyte (et quelques heures pour un dev confirmés) ?
0
C'est la requête SQL INSERT INTO de l'insertion des commentaires qui va pas ? (pourtant quand je fais la requête sql alter table, ça marche, voir mon post précédent)...

Cordialement
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 mars 2013 à 15:07
Le ALTER TABLE ne se fait qu'une et une seule fois. C'est une qui commande qui "altère la table" (comme son nom l'indique) une fois pour toute.
0
Rejoignez-nous