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

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
14 mars 2013 à 21:47
Et donc à quoi sert ta requête de suppression des commentaires ?
0
A rien.
Donc, il faut que je supprime les requêtes dans le fichier qui permet de supprimer des articles et les commentaires correspondants ?

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
14 mars 2013 à 22:00
Exactement ! Tu n'as plus que la requête de suppression de l'article à utiliser, la suppression des commentaires se fera toute seule
0
Maintenant quand je poste un article, ça l'enregistre qu'une seule fois dans la base de données.

Mais, j'ai toujours cette erreur quand j'essaye de supprimer un article :
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


Je te met le code PHP :
$id_article=$donnees_messages['id_article'];

// Suppression de l'article et de ses éventuels commentaires
$req_suppression_articles "DELETE FROM articles WHERE id_article $id_article";

$query_alerte_email_nouvel_article = mysql_query($req_suppression_articles) 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.

";


Cordialement
0

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

Posez votre question
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
14 mars 2013 à 22:15
Juste avant l'appel à mysql_query fais un echo de ta variable contenant ta requête, puis mets la ici.
Le code erreur n'est pas assez parlant, il me faut la requête "telle quelle".
0
Salut

Voici le code PHP :
$id_article=$donnees_messages['id_article'];

// Suppression de l'article et de ses éventuels commentaires
$req_suppression_articles "DELETE FROM articles WHERE id_article $id_article";
echo $req_suppression_articles;
$query_alerte_email_nouvel_article = mysql_query($req_suppression_articles) 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 le résultat :
DELETE FROM articles WHERE id_article = 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


Le problème c'est qu'il ne prend pas l'identifiant de l'article qu'on essaye de supprimer.

En mettant des quotes pour entourer la variable $id_article, il n'y a plus d'erreur mais la suppression de l'article et de ses commentaires ne s'effectue pas.
En concaténant la requête SQL et la variable comme ceci :
$req_suppression_articles "DELETE FROM articles WHERE id_article ".$id_article;
, ça met l'erreur ci-dessus.

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 à 08:41
Cela signifie que $donnees_messages['id_article'], et donc $id_article, ne contient pas une valeur d'identifiant. Fais un echo sur cette variable pour le confirmer.

Il faut donc voir comment tu remplis ton tableau $donnees_messages, c'est certainement là où se trouve l'erreur.
0
Voici le code PHP :
$id_article=$donnees_messages['id_article'];

// Suppression de l'article et de ses éventuels commentaires
$req_suppression_articles 'DELETE FROM articles WHERE id_article $id_article';
echo $id_article;
echo $req_suppression_articles;
$query_alerte_email_nouvel_article = mysql_query($req_suppression_articles) 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 :
DELETE FROM articles WHERE id_article = $id_articleErreur sur la requête SQL concernant la suppression des articles et des commentaires correspondantsUnknown column '$id_article' in 'where clause'


Il croit que $id_article est un champs dans une table de la base de données. C'est ça le problème.

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 à 08:53
Certainement. Fait une concaténation à l'ancienne, avec le point (.) voir si ça change quelque chose.
0
Quand j'essaye avec cette requête :
$req_suppression_articles "DELETE FROM articles WHERE id_article ".$id_article."";


Ca me met l'erreur suivante :
DELETE FROM articles WHERE id_article = 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


Cordialement
0
Quand je fais un copier/coller de la requête SQL dans PHPMyAdmin, elle fonctionne.

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 à 09:20
fais un echo $req_suppression_articles et copie le résultat ici (ma première demande je rappelle, mais t'en fais qu'à ta tête).
0
J'ai fait un copier/coller de la requête SQL depuis PHPMyAdmin.
Voici la requête SQL:
$req_suppression_articles "DELETE FROM articles WHERE id_article ".$id_article."";


Quand j'essaye, voici ce qu'il m'affiche :
DELETE FROM articles WHERE id_article = ".."


Il n'affiche plus d'erreur mais remplace l'identifiant de l'article par "..".

