Supprimer des anciennes données quand on en renseigne des nouvelles [Résolu]

Signaler
-
 Dwight -
Bonjour,

Alors c'est compliqué à expliquer mais c'est pas grave ahah.
J'ai un site internet avec une page spécifique pour l'admin qui lui permet d'envoyer des factures à ses clients et quand il clique sur un client pour lui envoyer un mail, il peut choisir un email secondaire pour envoyer par exemple une facture en copie au comptable de l'autre société ou quelque chose comme ça.

J'aimerai donc qu'a chaque fois que nous renvoyons un mail à un client en choisissant que une adresse, que l'adresse en secondaire rentré la dernière fois ce supprime, j'aimerai donc en gros qu'a chaque fois qu'on re remplie l'adresse d'une personne, les précédentes données ce supprime.

Je ne sais pas si vous m'avez totalement compris mais je suis à disposition si jamais vous avez des questions et je remercie déjà les personnes qui vont m'aider à avancer.

6 réponses

Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021
828
bonjour,
j'imagine qu'il suffit d'adapter la requête UPDATE.
>
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021

C'est ce bout de code dans une autre page où on renseigne les adresses mails :
<label for="email1">Email 1</label><br>
					<input type="email" class="form-control" name="email1" id="email1" value="<?php echo $client['mail'] ?>" style="width:400px; margin-left:auto; margin-right:auto" required>
					<br>
					<label for="email2">Email 2</label><br>
					<input type="email" class="form-control" name="email2" id="email2" value="<?php echo $client['mail2'] ?>" style="width:400px; margin-left:auto; margin-right:auto">
					<br>
					<label for="pieceJointe">Pièce jointe</label><br>
					<input type="file" class="form-control" name="pieceJointe" id="pieceJointe" style="width:400px; margin-left:auto; margin-right:auto" required>
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021
828 > Dwight
il serait utile que nous voyons l'ensemble de ton code. si il y a plusieurs fichiers, précise bien le nom de chaque fichier.
>
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021

Tout ceci est enregistré dans ma table "clients".

Les adresses mails, nous les écrivons à la main, nous n'enregistrons pas les adresses mails néanmoins nous enregistrons les "états des mails" c'est à dire que nous avons une petite colonne appelé "etatMail" qui permet de voir si le mail a été distribué ou non, par exemple, si le mail a été distribué, un rond gris va apparaîte et si le mail a été ouvert, un rond vert va se mettre. Les endroits ou je renseigne 2 mails on a du coup 2 ronds dans la colonne etatMail et si je renseigne 2 mails hier j'aurais 2 ronds et si je renvoie un mail aujourd'hui qu'a une seule adresse, elle va remplacer le premier rond mais le deuxième va rester et va garder les données (mail, date et heure) de hier. Le soucis c'est que pour certains clients, nous envoyons 1 mail par mois et seulement 2 ou 3 fois dans l'année nous renseignons une deuxième adresse mail, c'est pour ça qu'a chaque nouvelle saisie, j'aimerai supprimer les anciennes données.

Dans ma table "clients", le champ "dernierEnvoiMail" permet d'enregistrer la date et l'heure, le champ "dernierStatus" permet lui de renseigner si le mail a été distribué, ouvert, ... et permet de donnée le bon code couleur au rond et le champ "dernierStatus2" fait la même chose mais pour la deuxième adresses mails si elle est renseignée.
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021
828 > Dwight
est-ce le champ dernierStatus2 qui te pose problème?
>
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021

Le problème c'est que tout fonctionne très bien mais en gros j'aimerai qu'avant que je fasse l'UPDATE qui permet de changer les anciennes données par les nouvelles, j'aimerai faire une supression, un DELETE qui supprimerai les anciennes données avant de les remodifier avec le UPDATE
Messages postés
32064
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 avril 2021
3 395
Bonjour,

Le problème ... c'est que nous ne savons rien du code que tu utilises pour faire ce traitement ..... c'est pour ça que les réponses d'yg_be sont aussi évasives...
Si tu ne nous montres pas comment c'est fait ( le code.. ) IMPOSSIBLE de te répondre !


NB: Pour poster ton code tu devras utiliser les balises de code.
Explications ( à lire ENTIEREMENT !!! ) disponibles ici https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
>
Messages postés
32064
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 avril 2021

Regarde plus haut ce que j'ai répondu à yg_be, je ne sais pas exactement si c'est tout ce que tu me demandes.
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021
828 > Dwight
il serait utile que tu nous donnes la liste des champs de chacune des tables.
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021
828 > Dwight
ne devrais-tu pas plutôt utiliser la table statusEmails pour y récupérer la deuxième adresse pour chacun des mails envoyés?
>
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021

