Formulaire POST, page de confirmation

Fermé
toy2000gt Messages postés 29 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 2 juin 2023 - 14 mai 2023 à 06:52
toy2000gt Messages postés 29 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 2 juin 2023 - 24 mai 2023 à 08:07

Bonjour,
J'ai créé un formulaire de contact sur mon site, un truc simple qui demande le nom, l'email, le site web (optionnel) et un champ pour le message. Ça envoie tout ça sur une page "traitement.php" qui traite et vérifie les infos et m'envoie un mail avec le contenu. Tout marche bien. Après, l'internaute est dirigé vers une page de confirmation qui dit que son message a bien été envoyé et j'aimerais que les champs du formulaire soient répétés. J'ai essayé tout un tas de manières d'afficher avec echo mais rien ne s'affiche. Commet faire passer les variables $nom, $email, $site et $message sur la page de confirmation ?

A voir également:

9 réponses

sm2r Messages postés 13 Date d'inscription mercredi 29 mars 2023 Statut Membre Dernière intervention 12 juillet 2023 2
14 mai 2023 à 09:01

Bonjour,

Tu peux utiliser les $_session pour récupérer les informations


0
toy2000gt Messages postés 29 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 2 juin 2023 127
Modifié le 17 mai 2023 à 07:46

Merci sm2r,

Ca fait des jours que je cherche des exemples et tutos pour utiliser les $_SESSION, mais je n'arrive pas.
D'abord pourquoi on ne peut pas utiliser $_POST ? c'est aussi une variable superglobale.

Voici le code de ma page de traitement du formulaire:

<html>
<head>
<meta http-equiv="Content-Language" content="fr-ch">
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="robots" content="noindex" >
</head>
<body>
<?php
// On vérifie que le champs remarque contient qqch (antispam)
    if ($_POST['remarque'] != "") { die(); }
        
// On vérifie que la méthode POST est utilisée
    if($_SERVER['REQUEST_METHOD'] == 'POST'){
    // On vérifie si le champ "recaptcha-response" contient une valeur
    if(empty($_POST['recaptcha-response'])){
        header('Location: ContactFormulaire.php');
    }else{
        // On prépare l'URL
        $url = "https://www.google.com/recaptcha/api/siteverify?secret=6Ld25PclAAAAAEdF_bSCi9FKKz3dX0lqsue5LvRR&response=%7B%24_POST%5B'recaptcha-response']}";

        // On vérifie si curl est installé
        if(function_exists('curl_version')){
            $curl = curl_init($url);
            curl_setopt($curl, CURLOPT_HEADER, false);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_TIMEOUT, 1);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            $response = curl_exec($curl);
        }else{
        // Sinon on utilise file_get_contents
            $response = file_get_contents($url);
        }

        // On vérifie qu'on a une réponse
        if(empty($response) || is_null($response)){
            header('Location: ContactFormulaire.php');
        }else{
            $data = json_decode($response);
            if($data->success){
                if(
                    isset($_POST['nom']) && !empty($_POST['nom']) &&
                    isset($_POST['email']) && !empty($_POST['email']) &&
                    isset($_POST['message']) && !empty($_POST['message'])
                ){
                    // On nettoie le contenu
                    $nom = strip_tags($_POST['nom']);
                    $email = strip_tags($_POST['email']);
                    $site = strip_tags($_POST['site']);
                    $message = htmlspecialchars($_POST['message']);

 
                }
            }else{
                header('Location: ContactFormulaire.php');
            }
        }
    }
}else{
    http_response_code(405);
    echo 'Méthode non autorisée';
}

    extract($_POST);
    $text  = "-------------------------------------------\n";
    $text .= "Formulaire de contact\n";
    $text .= "-------------------------------------------\n";
    $text .= "\n";
    $text .= "Nom : $nom\n";
    $text .= "Email : $email\n";
    $text .= "Site web : $site\n";
    $text .= "\n";
    $text .= "Message :\n$message\n";
    $text .= "\n";
    $text .= "-------------------------------------------\n";

    mail("$email", "Contact du site AJ", $text);
    mail("***@***", "Contact du site AJ", $text);

    header('Location: ContactConfirmation.php');

    ?>
</body>
</html>

Le truc étant d'afficher les champs du formulaire sur le page ContactConfirmation.php

J'ai beau mettre

<?php
    session_start();
    $id_session = session_id();
?>

dans la page du formulaire et

<?php
    session_start();
?>

dans ContactConfirmation.php, je n'arrive pas à afficher les variables

0
jordane45 Messages postés 38371 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 7 janvier 2025 4 722
17 mai 2023 à 09:32

Bonjour,

A l'avenir, merci d'utiliser le bouton qui sert à poster du code sur le forum.

Ensuite,  Une fois ta variable de session démarrée ( sur chaque page ), il faut y mettre les données voulues...

Par exemple

$_SESSION['FORM'] = $_POST;

Tu pourras ensuite récupérer les données dans l'autre page à partir de la variable

$_SESSION['FORM'] 

NB: tu peux retirer cette ligne de code

    $id_session = session_id();

0
toy2000gt Messages postés 29 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 2 juin 2023 127
17 mai 2023 à 20:46

Bonjour et merci Jordane45,

désolé pour le bouton, je ne savais pas.
Alors j'ai bien mis

<?php
    session_start();
?>

sur toute les pages et

<?php
    $_SESSION['FORM'] = $_POST;
?>

avant mon formulaire.

Sur ma page de confirmation, j'ai essayé de sortir les variables avec

<?php
    echo $_SESSION['FORM']
?>

avec ou sans ; à la fin, avec echo ou print
j'obtiens toujours

Array

J'ai essayé

 <?php
      print_r($_SESSION);
?>

j'obtient

Array ( [FORM] => Array ( ) [nom] => )

alors j'ai essayé

<?php
                    if(isset($_SESSION['nom'])){
                    $nom = $_SESSION['nom'];
                }
                echo '<p>Nom : '.$nom.'</p>';
?>

Ca n'affiche que

Nom :

et j'ai essayé plein d'autres exemples trouvés dans des forums, mais ça n'affiche rien du tout.

Faut-il initialiser les variables avant le formulaire ? du genre

<?php
   $_SESSION['nom'] = $_POST['nom'];
?>

Ça ne fait rien.

Pourrais-je avoir un exemple juste pour le champs "nom" ?

Je sais, je suis nul, mais il ne me manque que ça pour terminer ce formulaire.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38371 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 7 janvier 2025 4 722
17 mai 2023 à 20:56

$_SESSION est un array

$_SESSION['FORM'] est également un array...

Il est donc normal qu'avec un simple echo ou print tu n'obtiennes comme réponse que "array"

Bref,

A quel moment remplis tu ta variable de session ? 

Pour ma part, je le ferai avant l'extract

$_SESSION['FORM'] = $_POST;
extract($_POST);

Si malgré ça tu rencontres en core des soucis, il faudra nous montrer le code COMPLET de tes fichiers ( sans oublier de nous en indiquer le nom pour chacun d'eux )


0
toy2000gt Messages postés 29 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 2 juin 2023 127
21 mai 2023 à 17:46

Bonjour Jordane45,

Je te remercie pour ton aide. J'ai mis tes deux lignes de code au début de ma troisième page mais ça ne change rien. J'ai passé des heures à essayer de comprendre comment utiliser extract mais je n'y arrive toujours pas. J'ai probablement aussi de la peine à me faire comprendre. Je suis à deux doigts de laisser tomber mon projet. Dernière tentative, je mets mes codes en entiers.

Page 1 ContactFormulaire.php

<?php
    session_start();
?>
<html>
<head>
<meta http-equiv="Content-Language" content="fr-ch">
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="robots" content="noindex" >
<LINK REL="STYLESHEET" HREF="style.css" TYPE="text/css">
<title>AJ - Contact</title>
</head>
<body>
</body>
<?php
	$_SESSION['FORM'] = $_POST;
//	$_SESSION['nom'] = $_POST['nom'];
?>
<div align="center">
<?php
include "Head1.html";
?>
  <table border="0" cellpadding="0" cellspacing="0" width="1000">
    <tr>
      <td width="200" rowspan="3"></td>
      <td width="800" height="70"><p>&nbsp;</p></td>
    </tr>
    <tr>
      <td width="800"><h1>Contact</h1></td>
    </tr>
    <tr>
      <td><h2>Formulaire</h2></td>
    </tr>
    <tr>
      <td height="50">&nbsp;</td>
    </tr>
  </table>
  <table border="0" cellpadding="0" cellspacing="0" width="1000">
    <tr>
      <td width="180" valign="top">
<?php
include "Menu1.html";
?>
      </td>
      <td width="20" valign="top">&nbsp;</td>
      <td width="794" valign="top">
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
          <tr>
            <td><h2>Laissez-moi un message<br><font color="red">Ce formulaire ne fonctionne pas encore, patience</font></h2></td>
          </tr>
        </table>      
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
          <tr>
            <td width="600" valign="top">
              <br>
                <form id="formcontact" method="post" action="ContactTraitement.php">
                    <input type="hidden" id="recaptchaResponse" name="recaptcha-response">
                      <table border="0" cellpadding="0" cellspacing="0" width="600">
                        <tr>
                          <td width="240"><p><label for="nom">Nom<font color="red">*</font> :</label></p></td>
                          <td width="360"><input type="text" name="nom" id="nom" size=53 placeholder="nom" required></td>
                        </tr>
                          <td><p><label for="email">E-mail<font color="red">*</font> :</label></p></td>
                          <td><input type="text" name="email" id="email" size=53 placeholder="***@***" required></td>
                        </tr>
                        <tr>
                          <td><p><label for="site">Votre site internet :</label></p></td>
                          <td><input type="text" name="site" id="site" placeholder="optionel" size=53></td>
                        </tr>
                      </table>
                      <br>
                      <table border="0" cellpadding="0" cellspacing="0" width="500">
                        <tr>
                          <td><p><label for="message">Message<font color="red">*</font></label> :<br>
                          <TEXTAREA rows="5" cols="80" name="message" id="message" required></TEXTAREA></p></td>
                        </tr>
                      </table>
                      <br>
                      <table border="0" cellpadding="0" cellspacing="0" width="500">
                        <tr>
                          <td></td>
                        </tr>
                      </table>
                      <br>
                      <table border="0" cellpadding="8" cellspacing="0" width="500">
                        <tr>
                          <td align="center"><input type="submit" name="submit" value="Envoyer"></td>
                        </tr>
                      </table>
                      <label class="remarque">Remarque</label>
                        <input class="remarque" name="remarque"
                          pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$"
                          placeholder="***@***">
                </form>
                
	      <script src="https://www.google.com/recaptcha/api.js?render=6Ld25PclAAAAAHbhzQ-r0ttao3DyYnnuoKlFG17s"></script>
                <script>
                    grecaptcha.ready(function() {
                    grecaptcha.execute('6Ld25PclAAAAAHbhzQ-r0ttao3DyYnnuoKlFG17s', {action: 'FormulaireContact.php'}).then(function(token) {
                    document.getElementById('recaptchaResponse').value = token
                    });
                });
                </script>
            </td>
          </tr>
        </table>
      </td>
      <td width="6"></td>
    </tr>    
  </table>
  <table border="0" cellpadding="0" cellspacing="0" width="1000">
    <tr>
      <td width="1000" height="50">&nbsp;</td>
    </tr>
  </table>
<?php
include "Foot1.html";
?>
</div>
</body>
</html>

Page 2 ContactTraitement.php (jusque là tout va bien)

<?php
    session_start();
?>
<html>
<head>
<meta http-equiv="Content-Language" content="fr-ch">
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="robots" content="noindex" >
</head>
<body>
<?php
// On vérifie que le champs remarque contient qqch (antispam)
	if ($_POST['remarque'] != "") { die(); }
// On vérifie si le spameur Robertponc est l'auteur 
	if ($_POST['nom'] == "Robertpounc") { die(); }
		
// On vérifie que la méthode POST est utilisée
	if($_SERVER['REQUEST_METHOD'] == 'POST'){
    // On vérifie si le champ "recaptcha-response" contient une valeur
    if(empty($_POST['recaptcha-response'])){
        header('Location: ContactFormulaire.php');
    }else{
        // On prépare l'URL
        $url = "https://www.google.com/recaptcha/api/siteverify?secret=6Ld25PclAAAAAEdF_bSCi9FKKz3dX0lqsue5LvRR&response=%7B%24_POST%5B'recaptcha-response']}";

        // On vérifie si curl est installé
        if(function_exists('curl_version')){
            $curl = curl_init($url);
            curl_setopt($curl, CURLOPT_HEADER, false);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_TIMEOUT, 1);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            $response = curl_exec($curl);
        }else{
        // Sinon on utilise file_get_contents
            $response = file_get_contents($url);
        }

        // On vérifie qu'on a une réponse
        if(empty($response) || is_null($response)){
            header('Location: ContactFormulaire.php');
        }else{
            $data = json_decode($response);
            if($data->success){
                if(
                    isset($_POST['nom']) && !empty($_POST['nom']) &&
                    isset($_POST['email']) && !empty($_POST['email']) &&
                    isset($_POST['message']) && !empty($_POST['message'])
                ){
                    // On nettoie le contenu
                    $nom = strip_tags($_POST['nom']);
                    $email = strip_tags($_POST['email']);
                    $site = strip_tags($_POST['site']);
                    $message = htmlspecialchars($_POST['message']);

                }
            }else{
                header('Location: ContactFormulaire.php');
            }
        }
    }
}else{
    http_response_code(405);
    echo 'Méthode non autorisée';
}

    extract($_POST);
    $text  = "-------------------------------------------\n";
    $text .= "Formulaire de contact\n";
    $text .= "-------------------------------------------\n";
    $text .= "\n";
    $text .= "Nom : $nom\n";
    $text .= "Email : $email\n";
    $text .= "Site web : $site\n";
    $text .= "\n";
    $text .= "Message :\n$message\n";
    $text .= "\n";
    $text .= "-------------------------------------------\n";

    mail("$email", "Contact du site AJ", $text);
    mail("***@***", "Contact du site AJ", $text);

    header('Location: ContactConfirmation.php');

	?>
</body>
</html>

Page 3 ContactConfirmation.php (avec plusieurs essais pour afficher le contenu du formulaire, sans succès)

<?php
    session_start();
	$_SESSION['FORM'] = $_POST;
	$nom = $_SESSION['nom'];
	extract($_POST);
	if(isset($_POST['FORM'])){
     $_SESSION['nom'] =  $_POST['nom'];
     $_SESSION['email'] = $_POST['email']; 
     $_SESSION['site'] = $_POST['site'];
     $_SESSION['message'] = $_POST['message'];}
?>
<html>
<head>
<meta http-equiv="Content-Language" content="fr-ch">
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="robots" content="noindex" >
<LINK REL="STYLESHEET" HREF="../../style.css" TYPE="text/css">
<title>AJ - Contact</title>
</head>
<body>
<div align="center">
<?php
include "Head1.html";
?>
  <table border="0" cellpadding="0" cellspacing="0" width="1000">
    <tr>
      <td width="200" rowspan="3"></td>
      <td width="800" height="70"><p>&nbsp;</p></td>
    </tr>
    <tr>
      <td width="800"><h1>Contact</h1></td>
    </tr>
    <tr>
      <td><h2>Confirmation</h2></td>
    </tr>
    <tr>
      <td height="50">&nbsp;</td>
    </tr>
  </table>
  <table border="0" cellpadding="0" cellspacing="0" width="1000">
    <tr>
      <td width="180" valign="top">
<?php
include "Menu1.html";
?>
      </td>
      <td width="20" valign="top">&nbsp;</td>
      <td width="794" valign="top">
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
          <tr>
            <td><h2>Message envoyé</h2></td>
          </tr>
        </table>      
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
          <tr>
            <td width="600" valign="top">
              <br>
			  <?php
			  //essai 1
                 echo 'Nom : ' . $_SESSION ["name"] . '<br>';
                 echo 'E-mail : ' . $_SESSION ["email"] . '<br>';
                 echo 'Site internet : ' . $_SESSION ["site"] . '<br>';
                 echo 'Message : <br>' . $_SESSION ["message"] . '<br>';
              ?>
              //essai 2
              Nom :<?php echo htmlspecialchars($_SESSION['nom']); ?><br>
              email : <?php echo $_SESSION['email']; ?><br>
              Site internet : <?php echo $_SESSION['site']; ?><br>
              Message :<br><?php echo htmlspecialchars($_SESSION['message']); ?><br>                
			<?php
								if(isset($_SESSION['nom'])){
					$nom = $_SESSION['nom'];
				}
				echo '<p>Nom : '.$nom.'</p>';
			?>
            <?php
			//essai 4
			print_r($_SESSION['nom']);
			?>
            <p>suite</p>
            <?php
			// essai 5
			echo $_SESSION['nom']
			?>
            <?php
			// essai 6
			echo "Nom :".$nom;
			?>
            <?php
            // essai 7
            extract($_POST);
            $text .= "Nom : $nom";
			?>
            <?php
            // essai 8
            echo "<pre>";
			echo print_r($_SESSION);
			echo "</pre>";
			?>
            </td>
          </tr>
        </table>
      </td>
      <td width="6"></td>
    </tr>    
  </table>
  <table border="0" cellpadding="0" cellspacing="0" width="1000">
    <tr>
      <td width="1000" height="50">&nbsp;</td>
    </tr>
  </table>