Cordialement
0
C'est ce que j'ai fait !

Voici le code PHP :
$id_article=$donnees_messages['id_article'];

// Suppression de l'article et de ses éventuels commentaires
$req_suppression_articles "DELETE FROM articles WHERE id_article ".$id_article."";
echo $req_suppression_articles; // Ici l'affichage de la requête SQL
$query_alerte_email_nouvel_article = mysql_query($req_suppression_articles) 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.

";


Et ça, ça m'affiche :
DELETE FROM articles WHERE id_article = 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


Il ne prend pas l'identifiant de l'article.

Cordialement
0
Il n'y a rien dans la variable $id_article car quand je fais :
echo $id_article;
, ça n'affiche rien.

Cordiaalement
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 à 09:57
L'erreur est flagrante (et tu l'écris toi-même) : il n'y a rien dans $id_article (et a fortiori dans $donnees_messages['id_article']). Il faut donc remonter en amont du code pour voir comment tu le remplis (mon 4ème message de la page précédente).
0
Je la remplie dans la boucle d'affichage et là ça s'affiche en mettant
.nl2br($donnees_messages['id_article']).
.

Pour information, voici la boucle d'affichage (dans laquelle l'identifiant de l'article s'affiche) :
while($donnees_messages = mysql_fetch_array($retour_messages))
{
    // Affichage des messages avec le design
     // nl2br : Insère un retour à la ligne HTML à chaque nouvelle ligne - pour prendre en compte les sauts de ligne dans le message.
     echo ''.nl2br($donnees_messages['titre_article']).',

----

'.nl2br($donnees_messages['texte_article']).',

----

<small>Posté par : '.(stripslashes($donnees_messages['auteur_article']).' - '.dateLongue($donnees_messages['date_depot'])).'   -  Article N°'.nl2br($donnees_messages['id_article']).'</small>';
if(isset($_SESSION['user_pseudo'])&&($_SESSION['user_acces']=="1")) {
echo '----, Outils Administrateurs
<form action=\"../../supprimer_articles_commentaires_correspondants.php\" method=\"post\">
</form>
</td>';}
echo '

'; 
echo '

Commentaires.

<form method="POST" action="../../commentaire_post.php"><textarea name="texte_commentaire_article"></textarea>
</form>

';
$id_article=$donnees_messages['id_article'];
    // Ajout des sauts de ligne pour espacer les messages (
)		
// Requête SQL pour déterminer l'identifiant de l'article correspondant
$query_selection_article_correspondant = mysql_query('SELECT articles.id_article, commentaires.date_depot, commentaires.texte_commentaire,commentaires.user_pseudo FROM articles, commentaires WHERE articles.id_article=commentaires.id_article AND commentaires.id_article ='.$id_article.'') or die ('Erreur sur la requête SQL concernant la sélection de l\'article correspondant)'.mysql_error()); // Envoie une requête à un serveur MySQL

while ($row = mysql_fetch_assoc($query_selection_article_correspondant)) {
   echo '';
echo '----
'.$row["user_pseudo"].', ';
echo ''.dateLongue($row["date_depot"]).', ';
   echo ''.$row["texte_commentaire"].'
';
}
}


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:21
Et où se situe ton code de suppression par rapport à ce code ?
Car $donnees_messages n'a pas d'intérêt en-dehors de ta boucle while. Ce serait comme tenter d'utiliser une variable déclarée dans une autre page.
0
C'est deux pages différentes : ici, c'est le code de l'affichage et l'autre c'est le code du traitement de suppression d'articles et de leurs commentaires. Le problème, c'est la transmission de la variable entre les deux pages.

Est-ce qu'il faut que je passe par les variables de session pour effectuer la transmission entre les deux pages ?

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:32
Tu peux passer cette valeur en GET (dans l'URL), ça me parait le plus simple.

Comment atterris-tu sur la page de suppression ?
Depuis un lien généré dans ta liste d'article ?
Depuis un lien généré dans une page ne contenant que l'article en question ?
0
Rejoignez-nous