Form et traitement : passage de variables
Résolu
jarailet
Messages postés
187
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'essaie de compléter un script avec un captcha "à ma façon".
Le form affiche donc une question (Produit de 2 nb aléatoires générés par un petit bout de php ainsi que $produit)
J'ai placé un input pour récupérer la réponse (name= "captcha1")
mais je ne parviens pas à comparer cette réponse à $produit dans la partie traitement .
Voici l'état des travaux (enfin, les parties concernées) Merci pour un coup de main !
J'essaie de compléter un script avec un captcha "à ma façon".
Le form affiche donc une question (Produit de 2 nb aléatoires générés par un petit bout de php ainsi que $produit)
J'ai placé un input pour récupérer la réponse (name= "captcha1")
mais je ne parviens pas à comparer cette réponse à $produit dans la partie traitement .
Voici l'état des travaux (enfin, les parties concernées) Merci pour un coup de main !
if ($_SERVER['REQUEST_METHOD']=='POST') { // (1) Code PHP pour traiter l'envoi de l'email // Récupération des variables et sécurisation des données $nom = htmlentities($_POST['nom']); // htmlentities() convertit des caractères "spéciaux" en équivalent HTML $email = htmlentities($_POST['email']); $message = htmlentities($_POST['message']); $captcha1= $_POST['captcha1']; .............................................................. if (!isset($_POST['captcha1'])) { $nombreErreur++; $erreur6 = '<p>Il y a un problème avec la variable "captcha1".</p>'; } else { if ($_POST['captcha1']!= $produit) { // Vérifier que le résultat de l'équation est égal à 4 $nombreErreur++; $erreur7 = '<p>Désolé, le captcha1 anti-spam est erroné.</p>'; } } ............................................................. <form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>"> <p>Votre nom et prénom: <input type="text" name="nom" size="30" /></p> <p>Votre email: <span style="color:#ff0000;">*</span>: <input type="text" name="email" size="30" /></p> <p>Message <span style="color:#ff0000;">*</span>:</p> <textarea name="message" cols="60" rows="10"></textarea> <br> <!-- essai de captcha variable --> <? $a=rand(2,9); $b=rand(2,9); $produit=$a*$b; echo"Combien font $a x $b ?"; /*echo "$produit"; */ ?> <input type="text" name="captcha1" /> <!-- fin essai captcha--> <p><input type="submit" name="submit" value="Envoyer" /></p> </form>
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Form et traitement : passage de variables
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Traitement de texte gratuit - Guide
- Ce traitement de texte gratuit et léger est parfait pour remplacer Word, même sur un vieux PC - Guide
- Dictionnaire des maladies et traitement - Télécharger - Bureautique
- Traitement de texte gratuit open office - Télécharger - Suite bureautique
7 réponses
Bonjour,
Déjà.... On récupère "PROPREMENT" les variables AVANT de les utiliser
Ensuite.... $produit n'existe pas lorsque tu "submit" ton formulaire... il faut donc le passer aussi lors du submit
(dans un champ hidden par exemple)
Cordialement,
Jordane
Déjà.... On récupère "PROPREMENT" les variables AVANT de les utiliser
Ensuite.... $produit n'existe pas lorsque tu "submit" ton formulaire... il faut donc le passer aussi lors du submit
(dans un champ hidden par exemple)
<?php if ($_SERVER['REQUEST_METHOD']=='POST') { // (1) Code PHP pour traiter l'envoi de l'email // Récupération des variables et sécurisation des données $nom = isset($_POST['nom']) ? htmlentities($_POST['nom']) : ''; // htmlentities() convertit des caractères "spéciaux" en équivalent HTML $email = isset($_POST['email']) ? htmlentities($_POST['email']) : ''; $message = isset($_POST['message']) ? htmlentities($_POST['message']) : ''; $captcha1= !empty($_POST['captcha1']) ? $_POST['captcha1'] : NULL; $produit = !empty($_POST['produit']) ? $_POST['produit'] : NULL; if (!$captcha1) { $nombreErreur++; $erreur6 = '<p>Il y a un problème avec la variable "captcha1".</p>'; }else{ if ($captcha1!= $produit) { // Vérifier que le résultat de l'équation est égal à 4 $nombreErreur++; $erreur7 = '<p>Désolé, le captcha1 anti-spam est erroné.</p>'; } } ?> <form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>"> <p>Votre nom et prénom: <input type="text" name="nom" size="30" /></p> <p>Votre email: <span style="color:#ff0000;">*</span>: <input type="text" name="email" size="30" /></p> <p>Message <span style="color:#ff0000;">*</span>:</p> <textarea name="message" cols="60" rows="10"></textarea> <br> <!-- essai de captcha variable --> <?php $a=rand(2,9); $b=rand(2,9); $produit=$a*$b; echo"Combien font $a x $b ?"; /*echo "$produit"; */ ?> <input type='hidden' value ="<?php echo $produit;?>" name='produit'> <input type="text" name="captcha1" /> <!-- fin essai captcha--> <p><input type="submit" name="submit" value="Envoyer" /></p> </form>
Cordialement,
Jordane
Merci. J'ai essayé en local et ça semblait marcher... Le fichier envoyé sur site, le form n'affiche plus la question "combien font $a x $b ?"
j'ai essayé de modifier le form mais pas moyen de retrouver l'affichage de la question alors qu'elle s'affiche en local (wamp):
j'ai essayé de modifier le form mais pas moyen de retrouver l'affichage de la question alors qu'elle s'affiche en local (wamp):
<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">
<p>Votre nom et prénom: <input type="text" name="nom" size="30" /></p>
<p>Votre email: <span style="color:#ff0000;">*</span>: <input type="text" name="email" size="30" /></p>
<p>Message <span style="color:#ff0000;">*</span>:</p>
<textarea name="message" cols="60" rows="10"></textarea><br>
<!-- essai de captcha variable -->
<? $a=rand(2,9);
$b=rand(2,9);
$produit=$a*$b;
/* echo "Combien font $a x $b ?"; */
/*echo "$produit"; */
?>
<p>Combien font <?php echo "$a" ?> x <?php echo "$b" ?> ? </p>
<input type='hidden' value ="<?php echo $produit;?>" name='produit'>
<input type="text" name="captcha1" />
<!-- fin essai captcha-->
<p><input type="submit" name="submit" value="Envoyer" /></p>
</form>
Bonjour et merci encore pour ton aide.
Effectivement, la ligne en question (dans le bout de php) est en com car elle n'affichait rien et j'ai essayé de la remplacer par
mais cela ne va pas mieux.
Je ne comprends pas qu'elle soit interprétée en local (aperçu de la page depuis Dreamweaver avec wamp) et oubiée lorsque je passe par le serveur distant : http://autourdalos.fr/Bobyvonne2015/formcomplet2.php
Sur ce dernier, j'ai vérifié le code: le bout de php déterminant $a,$b, et posant la question est bien visible.
Effectivement, la ligne en question (dans le bout de php) est en com car elle n'affichait rien et j'ai essayé de la remplacer par
<p>Combien font <?php echo "$a" ?> x <?php echo "$b" ?> ? </p>
mais cela ne va pas mieux.
Je ne comprends pas qu'elle soit interprétée en local (aperçu de la page depuis Dreamweaver avec wamp) et oubiée lorsque je passe par le serveur distant : http://autourdalos.fr/Bobyvonne2015/formcomplet2.php
Sur ce dernier, j'ai vérifié le code: le bout de php déterminant $a,$b, et posant la question est bien visible.
C'est le même code sur mon PC et sur le serveur de SFR.
J'ai essayé en local puis distant :
puis, encore en local et distant :
Dans les deux cas, seul l'essai en local affiche la question.
Je ne sais pas si le problème peut venir d'une autre partie du fichier mais je peux évidemment tout envoyer si tu le juges utile.
J'ai essayé en local puis distant :
<!-- essai de captcha variable -->
<? $a=rand(2,9);
$b=rand(2,9);
$produit=$a*$b;
?>
<p>Combien font <?php echo "$a" ?> x <?php echo "$b" ?> ? </p>
puis, encore en local et distant :
<!-- essai de captcha variable -->
<? $a=rand(2,9);
$b=rand(2,9);
$produit=$a*$b;
echo "Combien font $a x $b ?";
?>
Dans les deux cas, seul l'essai en local affiche la question.
Je ne sais pas si le problème peut venir d'une autre partie du fichier mais je peux évidemment tout envoyer si tu le juges utile.
Le fichier est transféré ici pour essai :
http://autourdalos.fr/Essais/formcomplet2.php
J'ai ajouté au début la ligne que tu proposes : pas d'erreur ?
Finalement, j'envoie toute la page (smiley "confus" !)
http://autourdalos.fr/Essais/formcomplet2.php
J'ai ajouté au début la ligne que tu proposes : pas d'erreur ?
Finalement, j'envoie toute la page (smiley "confus" !)
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>Contacter le webmaster</h1>
<!-- Ceci est un commentaire HTML. Le code PHP devra remplacé cette ligne -->
<?php
error_reporting(E_ALL);
// S'il y des données de postées
if ($_SERVER['REQUEST_METHOD']=='POST') {
// (1) Code PHP pour traiter l'envoi de l'email
// Récupération des variables et sécurisation des données
$nom = isset($_POST['nom']) ? htmlentities($_POST['nom']) : ''; // htmlentities() convertit des caractères "spéciaux" en équivalent HTML
$email = isset($_POST['email']) ? htmlentities($_POST['email']) : '';
$message = isset($_POST['message']) ? htmlentities($_POST['message']) : '';
$captcha1= !empty($_POST['captcha1']) ? $_POST['captcha1'] : NULL;
$produit = !empty($_POST['produit']) ? $_POST['produit'] : NULL;
// Variables concernant l'email
$destinataire = 'jarailet.sites@club-internet.fr'; // Adresse email du webmaster (à personnaliser)
$sujet = 'Titre du message'; // Titre de l'email
$contenu = '<html><head><title>Titre du message</title></head><body>';
$contenu .= '<p>Bonjour, vous avez reçu un message à partir de votre site web.</p>';
$contenu .= '<p><strong>Nom</strong>: '.$nom.'</p>';
$contenu .= '<p><strong>Email</strong>: '.$email.'</p>';
$contenu .= '<p><strong>Message</strong>: '.$message.'</p>';
$contenu .= '</body></html>'; // Contenu du message de l'email (en XHTML)
// Pour envoyer un email HTML, l'en-tête Content-type doit être défini
$headers = 'MIME-Version: 1.0'."\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";
// Envoyer l'email
mail($destinataire, $sujet, $contenu, $headers); // Fonction principale qui envoi l'email
echo '<h2>Message envoyé!</h2>'; // Afficher un message pour indiquer que le message a été envoyé
// (2) Fin du code pour traiter l'envoi de l'email
$nombreErreur = 0; // Variable qui compte le nombre d'erreur
// Définit toutes les erreurs possibles
if (!isset($_POST['email'])) { // Si la variable "email" du formulaire n'existe pas (il y a un problème)
$nombreErreur++; // On incrémente la variable qui compte les erreurs
$erreur1 = '<p>Il y a un problème avec la variable "email".</p>';
} else { // Sinon, cela signifie que la variable existe (c'est normal)
if (empty($_POST['email'])) { // Si la variable est vide
$nombreErreur++; // On incrémente la variable qui compte les erreurs
$erreur2 = '<p>Vous avez oublié de donner votre email.</p>';
} else {
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$nombreErreur++; // On incrémente la variable qui compte les erreurs
$erreur3 = '<p>Cet email ne ressemble pas un email.</p>';
}
}
}
if (!isset($_POST['message'])) {
$nombreErreur++;
$erreur4 = '<p>Il y a un problème avec la variable "message".</p>';
} else {
if (empty($_POST['message'])) {
$nombreErreur++;
$erreur5 = '<p>Vous avez oublié de donner un message.</p>';
}
} // (3) Ici, il sera possible d'ajouter plus tard un code pour vérifier un captcha anti-spam.
if (!$captcha1) {
$nombreErreur++;
$erreur6 = '<p>Il y a un problème avec la variable "captcha1".</p>';
}else{
if ($captcha1!= $produit) {
// Vérifier que le résultat de l'équation est égal à 4
$nombreErreur++;
$erreur7 = '<p>Désolé, le captcha1 anti-spam est erroné.</p>';
}
}
if ($nombreErreur==0) { // S'il n'y a pas d'erreur
// Ici il faut ajouter tout le code pour envoyer l'email.
// Dans le code présenté au chapitre précédent, cela signifie au code entre les commentaires (1) et (2).
} else { // S'il y a un moins une erreur
echo '<div style="border:1px solid #ff0000; padding:5px;">';
echo '<p style="color:#ff0000;">Désolé, il y a eu '.$nombreErreur.' erreur(s). Voici le détail des erreurs:</p>';
if (isset($erreur1)) echo '<p>'.$erreur1.'</p>';
if (isset($erreur2)) echo '<p>'.$erreur2.'</p>';
if (isset($erreur3)) echo '<p>'.$erreur3.'</p>';
if (isset($erreur4)) echo '<p>'.$erreur4.'</p>';
if (isset($erreur5)) echo '<p>'.$erreur5.'</p>';
// (4) Ici, il sera possible d'ajouter un code d'erreur supplémentaire si un captcha anti-spam est erroné.
if (isset($erreur6)) echo '<p>'.$erreur6.'</p>';
if (isset($erreur7)) echo '<p>'.$erreur7.'</p>';
echo '</div>';
}
}
?>
<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">
<p>Votre nom et prénom: <input type="text" name="nom" size="30" /></p>
<p>Votre email: <span style="color:#ff0000;">*</span>: <input type="text" name="email" size="30" /></p>
<p>Message <span style="color:#ff0000;">*</span>:</p>
<textarea name="message" cols="60" rows="10"></textarea><br>
<!-- essai de captcha variable -->
<? $a=rand(2,9);
$b=rand(2,9);
$produit=$a*$b;
echo "Combien font $a x $b ?";
?>
<input type='hidden' value ="<?php echo $produit;?>" name='produit'>
<input type="text" name="captcha1" />
<!-- fin essai captcha-->
<p><input type="submit" name="submit" value="Envoyer" /></p>
</form>
</body>
</html>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
On progresse ! Le form s'affiche en totalité...
J'ai replacé le code pour l'envoi comme le préconise de script d'origine soit après les tests d'erreurs
si NombreErreur==0...
J'ai transféré vers SFR. ( http://autourdalos.fr/Essais/formcomplet3.php )
Saisie des données, envoi... et message "erreur6" et pas d'envoi
J'ai replacé le code pour l'envoi comme le préconise de script d'origine soit après les tests d'erreurs
si NombreErreur==0...
J'ai transféré vers SFR. ( http://autourdalos.fr/Essais/formcomplet3.php )
Saisie des données, envoi... et message "erreur6" et pas d'envoi
if (!$captcha1) {
$nombreErreur++;
$erreur6 = '<p>Il y a un problème avec la variable "captcha1".</p>';
}else{
if ($captcha1!= $produit) {
// Vérifier que le résultat de l'équation est égal à 4
$nombreErreur++;
$erreur7 = '<p>Désolé, le captcha1 anti-spam est erroné.</p>';
}
}
..................................................................
$message = isset($_POST['message']) ? htmlentities($_POST['message']) : '';
$captcha1= !empty($_POST['captcha1']) ? $_POST['captcha1'] : NULL;
$produit = !empty($_POST['produit']) ? $_POST['produit'] : NULL;
...........................................................
Si, je sais faire (encore que copier le code entier me restitue quelques lignes de ??????????? )
Mais je me suis fié aux commentaires d'utilisation du script d'origine qui préconise de déplacer toute une partie vers l'envoi, même si je trouvais l'explication un peu confuse...
Bon, tout va bien maintenant.(formcomplet4.php) Il me reste à faire en sorte qu'un nouveau form vide ne se lance pas après l'envoi.
Merci pour ton aide ... et ta patience !
Petit souvenir de la balade de ce matin :
https://www.cjoint.com/c/FFbol4LdvV6
Mais je me suis fié aux commentaires d'utilisation du script d'origine qui préconise de déplacer toute une partie vers l'envoi, même si je trouvais l'explication un peu confuse...
Bon, tout va bien maintenant.(formcomplet4.php) Il me reste à faire en sorte qu'un nouveau form vide ne se lance pas après l'envoi.
Merci pour ton aide ... et ta patience !
Petit souvenir de la balade de ce matin :
https://www.cjoint.com/c/FFbol4LdvV6