<?php
include "Foot1.html";
?>
</div>
</body>
</html>

Voilà

0
jordane45 Messages postés 38371 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 7 janvier 2025 4 722
Modifié le 21 mai 2023 à 21:15

Fichier ContactFormulaire.php
Lignes 14 à 17 inutiles (pas le bon fichier)

.

Page 2 ContactTraitement.php
Lignes 46 à 48
!empty fait déjà un ISSET .. donc inutile de mettre les deux

Ligne 55 .. stocker les données voulues dans la variable de session

.
Page 3 ContactConfirmation.php
Ligne 3 ... absurde !  C'est dans le fichier d'avant que tu mémorise les données en session.. pas dans celui où tu veux les lire !

Ligne 6 : tu dois tester la variable de session et non la variable post !

Dans ce fichier, ta variable $_POST ne contient plus rien ( puisque tu arrives sur cette page via une redirection et non la soumission d'un formulaire)
Par contre, vu que tu auras stockés les infos en SESSION, là tu pourras les récupérer 
Je t'invite à faire un var_dump($_SESSION) au début de ce script pour que tu vois sous quelle forme les données se présentent....


PS: j'espère que tu sais ce qu'est un ARRAY associatif et comment le manipuler.. sinon il ne te reste plus qu'à te former aux rudiments du PHP ...


0
toy2000gt Messages postés 29 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 2 juin 2023 127
23 mai 2023 à 22:14

Merci Jordane,

je n'ai pas tout compris (notement "!empty fait déjà un ISSET .. donc inutile de mettre les deux", je mets quoi alors ?) mais ça marche maintenant ! je suis très heureux.

J'ai suivi des cours de php il y a une vingtaine d'années, mais ça évolue.
Maintenant je suis trop vieux pour me replonger vraiment dans tout ça.
Mon site est construit à la main en html avec un peu de php dedans, je m'en contente.

J'ai encore ajouté une vérification du champ email.

Il me reste encore un truc qui me dérange mais ça fera le sujet d'un autre post, si j'arrive à le formuler comme il faut.

Bonne et longue vie à toi.

0
jordane45 Messages postés 38371 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 7 janvier 2025 4 722
24 mai 2023 à 01:29
isset($_POST['nom']) && !empty($_POST['nom']) 

=>

!empty($_POST['nom']) 

Idem pour les autres..

0
toy2000gt Messages postés 29 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 2 juin 2023 127
24 mai 2023 à 08:07

Encore merci, j'ai modifié mon code.

Si ce n'est pas trop abusé, j'essaie de mettre le mail du l'utilisateur (celui qu'il a donné dans le formulaire) dans l'entête du mail que je reçois dans ma boîte aux lettres. Ainsi je peux faire directement replay pour lui répondre.

j'ai essayé

mail("***@***", "Contact du site AJ", $text, "-f ".$email);

mais ça reste mon adresse dans le "de"

J'ai essayé de définir un $headers et d'ajouter cette variable dans le mail comme ça

mail("***@***", "Contact du site AJ", $text, $headers);

mais je n'arrive pas à correctement définir $headers

$headers .= "From:" .$email."\n";

ou

$headers = "From: <$email> \n";

n'envoie même plus le mail.

Voilà encore une nuit à lire des dizaines de pages et faire des dizaines de tests sans résultat probant.

0