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 - 24 mai 2023 à 08:07
- Formulaire POST, page de confirmation
- Supprimer une page word - Guide
- Confirmation de lecture whatsapp - Guide
- Formulaire de réclamation facebook - Guide
- Confirmation de lecture gmail - Guide
- Word numéro de page 1/2 - Guide
9 réponses
14 mai 2023 à 09:01
Bonjour,
Tu peux utiliser les $_session pour récupérer les informations
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
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();
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question17 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 )
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> </p></td> </tr> <tr> <td width="800"><h1>Contact</h1></td> </tr> <tr> <td><h2>Formulaire</h2></td> </tr> <tr> <td height="50"> </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"> </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"> </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> </p></td> </tr> <tr> <td width="800"><h1>Contact</h1></td> </tr> <tr> <td><h2>Confirmation</h2></td> </tr> <tr> <td height="50"> </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"> </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"> </td> </tr> </table> <?php include "Foot1.html"; ?> </div> </body> </html>
Voilà
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 ...
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.
24 mai 2023 à 01:29
isset($_POST['nom']) && !empty($_POST['nom'])
=>
!empty($_POST['nom'])
Idem pour les autres..
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.