IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Formulaire avec pièce jointe ne fonctionne pas [Fait]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Formulaire avec pièce jointe ne fonctionne pas
    Bonjour a tous! j'ai mis du temps a me décider a venir sur un forum pour cette histoire de formulaire, mais bon, vu que je débute dans le php, ben j'ai du mal a m'en sortir seul... donc me voilà!
    J'ai passé 2aprèmes entieres a chercher du code qui créerait un formulaire qui m'enverrait le contenu d'une zone texte, et une pièce jointe.
    Or, j'ai réussi a ce que l'envoi du mail se fasse, mais la pièce jointe bloque...
    D'un coté, j'ai le formulaire et son php qui envoie correctement le mail (avec message) et de l'autre coté, j'ai un autre formulaire et son php qui envoie un tas d'info mais surtout une pièce jointe, et ca marche.

    J'ai essayé d'integrer pas a pas la mise en forme de mon propre formulaire dans celui qui fonctionne avec la pièce jointe, mais rien a en tirer... J'ai fait des centaines de tests pour reperer d'ou venaient les erreurs, et je suis tombé sur des constatation désolantes... Exemple : quand je déclare un champ du formulaire en type="hidden", le mail ne s'envoie plus... Donc, vous restez mon seul espoir!
    Je précise que j'ai créer mon formulaire perso avec Dreamweaver 8.

    Je suis conscient qu'il y a surement du code inutile dans tout mon charabia mais j'ai préféré ne pas enlever des trucs qui pourraient être vital...

    Voici le formulaire de mon mail qui marche answer.php :
    (Désolé de mettre la déclaration de chaque calque, mais je préfère ne rien laisser au hasard...)

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Answer By Tiss</title>
    <style type="text/css">
    <!--
    textarea {
    color:white;
    font-family:cruiser;
    font-size:18px;
    padding:1cm;
    }
    body,td,th {
            font-family: Impact;
            font-size: 24px;
            color: #FFFFFF;
            background-image: url(berserk.jpg);
    }
    body {
            background-color: #000000;
            background-image: url();
            margin-left: 0px;
            margin-top: 0px;
            margin-right: 0px;
            margin-bottom: 0px;
    }
    #Layer1 {
            position:absolute;
            width:200px;
            height:115px;
            z-index:1;
            left: 203px;
            top: 89px;
    }
    #Layer2 {
            position:absolute;
            width:477px;
            height:528px;
            z-index:2;
            left: 20px;
            top: 63px;
            visibility: visible;
    }
    #Layer3 {
            position:absolute;
            width:200px;
            height:115px;
            z-index:1;
            left: 17px;
            top: 84px;
            visibility: visible;
    }
    -->
    </style>
    <script type="text/javascript">
    <!--
    function MM_reloadPage(init) {  //reloads the window if Nav4 resized
      if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
        document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
      else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
    }
    MM_reloadPage(true);
    //-->
    </script>
    </head>
     
    <body>
     
    <div id="Layer2">
     
    <form method="post" action="mail.php">
     
    <p>
    <input type="hidden" name="votremail" value="NomFixeDeLExpediteur@aol.com"/>
     
    <!-- Valeur par défaut de l'objet du mail -->
    <input type="hidden" name="objet" value="Le Tiss a répondu!" />
    </p>
     
    <p>
      <textarea cols="54" rows="16" style="background-image: url(berserk.jpg)" name="message"></textarea>
    </p>
    <p>
    <input name="attach" type="file" size="16" maxlength="5000000"/>
    </p>
     
    <p>
    	<input type="submit" value="Envoyer" />
    </p>
     
    	</form>
     
    	</div>
    </div>
    <div id="Layer3">
    <center>
      <table width="1024" height="768" border="3" bordercolor="#FFFFFF">
        <tr>
          <td width="954" height="70">&nbsp;</td>
        </tr>
      </table>
    </center>
    </div>
    </body>
    </html>

    Et son morceau de PHP mail.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
    // La variable $verif, va nous permettre d'analyser si la sémantique de l'email est bonne
    $verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";
     
    // On assigne et protége nos variables
    $votremail=$_POST["votremail"];
    $from=htmlentities("From: ".$votremail);
    $message=stripslashes(htmlentities($_POST["message"]));
     
    // On met ici notre email
    $destinataire="MonNom@aol.com";
     
    /* On place le sujet du message qui ici sera toujours le même
    puisque dans la partie Html on l'a mis en caché grace au type="hidden";) avec comme valeur "Vous avez un nouveau message"  */
    $objet=$_POST['objet'];
     
    // C'est bon on est OK, vérifions si l'email est valide, grâce à notre sympathique REGEX
    if(!preg_match($verif,$votremail))
    {
            echo "Votre email n'est pas valide";
    }
     
    // On verifie si il y a un message
    elseif (trim($message)=="")
    {
            echo "Y'en a marre des messages vides !";
    }
     
    // Si tout est OK on envoie l'email
    else
    {
            mail($destinataire,$objet,$message,$from);
            header("Location: http://nomdedomaine.ifrance.com");
    }
     
    ?>
    Et voici le formulaire glané sur le net contact.php :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <form method=POST action="formmail.php" enctype="multipart/form-data">
    Adresse : <br><input name="adresse" size=40 value=""><br>
    CC : <br><input name="cc" size=40 value=""><br>
    BCC : <br><input name="bcc" size=40 value=""><br>
    Sujet : <br><input name="subject" size=40 value=""><br>
    Message : <br>
    <Textarea name="msg" cols=40 rows=10 WRAP=HARD>
    </TextArea><br>
    Fichiers : <br>
    <input type=file size=40 name="attach"><br><br>
    <center><input type=submit value="Envoyer"></center>
    <input type=hidden name="message" value=1>
    </form>

    Ainsi que son morceau de PHP formmail.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?
      $headers = "From: Votre Nom <monnom@mondomaine.com>\n";
      $headers .= "X-Sender: <monnom@mondomaine.com>\n";
      $headers .= "X-Mailer: PHP\n";
      $headers .= "X-Priority: 3\n";
      $headers .= "Return-Path: <monnom@mondomaine.com>\n";
      $headers .= "cc:".$cc."\n";
      $headers .= "bcc:".$bcc."\n";
      if (is_uploaded_file($attach)) {
        $file = fopen($attach, "r");
        $contents = fread($file, $attach_size);
        $encoded_attach = chunk_split(base64_encode($contents));
        fclose($file);
     
        $headers .= "MIME-version: 1.0\n";
        $headers .= "Content-type: multipart/mixed; ";
        $headers .= "boundary=\"Message-Boundary\"\n";
        $headers .= "Content-transfer-encoding: 7BIT\n";
     
        $body_top = "--Message-Boundary\n";
        $body_top .= "Content-type: text/plain; charset=US-ASCII\n";
        $body_top .= "Content-transfer-encoding: 7BIT\n";
        $body_top .= "Content-description: Mail message body\n\n";
     
        $msg_cpl = $body_top.stripslashes($msg);
     
        $msg_cpl .= "\n\n--Message-Boundary\n";
        $msg_cpl .= "Content-type: $attach_type; name=\"$attach_name\"\n";
        $msg_cpl .= "Content-Transfer-Encoding: BASE64\n";
        $msg_cpl .= "Content-disposition: attachment; filename=\"$attach_name\"\n\n";
        $msg_cpl .= "$encoded_attach\n";
        $msg_cpl .= "--Message-Boundary--\n";
      }
      if (mail ("$adresse","".stripslashes($subject)."","$msg_cpl",$headers)) {
        echo ("<center><font color=green>Mail envoyé</font></center>");
      }
    ?>
    Et pour finir, voila ce que j'ai essayé d'en faire pour concilier les 2, histoire que ca vous donne une idée de ce que je veux réaliser a la fin, si je n'ai pas été très clair...

    J'ai utilisé mon formulaire perso answer.php posté plus haut et voici le morceau de php correspondant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    <?php
    // La variable $verif, va nous permettre d'analyser si la sémantique de l'email est bonne
    $verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";
     
    // On assigne et protége nos variables
    $votremail=$_POST["votremail"];
    $from=htmlentities("From: ".$votremail);
    $message=stripslashes(htmlentities($_POST["message"]));
     
    // On met ici notre email
    $destinataire="MonNom@aol.com";
     
    /* On place le sujet du message qui ici sera toujours le même
    puisque dans la partie Html on l'a mis en caché grace au type="hidden";) avec comme valeur "Vous avez un nouveau message"  */
    $objet=$_POST['objet'];
     
    if 	(!is_uploaded_file($attach))
    {	
    	mail($destinataire,$objet,$message,$from);
        header("Location: http://NomDeDomaine.ifrance.com");
    }
     
    elseif	(is_uploaded_file($attach)) {
        	$file = fopen($attach, "r");
        	$contents = fread($file, $attach_size);
        	$encoded_attach = chunk_split(base64_encode($contents));
        	fclose($file);
     
        $headers .= "MIME-version: 1.0\n";
        $headers .= "Content-type: multipart/mixed; ";
        $headers .= "boundary=\"Message-Boundary\"\n";
        $headers .= "Content-transfer-encoding: 7BIT\n";
     
        $body_top = "--Message-Boundary\n";
        $body_top .= "Content-type: text/plain; charset=US-ASCII\n";
        $body_top .= "Content-transfer-encoding: 7BIT\n";
        $body_top .= "Content-description: Mail message body\n\n";
     
        $msg_cpl = stripslashes($message);
     
        $msg_cpl .= "\n\n--Message-Boundary\n";
        $msg_cpl .= "Content-type: $attach_type; name=\"$attach_name\"\n";
        $msg_cpl .= "Content-Transfer-Encoding: BASE64\n";
        $msg_cpl .= "Content-disposition: attachment; filename=\"$attach_name\"\n\n";
        $msg_cpl .= "$encoded_attach\n";
        $msg_cpl .= "--Message-Boundary--\n";
      }
      if (mail ($destinataire,$objet,$msg_cpl,$headers)) {
        echo ("<center><font color=green>Mail envoyé</font></center>");
      }
     
    // C'est bon on est OK, vérifions si l'email est valide, grâce à notre sympathique REGEX
    elseif(!preg_match($verif,$votremail))
    {
            echo "Votre email n'est pas valide";
    }
     
    // On verifie si il y a un message
    elseif	(trim($message)=="")
    {
            echo "Y'en a marre des messages vides !";
    }
     
    ?>
    Merci par avance!

  2. #2
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut et bienvenue dans les forums de Developpez.com !


    Je veux bien t'aider, mais je ne travaille pas ainsi (avec DreamWeaver). Je vais au plus simple. Voici le code de ton formulaire que tu pourras ensuite embellir si tu veux. Je procède par étape pour que tu ne sois pas trop perdu. Tu remarqueras surtout les 2 parties de mon code :
    - En haut, le code PHP du traitement du formulaire
    - En bas, le code HTML du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    if(isset($_POST['votremail'])){
     
       // <-- CODE DU TRAITEMENT ICI -->   
     
    }
    ?>
     
    <form method="post" action="" enctype="multipart/form-data">
      <input type="text" name="votremail" value="NomFixeDeLExpediteur@aol.com"/><br/>
      <input type="text" name="subject" value="Le Tiss a répondu!"/><br/>
      <textarea cols="54" rows="16" name="message"></textarea><br/>
      <input name="attach" type="file"/>
      <input type="hidden" name="MAX_FILE_SIZE" value="2000000"/><br/> 
      <input type="submit" value="Envoyer"/><br/>
    </form>
    La propriété "action" est vide pour que le script s'appelle lui-même à la validation du formulaire...



    Dans la partie traitement en PHP, tu va commencer par ajouter l'upload du fichier (pièce jointe). Le code le plus simple que je connais est celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set_time_limit(0);
    if(!is_uploaded_file($_FILES['attach']['tmp_name']))
      echo('Erreur : Fichier non téléchargé!');

    Une fois que le fichier est téléchargé, tu envoi le mail avec PHPMAILER.
    • Télécharge cette classe -> ICI
    • Ajoute-la dans ton script avec Require_once('class.phpmailer.php'); en faisant attention d'installer ce fichier à la racine de ton programme...


    Au final, cela te donne donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
    Require_once('class.phpmailer.php');
     
    if(isset($_POST['votremail'])){
     
      set_time_limit(0);
      if(is_uploaded_file($_FILES['attach']['tmp_name'])){
        $mail = new PHPmailer();
        $mail->IsSMTP();
        $mail->IsHTML(true);
        $mail->Host='hote_smtp';
        $mail->From='votre@adresse';
        $mail->AddAddress($_POST['votremail']);
        $mail->AddReplyTo('votre@adresse');	
        $mail->Subject=$_POST['subject'];
        $mail->Body=htmlentities($_POST['message']);
        $mail->AddAttachment($_FILES['attach']['tmp_name']);
        if(!$mail->Send())
          echo $mail->ErrorInfo; else
          echo 'Mail envoyé avec succès';
        $mail->SmtpClose();
        unset($mail);
      }else echo ('Erreur : Pièce jointe non téléchargée!');
     
    }
    ?>
     
    <form method="post" action="" enctype="multipart/form-data">
      <input type="text" name="votremail" value="NomFixeDeLExpediteur@aol.com"/><br/>
      <input type="text" name="subject" value="Le Tiss a répondu!"/><br/>
      <textarea cols="54" rows="16" name="message"></textarea><br/>
      <input name="attach" type="file"/>
      <input type="hidden" name="MAX_FILE_SIZE" value="2000000"/><br/> 
      <input type="submit" value="Envoyer"/><br/>
    </form>
    J'ai fait ce code de tête, je ne l'ai pas testé, mais je suis confiant, ça devrait marcher.
    Si tu veux ajouter des trucs et que tu bloques, demande moi, à+


    [EDIT] J'ai retrouvé ce sujet où j'explique en détails le formulaire d'upload...
    De retour parmis vous après 10 ans!!

  3. #3
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Le probleme persiste...
    Je tiens tout d'abord à te remercier de bien vouloir me venir en aide!!!

    J'ai donc essayer le code que tu m'a proposé, en enlevant les 3 fonctions smtp car la fonction mail() fonctionne sur mon serveur.

    J'ai fait quelques modifications pour renseigner les adresses, et il y a 2 issues, et 2 problemes. Soit je veux envoyer le formulaire sans uploader de fichier, et un message d'erreur me dit "Erreur : Pièce jointe non téléchargée!" Ce qui est plutot embetant, car l'envoi de pièce jointe devrait etre facultatif...

    Le 2eme probleme est lors de l'envoi du formulaire avec pièce jointe, un message d'erreur me dit : "Could not instantiate mail function."
    (Pour info, je me suis renseigné pour savoir ce que signifiait "instantiate", aucun traducteur en ligne n'a pu me le dire, et donc j'ai cherché ce terme dans le code du fichier class.phpmailer.php et je l'ai trouvé écrit une fois, mais ca ne m'avance pas vraiment... peut etre que toi si!?)

    Je te montre mon code fignolé, pour que tu puisses décelé le probleme!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <?php
    Require_once('class.phpmailer.php');
     
    if(isset($_POST['votremail'])){ // 1) La, j'aimerais savoir s'il faut laisser l'adresse de l'expediteur ou du destinataire? 
     
      set_time_limit(0);
      if(is_uploaded_file($_FILES['attach']['tmp_name'])){
        $mail = new PHPmailer();
        $mail->IsHTML(true);
        $mail->From='votremail'; // 2) Ici, je renseigne bien l'adresse de l'expediteur!?
        $mail->AddAddress($_POST['destinataire@aol.com']); // 3) Ici, l'adresse du destinataire
        $mail->AddReplyTo('votremail');	// 4) Et ici, l'adresse de l'expediteur pour qu'il soit alerter si son mail a connu une erreur!?
        $mail->Subject=$_POST['subject'];
        $mail->Body=htmlentities($_POST['message']);
        $mail->AddAttachment($_FILES['attach']['tmp_name']);
        if(!$mail->Send())
          echo $mail->ErrorInfo; else
          echo 'Mail envoyé avec succès';
        unset($mail);
      }else echo ('Erreur : Pièce jointe non téléchargée!');
     
    }
    ?>
     
    <form method="post" action="" enctype="multipart/form-data">
      <input type="text" name="votremail" value="expediteur@aol.com"/><br/> <!-- Je crois que ce passage t'a induit en erreur car c'est assez spécial... En fait, l'expediteur du mail sera toujours la meme personne. Alors n'étant pas sur qu'il ne faille le préciser uniquement dans le php, je l'ai mis ici en type=hidden pour que l'expediteur soit toujours le meme. Je suppose donc que tu n'avais pas compris ma démarche, donc j'ai essayé de mettre mon adresse a peu pres partout pour etre sur de recevoir le formulaire sur ma boite mail, mais rien du tout... -->
      <input type="text" name="subject" value="Le Tiss a répondu!"/><br/>
      <textarea cols="54" rows="16" name="message"></textarea><br/>
      <input name="attach" type="file"/>
      <input type="hidden" name="MAX_FILE_SIZE" value="2000000"/><br/> 
      <input type="submit" value="Envoyer"/><br/>
    </form>
    Voila, j'ai bien copier class.phpmailer.php dans la racine de mon répertoire, la ou se trouve également la page de mon formulaire, mais rien ne fonctionne...
    A un moment, un essai a marché, le mail m'a inscrit qu'il s'était bien envoyé, et d'ailleurs c'est l'expediteur fixe de mon mail qui l'a recu, mais il m'a dit que le mail était illisible, et il n'y avait pas de pièce jointe... que faire??
    Merci par avance!

  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Oui, à ce niveau ce n'est plus trop de l'aide, mais limite de la sous-traitance...
    As-tu lu ces 2 tutoriels ?

    http://antoine-herault.developpez.co...ls/php/upload/

    http://stephaneey.developpez.com/tut...php/phpmailer/

    Je n'aurais pas le temps avant ce soir d'essayer mon code pour trouver les bugs et les failles de sécurité.
    De retour parmis vous après 10 ans!!

  5. #5
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Sub0
    Oui, à ce niveau ce n'est plus trop de l'aide, mais limite de la sous-traitance...
    As-tu lu ces 2 tutoriels ?

    http://antoine-herault.developpez.co...ls/php/upload/

    http://stephaneey.developpez.com/tut...php/phpmailer/

    Je n'aurais pas le temps avant ce soir d'essayer mon code pour trouver les bugs et les failles de sécurité.
    C'est remoi, et pas mécontent!!!
    Ton code était bon en fait, mais il fallait trifouiller quelques trucs qui n'était pas préciser dans le tuto de phpmailer, mais j'y suis arrivé, grace a toi, et je te remercie beaucoup beaucoup!!! J'avais posté mon probleme sur 3 forums differents et celui ci a fait la différence!

    Encore merci de ton aide, et voici le code pour ceux que ca interesserait!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <?php
    Require_once('class.phpmailer.php');
     
    if(isset($_POST['destinataire'])){
     
      set_time_limit(0);
      if(is_uploaded_file($_FILES['attach']['tmp_name'])){
        $mail = new PHPmailer();
        $mail->IsHTML();
        $mail->From='expediteur';
        $mail->AddAddress($_POST['destinataire']);
        $mail->AddReplyTo('expediteur');	
        $mail->Subject=$_POST['subject'];
        $mail->Body=htmlentities($_POST['message']);
        $mail->AddAttachment($_FILES['attach']['tmp_name']);
        if(!$mail->Send())
          echo $mail->ErrorInfo; else
          header("Location: http://*****.com");
        unset($mail);
      }elseif(!empty($destinataire)){
      	$mail = new PHPmailer();
        $mail->IsHTML();
        $mail->From='expediteur';
        $mail->AddAddress($_POST['destinataire']);
        $mail->AddReplyTo('expediteur');	
        $mail->Subject=$_POST['subject'];
        $mail->Body=htmlentities($_POST['message']);
        if(!$mail->Send())
          echo $mail->ErrorInfo; else
          echo 'Mail envoyé avec succès';
        unset($mail);
    	}
     
    }
    ?>
     
    <form method="post" action="" enctype="multipart/form-data">
      <input  type="text" name="expediteur" value=""/><br/>
      <input  type="text" name="destinataire" value=""/><br/>
      <input type="text" name="subject" value=""/><br/>
      <textarea cols="54" rows="16" name="message"></textarea><br/>
      <input name="attach" type="file"/>
      <input type="hidden" name="MAX_FILE_SIZE" value="2000000"/><br/> 
      <input type="submit" value="Envoyer"/><br/>
    </form>

  6. #6
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Tu peux maintenant ajouter des tests pour vérifier les données postées avant l'envoi du mail...
    - Vérifier la syntaxe de l'adresse mail
    - Vérifier que le sujet du mail est bien défini
    - Vérifier que le texte du mail est bien défini
    - Vérifier le type du fichier ajouté
    etc... Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!isset($_POST['message'])) die('Vous devez saisir un message!');
    Autrement, tu devrais laisser les arobas devant les $_POST comme dans mon code, sinon, tu auras une erreur PHP si le champs n'est pas renseigné. Avec l'arobas, l'utilisateur ne sera pas obligé de saisir un message. En résumé, c'est soit tu vérifies le champs avec isset, soit tu laisses l'arobas.

    Ensuite, tu peux améliorer ce code en permettant l'ajoût de plusieurs pièces jointes si tu veux.

    N'oublis pas le tag
    De retour parmis vous après 10 ans!!

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Voici le code corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
    Require_once('class.phpmailer.php');
    set_time_limit(0);
     
    if(isset($_POST['destinataire'])){
     
      $mail = new PHPmailer();
      $mail->IsHTML();
      $mail->From='expediteur';
      $mail->AddAddress($_POST['destinataire']);
      $mail->AddReplyTo('expediteur');	
      // Sujet et texte du mail facultatifs
      $mail->Subject=@$_POST['subject'];
      $mail->Body=htmlentities(@$_POST['message']);
      // Pièce jointe facultative
      if(is_uploaded_file($_FILES['attach']['tmp_name']))
        $mail->AddAttachment($_FILES['attach']['tmp_name']);
      if(!$mail->Send())
        echo $mail->ErrorInfo; else
        echo 'Mail envoyé avec succès';
      unset($mail);  
    }
    ?>
     
    <form method="post" action="" enctype="multipart/form-data">
      <input  type="text" name="expediteur" value=""/><br/>
      <input  type="text" name="destinataire" value=""/><br/>
      <input type="text" name="subject" value=""/><br/>
      <textarea cols="54" rows="16" name="message"></textarea><br/>
      <input name="attach" type="file"/>
      <input type="hidden" name="MAX_FILE_SIZE" value="2000000"/><br/> 
      <input type="submit" value="Envoyer"/><br/>
    </form>
    De retour parmis vous après 10 ans!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] Mes mails avec pièce jointe ne fonctionnent que sur Gmail
    Par niconok dans le forum Langage
    Réponses: 0
    Dernier message: 21/06/2011, 10h09
  2. Réponses: 1
    Dernier message: 09/06/2011, 18h25
  3. Formulaire avec pièce jointe
    Par Bhidule dans le forum ASP
    Réponses: 8
    Dernier message: 23/04/2009, 15h08
  4. [RegEx] [Formulaire]= problème d'envoi de formulaire avec pièces jointes
    Par lyamarin dans le forum Langage
    Réponses: 22
    Dernier message: 03/04/2007, 13h29
  5. Envoyer formulaire avec pièce jointe
    Par Samanta dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/03/2006, 21h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo