Rechercher : dans
Par :

[PHP] header() après envoi de mail

Dernière réponse le 16 nov 2009 à 00:51:26 Aidez-moi, le 16 nov 2009 à 00:00:01 
 Signaler ce message aux modérateurs

Bonjour, je code un script de contact mais j'ai un gros problème pour évité le spam en réactualisant la page après l'envoi du mail j'utilise header(), mais comme je le mais pas en début sa fait une erreur.

J'aimerai savoir comment faire une redirection toujours en PHP pour remplacé header().

Configuration: Windows 7
Firefox 3.5.5

Meilleures réponses pour « [PHP] header() après envoi de mail » dans :
[PHP] Headers already sent by..... VoirLorsque vous utilisez une fonction PHP qui manipule les en-têtes HTTP comme par exemple: header() setcookie() session_start() Il est important d'utiliser ces fonctions avant d'avoir généré le moindre flux vers le client. A partir du moment où...
[PHP] Fonction mail() VoirLa fonction mail() est bloquée chez certains des hébergeurs gratuits pour des raisons de sécurité (afin d'éviter le spam notamment), l'adresse ip de la machine qui a demandé le script sera alors indiquée dans le header 'X-MM-Mail-From-IP'. renseignez...
[Langages] Envoyer un mail avec pièce jointe VoirLes mails, tout comme les pages web, sont livrés avec des en-têtes (headers en anglais). Ces en-têtes servent à donner quelques détails nécessaires comme l'adresse du destinataire, celle de l'envoyeur, la date de l'envoi, le sujet du mail etc. Elles...
PHP - Mail et fonctions réseau VoirPHP étant un langage consacré au Web, il possède bien évidemment des fonctions lui permettant de communiquer avec le "monde extérieur" à l'aide de fonctions standards. Le service le plus utilisé sur Internet étant la messagerie électronique, il est...

1

avion-f16, le 16 nov 2009 à 00:14:14

La fonction header, tout comme session_start, peut être appelée tant qu'aucun caractères n'a été envoyé, espace compris, via un echo/print/printf ou via l'extérieur des balises PHP.
Je ne vois pas où est le problème car normalement :
- Si le message est envoyé, tu fais une redirection : pas besoin d'afficher quoi que se soit
- Si il y a une erreur, alors tu affiches la page : pas de redirection. Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu­ lui dis de faire.

Répondre à avion-f16

2

Aidez-moi, le 16 nov 2009 à 00:17:11

Voila le code en gros :

Code HTML du kit graphique du haut.
<?php
// Vérification.
// ....
// Envoi du mail.
if(mail($my_mail, $mail_subject, $_POST['text'], 'From: '.$_POST['prenom'].'<'.$_POST['email'].'>'))
header('Location: http://www.google.fr/);
?>
Code HTML du kit graphique du bas.


Donc je suis obligé d'utiliser sa :s

Que faire ?

Répondre à Aidez-moi

3

avion-f16, le 16 nov 2009 à 00:18:56

Tu peux aussi faire comme ça :

<?php
// Vérification.
// ....
// Envoi du mail.
if(mail($my_mail, $mail_subject, $_POST['text'], 'From: '.$_POST['prenom'].'<'.$_POST['email'].'>')) {
    header('Location: http://www.google.fr/);
    die();
}
?>
Code HTML du kit graphique du haut.
Code HTML du kit graphique du bas.
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.

Répondre à avion-f16

4

Aidez-moi, le 16 nov 2009 à 00:21:10

Non car dans les vérifications, si ya une erreur sa affiche un message d'erreur et donc il faut que ce sois dans le kit graphique :S

Répondre à Aidez-moi

5

avion-f16, le 16 nov 2009 à 00:26:27

Euh... tu peux stocker les erreurs dans des variables puis les afficher par après ... Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu­ lui dis de faire.

Répondre à avion-f16

6

Aidez-moi, le 16 nov 2009 à 00:29:17

Un exemple de code ?

Répondre à Aidez-moi

7

Aidez-moi, le 16 nov 2009 à 00:31:08

Elseif(...)
echo '$toto = "<p style="color:red;">Erreur</span>"';

Comme cela ?

Répondre à Aidez-moi

8

avion-f16, le 16 nov 2009 à 00:38:47

Sans faire l'echo

<?php
/* Vérification */
$nbErreur = 0;

$erreurs = '<ul>'."\n";
if(empty($_POST['nom']) {
    $nbErreur++;
    $erreurs .= '<li>Le champ "nom" est vide</li>'."\n";
}
if(empty($_POST['prenom']) {
    $nbErreur++;
    $erreurs .= '<li>Le champ "prénom" est vide</li>'."\n";
}
$erreurs .= '</ul>';

if($nbErreur == 0)
    if(mail($my_mail, $mail_subject, $_POST['text'], 'From: '.$_POST['prenom'].'<'.$_POST['email'].'>')) {
        header('Location: http://www.google.fr/);
        die();
    } else {
        $erreurMail = 'Une erreur s\'est produite lors de l\'envoye du mail';
}
?>
Code HTML du kit graphique du haut.
<?php 
if($nbErreur == 0)
    if(empty($erreurMail)) { echo 'Mail envoyé'; }
    else { echo  $erreurMail; }
else {
    echo 'Il y a '.$nbErreur.' erreur(s) :<br/>'."\n".$erreurs;
}
?>
Code HTML du kit graphique du bas.
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.

Répondre à avion-f16

9

Aidez-moi, le 16 nov 2009 à 00:43:42

Merci beaucoup, cela fonctionne :)

Répondre à Aidez-moi

10

avion-f16, le 16 nov 2009 à 00:45:54

D'abord penses à cocher le cercle "Résolu" en haut.
Je l'ai fais, au cas où tu ne reviendrais pas Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.

Répondre à avion-f16

11

Aidez-moi, le 16 nov 2009 à 00:50:49

Je l'aurait fait, merci :)

Répondre à Aidez-moi

12

 avion-f16, le 16 nov 2009 à 00:51:26

Ouais mais avec les anonymes on est jamais trop sûr Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu­ lui dis de faire.

Répondre à avion-f16