[PHP] Envoi de formulaire - Réaffichage du form - Corrections

Fermé
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 19 févr. 2013 à 09:20
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 20 févr. 2013 à 10:03
Bonjour,
Tout d'abord, veuillez excuser la longueur rébarbative de ce sujet.....
Je suis novice en php et n'en ferais pas mon métier.....
Par contre, je suis en train de "bricoler" un petit site de tutoriel sur VBA. Dans ce site, j'ai besoin que le visiteur m'envoie un message, soit un commentaire à afficher sur le site, soit une question à envoyer par mail. Je ne veux pas automatiser cela, je veux dans les 2 cas recevoir un email, mais avec l'objet du mail différent.
J'ai donc, honteusement, pompé ce code.....
Code initial :
<!-- sources du code php : http://www.leconcepteur.ca/formulaire-vers-courriel.php -->
	<?php

 $destinataire = 'votre adresse courriel ici';

 $copie = 'oui';

 $form_action = 'contact.php?page=contact';

 $message_envoye = "Votre message nous est bien parvenu !";
 $message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";

 $message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que votre courriel soit sans erreur.";

 function Rec($text)
  {
    $text = trim($text);
    if (1 === get_magic_quotes_gpc())
    {
      $stripslashes = create_function('$txt', 'return stripslashes($txt);');
        }
        else
        {
          $stripslashes = create_function('$txt', 'return $txt;');
        }

        $text = $stripslashes($text);
        $text = htmlspecialchars($text, ENT_QUOTES);
        $text = nl2br($text);
        $text = utf8_decode($text);
        return $text;
    };

	function IsEmail($email)
    {
        $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
        return (eregi($pattern,$email)) ? true : false;
    };

    $err_formulaire = false;

    $nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : '';
    $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
    $objet   = (isset($_POST['objet']))   ? Rec($_POST['objet'])   : '';
    $message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';

    if (isset($_POST['envoi']))
    {
        $email = (IsEmail($email)) ? $email : '';
        $err_formulaire = (IsEmail($email)) ? false : true;

        if (($nom != '') && ($email != '') && ($objet != '') && ($message != ''))
        {
          $headers = 'From: '.$nom.' <'.$email.'>' . "\r\n";

          if ($copie == 'oui')
            {
              $cible = $destinataire.','.$email;
            }
            else
            {
              $cible = $destinataire;
            };

            $message = html_entity_decode($message);
            $message = str_replace('&#039;',"'",$message);
            $message = str_replace('&#8217;',"'",$message);
            $message = str_replace('<br>','',$message);
            $message = str_replace('<br />','',$message);

            if (mail($cible, $objet, $message, $headers))
            {
              echo '<p>'.$message_envoye.'</p>'."\n";
            }
            else
            {
              echo '<p>'.$message_non_envoye.'</p>'."\n";
            };
        }
        else
        {
            echo '<p>'.$message_formulaire_invalide.' <a href="contact.php">Retour au formulaire</a></p>'."\n";
            $err_formulaire = true;
        };
    };

    if (($err_formulaire) || (!isset($_POST['envoi'])))
    {
        echo '<form id="contact" method="post" action="'.$form_action.'">'."\n";
        echo ' <p>'."\n";
        echo '  <label for="nom">Nom/Pseudo</label>'."\n";
        echo '  <input type="text" id="nom" name="nom" value="'.stripslashes($nom).'" tabindex="1" />'."\n";
        echo ' </p>'."\n";
        echo ' <p>'."\n";
        echo '  <label for="email">Courriel*</label>'."\n";
        echo '  <input type="text" id="email" name="email" size="60" value="'.stripslashes($email).'" tabindex="2" />'."\n";
        echo ' </p>'."\n";
        echo ' <p>'."\n";
        echo '  <label for="objet">Objet</label>'."\n";
        echo '  <input type="text" id="objet" name="objet" size="53" value="'.stripslashes($objet).'" tabindex="3" />'."\n";
        echo ' </p>'."\n";
        echo ' <p>'."\n";
        echo '  <label for="message">Message</label>'."\n";
        echo '  <textarea id="message" name="message" tabindex="4">'.stripslashes($message).'</textarea>'."\n";
        echo ' </p>'."\n";

        echo ' <div><input type="submit" name="envoi" id="go" value=" Soumettre " /></div>'."\n";
        echo '</form>'."\n";
    };
?>

Mon but étant de :
1- virer l'Input text "nom" car je n'en ai rien à faire,
2- Masquer l'input "objet"
3- placer deux boutons radios pour choisir soit d'envoyer une question par mail soit d'afficher un commentaire sur le site
4- le retour de ce bouton radio remplira mon input hidden "objet"...
J'ai donc modifié le code comme ceci :
<!-- sources du code php : http://www.leconcepteur.ca/formulaire-vers-courriel.php -->
	<?php

$destinataire = 'xxxxxxxxx.xxxxxxxx@xxxxxxx.xx';

 $copie = 'oui';

 $form_action = 'contact.php?page=contact';

 $message_envoye = "Votre message nous est bien parvenu !";
 $message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";

 $message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que votre courriel soit sans erreur.";

 function Rec($text)
  {
    $text = trim($text);
    if (1 === get_magic_quotes_gpc())
    {
      $stripslashes = create_function('$txt', 'return stripslashes($txt);');
        }
        else
        {
          $stripslashes = create_function('$txt', 'return $txt;');
        }

        $text = $stripslashes($text);
        $text = htmlspecialchars($text, ENT_QUOTES);
        $text = nl2br($text);
        $text = utf8_decode($text);
        return $text;
    };

	function IsEmail($email)
    {
        $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
        return (eregi($pattern,$email)) ? true : false;
    };

    $err_formulaire = false;

    $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
    $objet   = (isset($_POST['AfficheEnvoi']))   ? Rec($_POST['AfficheEnvoi'])   : '';
    $message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';

    if (isset($_POST['envoi']))
    {
        $email = (IsEmail($email)) ? $email : '';
        $err_formulaire = (IsEmail($email)) ? false : true;

        if (($nom != '') && ($email != '') && ($objet != '') && ($message != ''))
        {
          $headers = 'From: ' <'.$email.'>' . "\r\n";

          if ($copie == 'oui')
            {
              $cible = $destinataire.','.$email;
            }
            else
            {
              $cible = $destinataire;
            };

            $message = html_entity_decode($message);
            $message = str_replace('&#039;',"'",$message);
            $message = str_replace('&#8217;',"'",$message);
            $message = str_replace('<br>','',$message);
            $message = str_replace('<br />','',$message);

            if (mail($cible, $objet, $message, $headers))
            {
              echo '<p>'.$message_envoye.'</p>'."\n";
            }
            else
            {
              echo '<p>'.$message_non_envoye.'</p>'."\n";
            };
        }
        else
        {
            echo '<p>'.$message_formulaire_invalide.' <a href="contact.php">Retour au formulaire</a></p>'."\n";
            $err_formulaire = true;
        };
    };

    if (($err_formulaire) || (!isset($_POST['envoi'])))
    {
        echo '<form id="contact" method="post" action="'.$form_action.'">'."\n";
        echo ' <p>'."\n";
        echo '  <label for="email">Courriel*</label>'."\n";
        echo '  <input type="text" id="email" name="email" size="60" value="'.stripslashes($email).'" tabindex="2" />'."\n";
        echo '  <input type="hidden" id="objet" name="objet" size="53" value="'.stripslashes($objet).'" tabindex="3" />'."\n";
        echo ' </p>'."\n";
        echo ' <p>'."\n";
        echo '  <label for="message">Votre message : </label>'."\n";
        echo '  <textarea id="message" name="message" tabindex="4">'.stripslashes($message).'</textarea>'."\n";
        echo ' </p>'."\n";
        echo ' <p>'."\n";
	echo ' <label for="Afficher">Message à envoyer par email</label><br />'.' <input type="radio" name="AfficheEnvoi" value="Envoyer" id="Envoyer" />';
	echo ' <label for="Afficher">Message à afficher sur le site</label><br />'.'<input type="radio" name="AfficheEnvoi" value="Afficher" id="Afficher" />';
        echo ' </p>'."\n";
        echo ' <div><input type="submit" name="envoi" id="go" value=" Soumettre " /></div>'."\n";
        echo '</form>'."\n";
    };
?>

