Effacer text input apres l'action

  • Auteur de la discussion Auteur de la discussion kev
  • Date de début Date de début
Nouveau WRInaute
Bonjour

j'ai un projet qui fait appel à une api, tout fonctionne, j'ai créé un input pour renseigner une adresse mail et son bouton qui permet d'envoyer, actuellement quand je rendre l'adresse mail dans l'input, l'adresse mail reste dedans, ce qui fais que quand je recharge la page cela envoi également un mail, j'ai essayé plusieurs méthodes mais cela ne fonctionne pas (mon projet est en PHP pur, enfin presque) je vous présente le code en question


... debut tu code avec appel de l'API et mise en cache...

<div style="display: flex; align-items: center; gap: 10px;">
<label style="font-weight: bold;">Envoyer à :</label>
<input type="email" id="email_destination"
value="<?php echo htmlspecialchars($emailSaisi); ?>"
placeholder="exemple@mail.com"
style="padding: 10px; border: 1px solid #ccc; border-radius: 5px; width: 250px;">

<a href="#"
onclick="let mail = document.getElementById('email_destination').value;
if(mail == '') { alert('Veuillez saisir une adresse mail.'); return false; }
this.href='?action=send&date_debut=<?php echo $dateCible; ?>&destinataire=' + encodeURIComponent(document.getElementById('email_destination').value);"
style="padding: 10px 20px; background-color: #28a745; color: white; text-decoration: none; border-radius: 5px; font-weight: bold;">
Envoyer Mail
</a>
</div>

... suite du code pour former la mise en page d'un tableau de donné ...

$mailer = new Mailer([
'user' => $_ENV['SMTP_USER'],
'pass' => $_ENV['SMTP_PASS'],
'dest' => $emailSaisi
]);

if ($mailer->sendReport($dateCible, $nbTotal, $corpsMail)) {
header("Location: index.php?date_debut=$dateCible&destinataire=" . urlencode($emailSaisi) . "&sent=1");
exit;
}
}
}
if (isset($_GET['sent']) && $_GET['sent'] == 1) {
echo "<p style='color:green; font-weight:bold;'>Mail envoyé avec succès à : $emailSaisi</p>";
}
else {
echo "<h3>Aucune entreprise trouvée.</h3>";
}
?>
</body>
</html>
 
WRInaute passionné
Quand on envoie un formulaire, même juste une email, il faut utiliser <form action="" method="POST">.
Mettre une email dans une url, est une mauvaise pratique, à ne pas faire.
 
  • Like
Reactions: kev
Nouveau WRInaute
Quand on envoie un formulaire, même juste une email, il faut utiliser <form action="" method="POST">.
Mettre une email dans une url, est une mauvaise pratique, à ne pas faire.
Bonjour

D'accord je vais voir pour modifier, je debute dans le milieu

Est-ce que faire cette methode va régler mon probleme d'enregistrement ?
 
WRInaute passionné
Après sendReport() tu fais une redirection qui renvoie le paramètre "destinataire", il faut juste mettre :

header('Location: index.php?sent=1');
 
Dernière édition:
  • Like
Reactions: kev
Nouveau WRInaute
j'ai mis tout en place
<form action="" method="POST">
et
header('Location: index.php?sent=1'); // ligne 247

mais le mail reste afficher et j'ai un message
Warning: Cannot modify header information - headers already sent by (output started at (mon chemin local) on line 247 )
 
WRInaute impliqué
Ton script doit envoyer quelque chose (peut être un message d'erreur) avant l'instruction header('Location: index.php?sent=1');. Vu que les en-têtes doivent être envoyées avant le contenu, si ton script a déjà envoyé un truc, ça déclenche une erreur si tu envois une en-tête après (c'est trop tard).
 
WRInaute impliqué
Je regard un peu plus le script en détail, et c'est un peu le bazar. Rien de grave, tu débutes, c'est normal.

Apprends à bien séparer les choses, notamment la gestion du script de la sortie (et sur la sortie HTML, idéalement distinguer le HTML de la mise en forme). En gros, dans un premier temps tu analyses la requête, tu fais tous les appels à la BDD nécessaires ou aux fonctions internes, le cas échéant, et ensuite, si y'a pas de bug, tu commences à gérer la sortie (ici du HTML, mais ça pourrait être autre chose, notamment l'émission d'un code d'erreur, le stream d'un fichier, etc.).

Et même essayes de le faire dans des fichiers distincts, pour vraiment séparer les deux choses.
 
Nouveau WRInaute
Ton script doit envoyer quelque chose (peut être un message d'erreur) avant l'instruction header('Location: index.php?sent=1');. Vu que les en-têtes doivent être envoyées avant le contenu, si ton script a déjà envoyé un truc, ça déclenche une erreur si tu envois une en-tête après (c'est trop tard).
Donc le header('Location: index.php?sent=1'); je dois le placer juste après <form action="" method="POST"> ?

Au niveau du code, j'ai la possibilité d'envoyer par mail le tableau de donnée créer en dessous de mon bouton d'envoie de mail, j'ai mis une capture d'ecran
 

Fichiers joints

  • Capture d'écran 2026-02-11 154936.png
    Capture d'écran 2026-02-11 154936.png
    67.1 KB · Affichages: 2
Nouveau WRInaute
Je regard un peu plus le script en détail, et c'est un peu le bazar. Rien de grave, tu débutes, c'est normal.

Apprends à bien séparer les choses, notamment la gestion du script de la sortie (et sur la sortie HTML, idéalement distinguer le HTML de la mise en forme). En gros, dans un premier temps tu analyses la requête, tu fais tous les appels à la BDD nécessaires ou aux fonctions internes, le cas échéant, et ensuite, si y'a pas de bug, tu commences à gérer la sortie (ici du HTML, mais ça pourrait être autre chose, notamment l'émission d'un code d'erreur, le stream d'un fichier, etc.).

Et même essayes de le faire dans des fichiers distincts, pour vraiment séparer les deux choses.
oui j'ai fais du "code spaghetti" comme on dit, il faut que j'organise tous sa en plusieur dossiers et fichiers
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut