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 e-mail traité sur la même page [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Formulaire e-mail traité sur la même page
    Bonjour,
    je suis nouveau ici, et débutant en php...

    Je voudrais créer un formulaire pour envoyer un mail, traité sur la même page, et qui affiche les erreurs après l'avoir envoyé (s'il y en a).
    Cependant la syntaxe du code est incorrect pour la fonction implode:

    avant <body>
    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
    if($_POST){
    	$nom = $_POST["nom"];
    	$email = $_POST["email"];
    	$message = $_POST["message"];
    	$subject = "formulaire contact de floue.net";
    	$erreurs = array();
    	if( empty($nom)) $erreurs = "il manque votre nom";
    	if( empty($email)) $erreurs = "il manque votre email";
    	if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$email)) $erreurs = "l'email n'est pas valide";
    	if( empty($message)) $erreurs = "il manque votre message";
    	if(empty($erreurs)) {
    		$from = $email;
    		$reply = $from; 
    		$to = "xxxxx(a)floue.net";
    		$contenu = "message de : ".$nom;
    		$contenu .=	"<br /> Message: <br />"; 
    		$contenu .= $message;
    		$headers = 'MIME-Version: 1.0' . "\n"; 
    		$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; 
    		$headers .= 'From: '.$from."\n"; 
    		$reply = $headers."Reply-to: ".$reply."\n";
    		$resultat = mail($to, $subject, $contenu, $reply);
    		if($resultat){
    			$retour = "email envoyé";
    			} else {
    			$retour = "Echec dans l'envoi de l'email";
    			}
     
    	} else {
    		$texte_erreurs = implode("<br />",$erreurs);
    	}
    }
    ?>
    et le formulaire dans le corps de la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <form action="<?php print $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data" name="form1" id="form1" accept-charset="ISO-8859-1">
      <p>nom: <input name="nom" type="text" id="nom" value="<?php print $nom ?>" size="50" maxlength="100" /><br />
      email: <input name="email" type="text" id="email" value="<?php print $email ?>" size="50" maxlength="100" /><br />
      message: <input name="message" type="textarea" id="message" cols="38" rows="5" /><?php print $message; ?></textarea><br />
      <input type="submit" name="Submit" value="Envoyer" />
      <?php if($_POST) {
        echo $retour;
        } else {
        print $texte_erreurs; ?></p>
    </form>
    Merci...

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par oupsla Voir le message
    Cependant la syntaxe du code est incorrect pour la fonction implode:
    quelle est le problème avec la fonction "implode", tu as un message d'erreur ?

  3. #3
    FoxLeRenard
    Invité(e)
    Par défaut
    Ce n' est pas que je veuilles vendre ma méthode, mais quand il y a des POST et des GET, je les traitent toujours en premier ... et les convertis en variables, ensuite je n'utilises plus que les variablse, ainsi j'ais toujours les variables (vides ou pas) mais au moins plus d'erreur !!

    Alors ça donnerais cela,

    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
     
    <html><body>
    <?php
    if (isset($_POST["nom"])) $nom=trim($_POST["nom"]);
        else $nom="";
    if (isset($_POST["email"])) $email=trim($_POST["email"]);
        else $email="";
    if (isset($_POST["message"])) $message=trim($_POST["message"]);
        else $message="";
     
    $erreurs = array();
    $texte_erreurs="";
    f($message=="") $erreurs[0] = "manque le texte du message";
     
    if($message!="")
      {
         $subject = "formulaire contact de floue.net";
         if($nom=="") $erreurs[1] = "il manque votre nom";
         if($email=="") $erreurs[2] = "il manque votre email";
          else if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$email)) $erreurs[2] = "l'email n'est pas valide";
    if(empty($erreurs)) 
     {
       $from = $email;
       $reply = $from; 
       $to = "xxxxx(a)floue.net";
       $contenu = "message de : ".$nom;
       $contenu .=	"<br /> Message: <br />"; 
       $contenu .= $message;
       $headers = 'MIME-Version: 1.0' . "\n"; 
       $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; 
       $headers .= 'From: '.$from."\n"; 
       $reply = $headers."Reply-to: ".$reply."\n";
       $resultat = mail($to, $subject, $contenu, $reply);
      if($resultat)
        { $retour = "email envoyé";} else 
        { $retour = "Echec dans l'envoi de l'email";	}
         } else { $texte_erreurs = implode("<br />",$erreurs);	}
    }
    ?>
    <form action="<?php print $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data" name="form1" id="form1" accept-charset="ISO-8859-1">
      <p>nom: <input name="nom" type="text" id="nom" value="<?php print $nom ?>" size="50" maxlength="100" /><br />
      email: <input name="email" type="text" id="email" value="<?php print $email ?>" size="50" maxlength="100" /><br />
      message: <input name="message" type="textarea" id="message" cols="38" rows="5" /><?php print $message; ?></textarea><br />
      <input type="submit" name="Submit" value="Envoyer" />
    <?php if($_POST) {
        echo $retour;
        } else {
        print $texte_erreurs; 
    ?></p>
    </form>
    </body></html>

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour et merci pour les réponses.
    J'ai changé le code et ça marche:
    avant <head>
    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
     
    <?php
    $email_webmaster = "xxx.xxx@xxx.xxx";
    if (isset($_POST["envoyer"])){
            $etat = "erreur";
            if (isset($_POST["email_expediteur"])) {
                     $_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"]));
            }
            if (isset($_POST["objet"])) {
                     $_POST["objet"]=trim(stripslashes($_POST["objet"]));
            }
            if (isset($_POST["message"])) {
                     $_POST["message"]=trim(stripslashes($_POST["message"]));
            }
            if (empty($_POST["email_expediteur"])) {
                     $erreur="Saisissez votre adresse email...";
            }
            elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["email_expediteur"])){ 
                     $erreur="Votre adresse e-mail n'est pas valide...";
            }
            elseif (empty($_POST["message"])) { 
                     $erreur="Saisissez un message...";
            }
            else {
                     $etat="ok";
            }
    }
    else {
               $etat="attente";
    }
    ?>
    et le 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
    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
     
    <?php
    if ($etat!="ok"){
    	if ($etat=="erreur"){
    		echo "<p><strong>".$erreur."</strong></p>\n";
    	}
    ?>
     
    	<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
            <p><label for="email_expediteur">Votre email</label>
            <input type="text" size="40" name="email_expediteur" id="email_expediteur" value="<?php
    	if (!empty($_POST["email_expediteur"])) {
    		echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES);
    	}
            ?>" />
            </p>
            <p><label for="objet">Objet</label>
            <input type="text" size="40" name="objet" id="objet" value="<?php
    	if (!empty($_POST["objet"])) {
    		echo htmlspecialchars($_POST["objet"],ENT_QUOTES);
    	}
            ?>" />
            </p>
            <p><label for="message">Message</label>
            <textarea name="message" id="message" cols="40" rows="5"><?php
    	if (isset($_POST["message"])) {
    		echo htmlspecialchars($_POST["message"],ENT_QUOTES);
    	}
            ?></textarea>
            </p>
            <p><input class="envoi" type="submit" name="envoyer" value="Envoyer" />
            </p>
            </form>
    <?php
    }
    else {
    	$entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n";
    	$entete .= "MIME-Version: 1.0";
    	if (@mail($email_webmaster,$_POST["objet"],$_POST["message"],$entete)){
    		echo "Votre message a été envoyé.<br />\n";
    		echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Envoyer un autre message...</a>\n";
    	}
    else {
    	echo "Un problème s'est produit lors de l'envoi du message.\n";
    	echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a>\n";
    	}
    }
    ?>

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

Discussions similaires

  1. [Spring MVC] Deux formulaires sur une même page
    Par djodjo dans le forum Spring Web
    Réponses: 1
    Dernier message: 20/10/2008, 09h52
  2. Réponses: 9
    Dernier message: 23/06/2008, 15h54
  3. Réponses: 11
    Dernier message: 19/09/2007, 10h20
  4. Réponses: 2
    Dernier message: 18/07/2007, 08h38
  5. [Conception] formulaire et résultat sur la même page
    Par ph_anrys dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 13/07/2006, 16h47

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