Ne pouvant pas tester (pas d'hébergeur), pourriez vous me le corriger dans un premier temps?
Dans un second temps j'aurais encore certainement quelques petites questions.
Merci par avance.

2 réponses

intoxx62 Messages postés 361 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 13 mars 2015 70
19 févr. 2013 à 09:29
Yope, je n'ai pas vraiment le temps pour lire le code, mais si jamais tu n'as pas
d'hébergeur pour tester ton code utilise WAMP(Serveur PHP pour Windows histoire de tester tes codes) très utile ^^
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
19 févr. 2013 à 09:34
Lut,
L'hébergeur n'est pas le seul souci (pas de logiciel ftp, ni possibilité d'installer ça sur le serveur du boulot + panne de disque dur à la maison... Les catas en rafale quoi ;-))..... Débutant, je souhaite vraiment faire un bon site. Par conséquent la correction de "pros du php" me semble indispensable.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 19/02/2013 à 11:28
Ce code a pu être testé en ligne par un ami, il fonctionne maintenant comme je le veux, ou à peu près...
<?php 

 $destinataire = 'xxxx.yyyy@hotmail.fr'; 

 $copie = 'oui'; 

 $form_action = 'contact.php?page=contact'; 

 $message_envoye = "Votre message nous est bien parvenu !"; 
 $message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP."; 

 $message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que votre courriel soit sans erreur."; 

 function Rec($text) 
  { 
    $text = trim($text); 
    if (1 === get_magic_quotes_gpc()) 
    { 
      $stripslashes = create_function('$txt', 'return stripslashes($txt);'); 
        } 
        else 
        { 
          $stripslashes = create_function('$txt', 'return $txt;'); 
        } 

        $text = $stripslashes($text); 
        $text = htmlspecialchars($text, ENT_QUOTES); 
        $text = nl2br($text); 
        $text = utf8_decode($text); 
        return $text; 
    }; 

 function IsEmail($email) 
    { 
        $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$"; 
        return (eregi($pattern,$email)) ? true : false; 
    }; 

    $err_formulaire = false; 

    $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : ''; 
    $objet   = (isset($_POST['AfficheEnvoi']))   ? Rec($_POST['AfficheEnvoi'])   : ''; 
    $message = (isset($_POST['message'])) ? Rec($_POST['message']) : ''; 

    if (isset($_POST['envoi'])) 
    { 
        $email = (IsEmail($email)) ? $email : ''; 
        $err_formulaire = (IsEmail($email)) ? false : true; 

        if (($email != '') && ($objet != '') && ($message != '')) 
        { 
          $headers = 'From: ' . ' <'.$email.'>' . "\r\n"; 



          if ($copie == 'oui') 
            { 
              $cible = $destinataire.','.$email; 
            } 
            else 
            { 
              $cible = $destinataire; 
            }; 

            $message = html_entity_decode($message); 
            $message = str_replace(''',"'",$message); 
            $message = str_replace(''',"'",$message); 
            $message = str_replace('<br>','',$message); 
            $message = str_replace('<br />','',$message); 

            if (mail($cible, $objet, $message, $headers)) 
            { 
              echo '<p>'.$message_envoye.'</p>'."\n"; 
            } 
            else 
            { 
              echo '<p>'.$message_non_envoye.'</p>'."\n"; 
            }; 
        } 
        else 
        { 
            echo '<p>'.$message_formulaire_invalide.' <a href="contact.php">Retour au formulaire</a></p>'."\n"; 
            $err_formulaire = true; 
        }; 
    }; 

    if (($err_formulaire) || (!isset($_POST['envoi']))) 
    { 
        echo '<form id="contact" method="post" action="'.$form_action.'">'."\n"; 
        echo ' <p>'."\n"; 
        echo '  <label for="email">Courriel*</label>'."\n"; 
        echo '  <input type="text" id="email" name="email" size="60" value="'.stripslashes($email).'" tabindex="2" />'."\n"; 
        echo '  <input type="hidden" id="objet" name="objet" size="53" value="'.stripslashes($objet).'" tabindex="3" />'."\n"; 
        echo ' </p>'."\n"; 
        echo ' <p>'."\n"; 
        echo '  <label for="message">Votre message : </label>'."\n"; 
        echo ' </p>'."\n"; 
        echo ' <p>'."\n"; 
        echo '  <textarea id="message" name="message" tabindex="4">'.stripslashes($message).'</textarea>'."\n"; 
        echo ' </p>'."\n"; 
        echo ' <p>'."\n"; 
 echo ' <input type="radio" name="AfficheEnvoi" value="Envoyer" id="Envoyer" checked="checked"/>'.'<label for="Envoyer"> Message à envoyer par email</label>'." " ."\n"; 
 echo ' <input type="radio" name="AfficheEnvoi" value="Afficher" id="Afficher" />'.'<label for="Afficher"> Message à afficher sur le site</label>'."     "."\n"; 
        echo ' <input type="submit" name="envoi" id="go" value=" Soumettre " />'."\n"; 
        echo ' </p>'."\n"; 
        echo '</form>'."\n"; 
    }; 
?>
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 19/02/2013 à 11:30
Question subsidiaire n°1 :
le mail reçu suite à l'envoi de ce form, contient des caractères spéciaux en remplacement des lettres accentuées. Que puis je modifier pour recevoir un beau mail sans "?" à la place de "é"???

Je suppute qu'il faille modifier (ou ajouter) quelque chose à :
            $message = html_entity_decode($message); 
            $message = str_replace(''',"'",$message); 
            $message = str_replace(''',"'",$message); 
            $message = str_replace('<br>','',$message); 
            $message = str_replace('<br />','',$message);

mais c'est du chinois pour moi...
précision : mes pages et leur encodage sont bien en utf-8
Merci.
Cordialement,
Franck P
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
20 févr. 2013 à 10:03
Bonjour,

Question subsidiaire n°1 : résolue
Dans mon cas, Il suffisait d'ajouter 'UTF8' (cf en gras ci-dessous) et
$message = utf8_encode($message);
comme ceci : :
$message = html_entity_decode($message, ENT_COMPAT, 'UTF-8');
$message = str_replace('&#039;',"'",$message);
$message = str_replace('&#8217;',"'",$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);
$message = utf8_encode($message);
0