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 :

[Mail] Sécuriser formulaire mail


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut [Mail] Sécuriser formulaire mail
    Bonjour,

    Puisque je vois qu'aujourd'hui la mode est à la fonction mail(). Je m'en vais aussi poser ma question.

    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
    <?php 
    $texte="";
    if(isset($_POST['message'])){
     
      $dest="destinataire@mon-fai.com";
      $objet="E-mail d'un fan";
      $texte.= $_POST['message'];
      $entete="From:de@le-fai-de.com";
     
          if(mail($dest,$objet,$texte,$entete)){
              echo "<h1>Thanks, Merci ;-)</h1>";
          }
          else{
              echo "<h1>Error !!!!! :-(</h1>";
              }
    }
        ?>
    Je n'ai pas mis le code du formulaire, car il ne contient qu'un textarea et un boutton submit.

    Ma question est : Comment pourrais-je faire pour désactiver le boutton envoyer après l'envoie du formulaire ? J'ai essaié avec du javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="this.disabled=true;"
    mais ça ne marche pas, on dirait que la page se recharge à cause du if.

    Je me suis dis, que je pourrais mettre dans le bouttoninput type="submit" une variable à la place du submit et que quand on rentre dans la condition if, ça change la variable et donc la valeur du type.

    Je crois qu'il est temps pour un petit exemple : avant envoie $mavar="submit"; après envoie $mavar="hidden"; 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
    <?php 
    $mavar="submit";
    $texte="";
    if(isset($_POST['message'])){
      
          //les instruction qui vont bien...
         
          if(mail($dest,$objet,$texte,$entete)){
               $mavar="hidden";
               echo "<h1>Thanks, Merci ;-)</h1>";
          }
          //le else
    }
        ?>
    Mais malheureusement ça ne marche toujours pas
    Mais surtout comment désactiver le code dans mon formulaire mail ?

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    dans ton cas le code complet nous aiderai a t'eguiller parce la comme ça je vois pas ce qui cloche !
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 314
    Par défaut
    Tu pourrais créer dans ton formulaire un champ de type hidden avec 1 pour valeur au départ.
    Tu fais un test sur ce champ. S'il est égal à 1, tu affiches ton bouton submit avec disabled à false. S'il est égal à 0, tu mets le disabled à true Lors de la validation de ton formulaire tu mets la valeur du champ cachée à 0.

  4. #4
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    voilà le code de tout mon formulaire, comme vous pouvez le voir il est très basique.
    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
      <body>
        <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post" enctype="application/x-www-form-urlencoded">
          <center>
    <textarea cols="50" rows="5" name="message"></textarea>
            <br>
            <input type="<?=$submit?>"  onClick="this.form.submit();this.disabled=true;" name="envoie" value="Send/Envoyer">
          </center>
        </form>
    <?php 
    $texte="";
    $submit="submit";
    if(isset($_POST['message'])){
      $dest="mon-mail@mon-serveur.com";
      $objet="E-mail d'un fan";
      $texte.= $_POST['message'];
      $entete="From:de@mon-serveur.com";
          if(mail($dest,$objet,$texte,$entete)){
              $submit="hidden";
              echo "<h1>Thanks, Merci ;-)</h1>";
          }
          else{
              echo "<h1>Error !!!!! :-(</h1>";
              }
    }
        ?>
      </body>
    Voilà le problème est que quand je valide le fomulaire je reçois le mails et le echo"Thanks, Merci" s'affiche comme prévu par contre, il ne devient pas hidden ce qui est dommage, car on peut cliquer autant de foi qu'on veut sur le boutton submit ce qui est assez désagréable Sans parler du code qui est interprété dans mon textarea :-/

  5. #5
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="<?echo $submit ;?>"....

    ça ira bcp mieu
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  6. #6
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    Bonjour à tous et merci pour vos réponse,

    Pour une fois que je suis matinal j'ai pas le choix j'ai un exa sur java dans une semaine et j'ai une semaine pour me mettre tout le semestre dans la tête

    illegalsene merci pour ta réponse j'ai donc fait les testes que tu m'as dit et ça ne marchait toujours pas, jusqu'à ce que je me dise, mais c'est normal :-)
    Et c'est là que l'argument de RideKick prend toute ça splandeur, car il n'est pas vraiment juste, mais il m'a permis de comprendre.

    Si je mets un echo $submit dans mon champ input il ne me renverra jamais le résultat demandé, puisque la variable est vide à ce moment là et n'as jamais été crée(logique) Par contre on pourrait se dire ouai mais quand j'envoie le formulaire, elle est crée initialisé et son état change. Oui, mais non, car elle est crée seulement dans la partie qui traite le formulaire. Donc la réponse devient évidente :-)

    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
      <body>
    <?php 
    $texte="";
    $submit="submit";
    if(isset($_POST['message'])){
      $dest="mon-mail@mon-serveur.com";
      $objet="E-mail d'un fan";
      $texte.= $_POST['message'];
      $texte = htmlentities($texte);
      $entete="From:de@mon-serveur.com";
          if(mail($dest,$objet,$texte,$entete)){
              $submit="hidden";
              echo "<h1>Thanks, Merci ;-)</h1>";
          }
          else{
              echo "<h1>Error !!!!! :-(</h1>";
              }
    } 
    ?>
        <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post" enctype="application/x-www-form-urlencoded">
          <center>
    <textarea cols="50" rows="5" name="message"></textarea>
            <br>
            <input type="<? echo $submit; ?>"  onClick="this.form.submit();this.disabled=true;" name="envoie" value="Send/Envoyer">
          </center>
        </form>
     
      </body>
    Puis pour rajouter un peu plus de sécurité j'ai mis $texte=htmlentities($texte); croyez-vous que c'est suffisant pour éviter l'insertion de code dans mon mail ?

    Il faut dire aussi que de passé le input en HIDDEN n'est pas vraiment top car avec Firefox si on a la webdevelopper toolbar on peut éditer tout le champ caché et donc continuer à m'envoyer un million de spam
    Avez-vous d'autre suggestion ?

    En tout cas merci pour votre aide

  7. #7
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    Code php : 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
      <body>
    <?php 
    $texte="";
    $envoye="non";
    if(isset($_POST['message']) && $_POST['envoi'] == 'non'){
      $dest="mon-mail@mon-serveur.com";
      $objet="E-mail d'un fan";
      $texte.= $_POST['message'];
      $texte = htmlentities($texte);
      $entete="From:de@mon-serveur.com";
          if(mail($dest,$objet,$texte,$entete)){
              $envoye="oui";
              echo "<h1>Thanks, Merci ;-)</h1>";
          }
          else{
              echo "<h1>Error !!!!! :-(</h1>";
              }
    } 
    else
    {
    	echo "<h1>Vous avez déjà utilisé le formulaire pour envoyer un mail</h1>";
     
    }
    ?>
        <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post" enctype="application/x-www-form-urlencoded">
          <center>
    <textarea cols="50" rows="5" name="message"></textarea>
            <br>
            <input type="submit"  onClick="this.form.submit();this.disabled=true;" name="envoie" value="Send/Envoyer">
            <input type="hidden" name="envoi" value="<? echo $envoye ;?>">
          </center>
        </form>
     
      </body>

    ça peut etre une idee...
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

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

Discussions similaires

  1. Sécurisation formulaire mail
    Par Plout dans le forum Langage
    Réponses: 4
    Dernier message: 09/09/2011, 10h15
  2. [Mail] valider par mail un formulaire et fonction rand
    Par guillaume2vo dans le forum Langage
    Réponses: 2
    Dernier message: 17/09/2006, 20h37
  3. [dreamwever] adresse mail pour formulaire
    Par abibi dans le forum Dreamweaver
    Réponses: 5
    Dernier message: 19/04/2006, 12h19
  4. Formulaire mail et caractères accentués
    Par Yael dans le forum Langage
    Réponses: 13
    Dernier message: 30/03/2006, 09h41
  5. [Mail] envoie de mail formulaire
    Par sniperwolf dans le forum Langage
    Réponses: 7
    Dernier message: 17/10/2005, 16h18

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