En fait tout est récupérer sur statusEmails et ça envoie par la suite ces infos dans ma table clients pour les afficher sur mon site
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021
828 > Dwight
"ça envoie par la suite ces infos": qui fait quoi comment quand?
satutsEmail va récupérer les infos de distribution, savoir si l'email a été ouvert ou distribué directement depuis l'appli mailjet (c'est l'appli qui nous permet d'envoyer ces mails) et les infos date et heure pour ensuite renvoyer ces infos à "clients" et la table clients étant liée à facturationMensuelles (ma page internet où j'affiche mes clients) va afficher sur ma page les petits ronds de couleurs avec la date, l'heure et le niveau de distribution du mail.
Messages postés
32064
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 avril 2021
3 395
C'est sacrément fouillis tes explications....

En plus.. j'ai d'avantage l'impression que c'est la façon de récupérer les données (pour afficher ou non les ronds.. ) que la façon d'insérer/supprimer d'éventuelles données...

Reprenons dans l'ordre :
En premier.... avec quel code affiches tu ta liste ( et les ronds ) ( code COMPLET ! et en précisant le nom du/des fichier(s) )



>
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021

Oui tu as bien compris !


dans le cas où le deuxième mail n'a pas été fournie, si une deuxième adresse avait déjà été fournie une fois que ce soit pour un test ou pour autre chose, le rond reste, j'aimerai donc que si je renvoie un mail à une même personne avec la quelle j'avais déjà envoyé un mail aux deux adresses, renseigné qu'une seule adresse et au lieu de laisser le deuxième rond par rapport à la dernière fois où j'avais fournie deux adresses, si je fournie qu'une seule adresse je voudrais que le deuxième rond de la deuxième adresse disparaisse. (Dans mes clients pour les quelles j'ai toujours renseigné qu'une seule adresse mail, ils n'ont qu'un rond mais imaginons si aujourd'hui je fournis les 2 adresses, il y aura deux ronds et imaginons qu'il y est 2 ronds aujourd'hui par rapport aux deux adresses mails, si dans 1 mois je voudrais renvoyer un mail mais que en renseignant une seule adresse, dans ma fiche des clients dans facturationMensuelle.php, j'aurais le premier rond avec la bonne date et la bonne adresse, mais j'aurais le deuxième rond de la dernière fois avec une date antérieure)

Donc le seul soucis que j'aimerai résoudre, ce serait de supprimer les anciennes données (etatMail) à chaque fois que je re remplis le formulaire pour ce client, comme ça, si le mois dernier j'avais envoyé un mail à l'adresse mail de mon client + à son comptable (du coup 2 ronds car 2 adresses mails) mais que aujourd'hui par exemple je dois envoyé un mail que à mon client et du coup je ne renseigne rien dans mon champ "mail2" de mon formulaire, qu'à la fin je n'ai qu'un seul rond et que ça supprime le mail du mois dernier que j'avais envoyé au comptable par exemple.
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021
828 > Dwight
quelle est la couleur (et le statut) dans le cas où le mail n'a pas été envoyé à la deuxième adresse parce qu'une deuxième adresse n'a pas été fournie?
c'est quoi "etatMail"?
>
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021

etatMail c'est la colonne dans ma fiche client ou je stock les ronds colorés, si le mail n'a pas été envoyé à la deuxième adresse, la couleur et l'état du deuxième rond de la dernière fois ne changera pas, il gardera son même statut, mais imaginons que j'envoie un mail à un client auquel je n'ai jamais envoyé de mail, si j'envoie sur une seule adresse j'aurais seulement un seul rond coloré.

Donc j'aimerai faire une requête qui permettrai d'effacer les anciennes données dès que j'en rentre des nouvelles, comme ça si j'efface les anciennes données où j'avais envoyé un mail à 2 adresses, si je dois renvoyé un mail qu'à une seule adresse, comme les anciennes données vont être supprimées, j'aurais qu'un seul rond qui s'affichera car les 2 ronds d'avant ont été supprimé juste avant
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021
828 > Dwight
le fichier publié sur google drive n'est pas public.
>
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021

Voici un autre lien pour ma page envoyerMailMens.php

https://drive.google.com/file/d/1WNrcybovsnqMXFsfa8Wku2mgKgPSVeEO/view?usp=sharing
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021
828
je pense que dans l'UPDATE de la ligne 104 de envoyerMailMens.php, il faut mettre à jour le champ dernierStatus2.
que contient-il pour les clients pour lesquels on n'a jamais utilisé la seconde adresse?
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021
828 > Dwight
il manque sans doute un point-virgule.
$sql = ' UPDATE clients SET dernierMailjetId = :dernierMailjetId, dernierStatus = :dernierStatus, dernierMailjetId2 = "", dernierStatus2 = "" WHERE id = :id ';
>
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021

Exactement, c'était tout simplement ça ahah :)

En tout cas merci, je buguer dessus depuis un long, très long moment.

Tu m'enlève une bonne épine du pied ahah merci milles fois :) <3
>
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021

Je t'avouerzi que je débute et que ça fais 2 jours que je suis bloqué sur ça, du coup si tu pourrais bien m'aider pour que je finisse enfin ce problème ce serais vraiment niquel :)
>
Messages postés
15104
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 avril 2021

