Deux requêtes DELETE sur une même page
Résolu
LaChaux78
Messages postés
583
Date d'inscription
Statut
Membre
Dernière intervention
-
LaChaux78 Messages postés 583 Date d'inscription Statut Membre Dernière intervention -
LaChaux78 Messages postés 583 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je voudrais savoir si il est possible de faire deux requètes SQL dans une même page, pour supprimer, dans deux tables différentes soit un enregistrement, soit un autre, au lieu de faire deux pages de suppression.
Afin que chaque membre connecté puisse supprimer soit ses messages envoyé, soit ses messages reçu.
J'ai bien sur deux liens pour la suppression.
Je vous remercie.
Je voudrais savoir si il est possible de faire deux requètes SQL dans une même page, pour supprimer, dans deux tables différentes soit un enregistrement, soit un autre, au lieu de faire deux pages de suppression.
Afin que chaque membre connecté puisse supprimer soit ses messages envoyé, soit ses messages reçu.
J'ai bien sur deux liens pour la suppression.
Je vous remercie.
echo '<td width="5%" align="center"><a href="_mess_supp.php?idexp='.$donnees->idexp.'&idmess='.$donnees->idmess.'"><img src="img/supprimer.png" alt="Supprimer ce message" title="Supprimer ce message" border="0"></a></td>';
echo '<td width="5%" align="center"><a href="_mess_supp.php?iddest='.$donnees->iddest.'&idmess='.$donnees->idmess.'"><img src="img/supprimer.png" alt="Supprimer ce message" title="Supprimer ce message" border="0"></a></td>';
$PARAM = array ( 'IDMESS' => isset($_REQUEST['idmess']) ? $_REQUEST['idmess'] : NULL, ); $sql = "DELETE FROM cdc_destinataires WHERE cdc_destinataires.iddest='".$_SESSION['idpers']."' AND cdc_destinataires.idmess = ".$PARAM['IDMESS'].""; try { $requete = $bdd->prepare($sql); $requete->execute(); } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); exit(0); // en cas d'erreur.. arrête le script ! } $sql2 = "DELETE FROM cdc_messages WHERE cdc_messages.idexp='".$_SESSION['idpers']."' AND cdc_messages.idmess = ".$PARAM['IDMESS'].""; try { $requete2 = $bdd->prepare($sql2); $requete2->execute(); } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); exit(0); // en cas d'erreur.. arrête le script ! } $success = "<span class='success'>Ton message à été supprimé.</span>"; echo '<br/>'; echo $success
A voir également:
- Deux requêtes DELETE sur une même page
- Comment supprimer une page sur word - Guide
- Hiberfil.sys delete - Guide
- Imprimer tableau excel sur une page - Guide
- Juste delete me - Guide
- Comment faire deux colonnes sur word - Guide
23 réponses
Bonjour,
Bien sûr que c'est possible.
C'est d'ailleurs ce que tu as écris dans ton code ... deux requêtes dans le même fichier.
Je ne comprend pas où se trouve le souci...
Par contre ... au lieu d'utiliser les variables de session... pourquoi ne pas te servir des variables GET que tu passes dans tes URL ?
Tu dispose de idexp et de iddest ... pourquoi ne t'en sers tu pas ?
Bien sûr que c'est possible.
C'est d'ailleurs ce que tu as écris dans ton code ... deux requêtes dans le même fichier.
Je ne comprend pas où se trouve le souci...
Par contre ... au lieu d'utiliser les variables de session... pourquoi ne pas te servir des variables GET que tu passes dans tes URL ?
Tu dispose de idexp et de iddest ... pourquoi ne t'en sers tu pas ?
Bonjour,
En fait tel quel cela supprime le message envoyé et également le message reçu qui corresponds au même idmess.
Oui lorsque par exemple j'envoie un message groupé, étant donné que je fait partie du groupe je reçois également le message donc dans message envoyé j'ai le message et également dans message reçu, de ce fait je voulais uniquement supprimer le message reçu.
C'est quelque peu compliqué peux tu me donner une explication pour simplifier cela.
Merci.
En fait tel quel cela supprime le message envoyé et également le message reçu qui corresponds au même idmess.
Oui lorsque par exemple j'envoie un message groupé, étant donné que je fait partie du groupe je reçois également le message donc dans message envoyé j'ai le message et également dans message reçu, de ce fait je voulais uniquement supprimer le message reçu.
C'est quelque peu compliqué peux tu me donner une explication pour simplifier cela.
Merci.
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonsoir,
je suggère d'ajouter iddest et idexp dans $PARAM.
ensuite tu pourras, en fonction duquel des deux est non null, faire l'action que tu souhaites.
je suggère d'ajouter iddest et idexp dans $PARAM.
ensuite tu pourras, en fonction duquel des deux est non null, faire l'action que tu souhaites.
Bonjour,
j'ai rajouté comme tu me l'a suggéré cela me retourne cette erreur.
Merci.
j'ai rajouté comme tu me l'a suggéré cela me retourne cette erreur.
Merci.
Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1064 You 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 4
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question$PARAM = array ( 'IDMESS' => isset($_REQUEST['idmess']) ? $_REQUEST['idmess'] : NULL, 'IDEXP' => isset($_REQUEST['idexp']) ? $_REQUEST['idexp'] : '', 'IDDEST' => isset($_REQUEST['iddest']) ? $_REQUEST['iddest'] : '', ); $sql = "DELETE FROM cdc_destinataires WHERE cdc_destinataires.iddest='".$_SESSION['idpers']."' AND cdc_destinataires.idmess = ".$PARAM['IDMESS']." AND cdc_destinataires.iddest = ".$PARAM['IDDEST'].""; try { $requete = $bdd->prepare($sql); $requete->execute(); } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); exit(0); // en cas d'erreur.. arrête le script ! } $sql2 = "DELETE FROM cdc_messages WHERE cdc_messages.idexp='".$_SESSION['idpers']."' AND cdc_messages.idmess = ".$PARAM['IDMESS']." AND cdc_messages.idexp = ".$PARAM['IDEXP'].""; try { $requete2 = $bdd->prepare($sql2); $requete2->execute(); } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); exit(0); // en cas d'erreur.. arrête le script ! } $success = "<span class='success'>Ton message à été supprimé.</span>"; echo '<br/>'; echo $success;
si tu reçois idexp comme paramètre, je pense que cela signifie qu'il faut supprimer un message reçu par l'utilisateur de la session. donc il faut, si idexp est non null, faire un DELETE qui mentionne l'utilisateur de la session comme iddest, et préciser idexp et idmess en fonction des paramètres reçus.
Bonsoir,
Déjà.. sachant que nous avons déjà bossé ensemble sur d'autres de tes scripts... il serait bien que tu t'en inspire...
Ton code actuel devrait ressembler à un truc du genre :
Mais bon... la deuxième requête pose problème ....
Si la personne qui à reçu le message veut le conserver.. celui-ci sera quand même supprimé....
EDIT : Requêtes corrigées
Déjà.. sachant que nous avons déjà bossé ensemble sur d'autres de tes scripts... il serait bien que tu t'en inspire...
Ton code actuel devrait ressembler à un truc du genre :
<?php //Activation de l'affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //-----------------------------------------------------------------------------// //connexion à la bdd //-----------------------------------------------------------------------------// require_once("init.php"); //-----------------------------------------------------------------------------// // --- FONCTIONS ---- // //-----------------------------------------------------------------------------// // Fonction qui sert à faire tes requêtes SQL // Contient déjà le try/catch function executeQuery($sql,$datas=NULL){ global $bdd; // permet d'utiliser la variable $bdd dans la fonction //exécution de la requête try{ $requete = $bdd->prepare($sql); $requete->execute($datas); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($aadh,$mois,$jour); exit(0); // en cas d'erreur.. arrête le script ! } return $requete; } /** *Suppression du message reçu */ function deleteMessage_recu($idmess,$iddest){ $sql = "DELETE FROM cdc_destinataires WHERE idmess = :idmess AND iddest = :iddest"; $datas = array(':idmess'=>$idmess,':iddest'=>$iddest); return executeQuery($sql,$datas); } /** *Suppression du message expédié */ function deleteMessage_exp($idmess,$idexp){ $sql = "DELETE FROM cdc_message WHERE idmess = :idmess AND idexp = :idexp"; $datas = array(':idmess'=>$idmess,':idexp'=>$idexp); return executeQuery($sql,$datas); } //-----------------------------------------------------------------------------// // Récupération PROPRE des variables AVANT de les utiliser ! //-----------------------------------------------------------------------------// $idmess = !empty($_GET['idmess']) ? $_GET['idmess'] : NULL; $idexp = !empty($_GET['idexp']) ? $_GET['idexp'] : NULL; $iddest = !empty($_GET['iddest']) ? $_GET['iddest'] : NULL; //début du script : if($idmess && $iddest){ if(deleteMessage_recu($idmess,$iddest)){ echo "<span class='success'>Ton message à été supprimé.</span>"; } }else{ echo "<span class='error'>Erreur lors de la suppression !</span>"; } if($idmess && $idexp){ if(deleteMessage_exp($idmess,$idexp)){ echo "<span class='success'>Ton message à été supprimé.</span>"; } }else{ echo "<span class='error'>Erreur lors de la suppression !</span>"; }
Mais bon... la deuxième requête pose problème ....
Si la personne qui à reçu le message veut le conserver.. celui-ci sera quand même supprimé....
EDIT : Requêtes corrigées
Bonjour,
J'ai essayé de faire comme ça mais je ne suis pas de sur que j'ai bien et tout compris. Ca à l'air de fonctionner mais je ferai d'autres essais demain, là il se fait tard, je te remercie.
et le lien de suppression
J'ai essayé de faire comme ça mais je ne suis pas de sur que j'ai bien et tout compris. Ca à l'air de fonctionner mais je ferai d'autres essais demain, là il se fait tard, je te remercie.
$PARAM = array ( 'IDMESS' => isset($_REQUEST['idmess']) ? $_REQUEST['idmess'] : NULL, 'IDEXP' => isset($_REQUEST['idexp']) ? $_REQUEST['idexp'] : NULL, 'IDDEST' => isset($_REQUEST['iddest']) ? $_REQUEST['iddest'] : NULL ); if ($PARAM['IDEXP'] == !NULL) { $sql = "DELETE FROM cdc_destinataires WHERE cdc_destinataires.iddest = '".$_SESSION['idpers']."' AND cdc_destinataires.idmess = ".$PARAM['IDMESS'].""; try { $requete = $bdd->prepare($sql); $requete->execute(); } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); exit(0); // en cas d'erreur.. arrête le script ! } } if ($PARAM['IDDEST'] == !NULL) { $sql2 = "DELETE FROM cdc_messages WHERE cdc_messages.idexp = '".$_SESSION['idpers']."' AND cdc_messages.idmess = ".$PARAM['IDMESS'].""; try { $requete2 = $bdd->prepare($sql2); $requete2->execute(); } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); exit(0); // en cas d'erreur.. arrête le script ! } } $success = "<span class='success'>Ton message à été supprimé.</span>"; echo '<br/>'; echo $success;
et le lien de suppression
echo '<td width="5%" align="center"><a href="_mess_supp.php?idexp='.$donnees->idexp.'&idmess='.$donnees->idmess.'"><img src="img/supprimer.png" alt="Supprimer ce message" title="Supprimer ce message" border="0"></a></td>';
j'ai cette erreur....
Erreur lors de la suppression ! Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'D WHERE D.idmess = '22' AND D.idexp = '2'' at line 1
Bonjour,
Oui comme tu l'a dit.
Si la personne qui à reçu le message veut le conserver.. celui-ci sera quand même supprimé....
C'est justement cela que je voulais éviter en fait.
Merci
Oui comme tu l'a dit.
Si la personne qui à reçu le message veut le conserver.. celui-ci sera quand même supprimé....
C'est justement cela que je voulais éviter en fait.
Merci
Tu nous rappelles la structure de tes tables ?
Je pense qu'il y a un défaut de conception.... car tu ne peux pas supprimer le message (côté expéditeur) sans le supprimer pour tout le monde...
A la limite.. au lieu de le supprimer.. tu ajoutes un champ dans ta table (que tu pourrais nommer "hide" qui, si il est égale à 1, masque l'affichage du message à l'expéditeur. (au lieu de le supprimer).
Il faudra ensuite modifier la requête de récupération des messages pour prendre en compte ce nouveau critère.
Je pense qu'il y a un défaut de conception.... car tu ne peux pas supprimer le message (côté expéditeur) sans le supprimer pour tout le monde...
A la limite.. au lieu de le supprimer.. tu ajoutes un champ dans ta table (que tu pourrais nommer "hide" qui, si il est égale à 1, masque l'affichage du message à l'expéditeur. (au lieu de le supprimer).
Il faudra ensuite modifier la requête de récupération des messages pour prendre en compte ce nouveau critère.
Bonjour,
En fait je vais changer la structure des tables de ma messagerie afin de pouvoir faire des liens pour la suppression des messages envoyés et reçus.
Merci.
En fait je vais changer la structure des tables de ma messagerie afin de pouvoir faire des liens pour la suppression des messages envoyés et reçus.
Merci.
Dans l'idéal ... il devrait avoir une seule table dans laquelle il aurait :
id (id autoincrémenté)
id_expediteur
id_destinataire
sujet
message
date_envoie
etat (lu ou pas)
Donc.. pour chaque message envoyé... il "duplique" le contenu du sujet et du message ce qui fait que :
- Lorsque l'id de l'utilisateur est le même que celui de l'expéditeur... c'est que c'est un message "envoyé"
- Lorsque l'id de l'utilisateur est le même que celui de l'id_destinataire... c'est que c'est un "reçu"
- La suppression se gère uniquement par l'id autoincrémenté
Comme dans une vraie messagerie en faite....
Ce qui fait que tu peux supprimer des messages (reçus ou envoyés) sans que ça ne se répercute chez les autres....
id (id autoincrémenté)
id_expediteur
id_destinataire
sujet
message
date_envoie
etat (lu ou pas)
Donc.. pour chaque message envoyé... il "duplique" le contenu du sujet et du message ce qui fait que :
- Lorsque l'id de l'utilisateur est le même que celui de l'expéditeur... c'est que c'est un message "envoyé"
- Lorsque l'id de l'utilisateur est le même que celui de l'id_destinataire... c'est que c'est un "reçu"
- La suppression se gère uniquement par l'id autoincrémenté
Comme dans une vraie messagerie en faite....
Ce qui fait que tu peux supprimer des messages (reçus ou envoyés) sans que ça ne se répercute chez les autres....
Bonjour,
Merci pour vos retours
J'ai essayé de faire cela en fait...Je n'ai pas testé pour l'instant vous en pensez quoi je trouve ça peut-être cohérent non ??
Merci pour vos avis.
1 table expediteur
idmess
idexp
1 table destinataire
idmess
iddest
lumess
1 table message
idmess
date_envoie
titre
message
Merci pour vos retours
J'ai essayé de faire cela en fait...Je n'ai pas testé pour l'instant vous en pensez quoi je trouve ça peut-être cohérent non ??
Merci pour vos avis.
1 table expediteur
idmess
idexp
1 table destinataire
idmess
iddest
lumess
1 table message
idmess
date_envoie
titre
message
Bonjour,
En fait là avec une requète DELETE chaque destinataire peut se supprimer son iddest et son idmess et idem pour les expéditeurs comme cela les messages sont conservés dans la table cdc_messages enfin je cois je n'ai pas encore fait la page supprimer.
En fait là avec une requète DELETE chaque destinataire peut se supprimer son iddest et son idmess et idem pour les expéditeurs comme cela les messages sont conservés dans la table cdc_messages enfin je cois je n'ai pas encore fait la page supprimer.
je ne comprends pas ce que tu veux dirre... par exemple si je fait cette requète cela me supprime l'expéditeur d'un message données non? n'oublions pas je suis débutant donc pas sur de moi merci.
<?php if (isset($_SESSION['idpers']) && $_SESSION['idpers'] != NULL) { $PARAM = array ( 'IDMESS' => isset($_REQUEST['idmess']) ? $_REQUEST['idmess'] : NULL, 'IDEXP' => isset($_REQUEST['idexp']) ? $_REQUEST['idexp'] : NULL, ); $sql2 = "DELETE FROM cdc_expediteurs WHERE cdc_expediteurs.idexp = '".$_SESSION['idpers']."' AND cdc_expediteurs.idmess = ".$PARAM['IDMESS'].""; try { $requete2 = $bdd->prepare($sql2); $requete2->execute(); } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); exit(0); // en cas d'erreur.. arrête le script ! } $success = "<span class='success'>Ton message à été supprimé.</span>"; echo '<br/>'; echo $success; } else { redir("index.php"); } ?>
oui je préfére que le destinataire ou l'expéditeur si ils veulent supprimer un message ils n'ont plus acces aux messages ni qui leur a envoyé. Car de toute manière si ils ne voient plus le message quel importance de savoir qui leur a envoyé de toute façon ils n'ont plus accès au contenu, bref je verrai cela comme ça.
oui je n'avait pas pensé à tout ça, alors je vais reprendre ton post précédent à savoir....
j'ai 1 table destinataire
1 table expéditeur
1 table message
je rajoute 1 champ à la table cdc_destinataires => hidedest
je rajoute 1 champ à la table cdc expediteurs => hideexp
tu peux m'aider à partir de là s'il te plait.
Quel type dois je mettre pour ces champs.
Je te remercie.
j'ai 1 table destinataire
1 table expéditeur
1 table message
je rajoute 1 champ à la table cdc_destinataires => hidedest
je rajoute 1 champ à la table cdc expediteurs => hideexp
tu peux m'aider à partir de là s'il te plait.
Quel type dois je mettre pour ces champs.
Je te remercie.
ok merci je vais regarder tout ça.