Avec ce code, j'ai une erreur sur ma page et dès que j'essaye d'envoyer le mail, j'ai une page toute blanche avec écrit Erreur
> Dwight
J'ai placé ça comme ça ligne 104, peut être que je l'ai mal placé

$sql = " UPDATE clients "
    . " SET dernierMailjetId = :dernierMailjetId, dernierStatus = :dernierStatus "
             . " dernierMailjetId2 = NULL "
    . " WHERE id = :id "
        $stmt = $pdo->prepare($sql); 
        $stmt->bindValue(':id', (int)$_GET["id"], PDO::PARAM_INT);
        $stmt->bindValue(':dernierMailjetId', $messageId, PDO::PARAM_STR);
        $stmt->bindValue(':dernierStatus', $status, PDO::PARAM_STR);
        $stmt->execute();
        $stmt->closeCursor();
Messages postés
32064
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 avril 2021
3 395
Je pense que le code n'est pas bien pensé.
Et il manque, à mon avis, une table intermédiaire.

Il aurait fallu que tu stockes stockes dans une table chaque envoie ( mail simple ou mail avec copie )
La table pourrait être de la forme :
envoi ( id, date )
Puis, pour chaque adresse à laquelle tu as envoyer ton mail, que tu indiques l'id dans ta table statusEmails
Table qui aurait à minima, les colonnes
messageId, id_ennvoie (l'id de l'autre table), email

De cette façon, tu n'auras plus besoin d'avoir deux requête distinctes pour récupérer les infos
et ça limiterait également les requêtes dans des boucles php (chose à éviter au maximum ! )


Au niveau de ton code php .. il serait pas mal également de factoriser un peu et éviter de dupliquer ton code html inutilement..
par exemple, quand on voit
 if($res['dernierStatus'] == 'queued')
                        {
                        ?>
                        <span class="badge badge-primary" style="height:10px; width:10px" data-toggle="tooltip" data-placement="top" title="<?=$res['dernierEnvoiMail']?> - <?=$mailSent['email']?>"> </span>
                            <?php
                        }
                        ?>
                    <?php
                    if($res['dernierStatus'] == 'opened')
                    {
                        ?>
                        <span class="badge badge-success" style="height:10px; width:10px" data-toggle="tooltip" data-placement="top" title="<?=$res['dernierEnvoiMail']?> - <?=$mailSent['email']?>"> </span>
                        <?php
                    }
                    ?>

                    <?php
                    if($res['dernierStatus'] == 'sent')
                    {
                        ?>
                        <span class="badge badge-secondary" style="height:10px; width:10px" data-toggle="tooltip" data-placement="top" title="<?=$res['dernierEnvoiMail']?> - <?=$mailSent['email']?>"> </span>
                        <?php
                    }
                    ?>

(je n'ai pris que les premiers... )
On voit que la seule chose qui change.. c'est une CLASS
Tu aurais donc pu l'écrire plus proprement comme ceci
  switch($res['dernierStatus']){
                            case "queued":
                              $class = "primary";
                              break;
                          case "opened":
                              $class = "success";
                              break;    
                          case "sent":
                              $class = "secondary";
                              break;
                          //etc...
                            
    }
 ?>
<span class="badge badge-<?php echo $class;?>" 
  style="height:10px; width:10px;" 
  data-toggle="tooltip" 
  data-placement="top" 
  title="<?=$res['dernierEnvoiMail']?> - <?=$mailSent['email']?>"> 
</span>


ça fait moins fouillis non ?

De plus, vu que tu fais du PDO, applique ce qui est indqiué dans ce lien
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
Et aussi ça :
https://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Cordialement,
Jordane