Form et traitement : passage de variables

Résolu/Fermé
jarailet Messages postés 164 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 14 mars 2024 - Modifié par jordane45 le 31/05/2016 à 19:51
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 - 1 juin 2016 à 16:24
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 !


 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.

7 réponses

jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 647
Modifié par jordane45 le 31/05/2016 à 19:58
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)
<?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                                                                 
0
jarailet Messages postés 164 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 14 mars 2024 3
31 mai 2016 à 23:11
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):


<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>

0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 647
31 mai 2016 à 23:44
Tu as vu que certaines de tes lignes sont en "commentaire" ??
 /* echo "Combien font $a x $b ?"; */
		  /*echo "$produit"; */

Normal que ça ne s'affiche pas non ?
0
jarailet Messages postés 164 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 14 mars 2024 3 > jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024
1 juin 2016 à 09:30
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

<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.
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 647 > jarailet Messages postés 164 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 14 mars 2024
1 juin 2016 à 10:02
Quel est exactement le code présent sur ton serveur ?
0
jarailet Messages postés 164 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 14 mars 2024 3
1 juin 2016 à 10:25
C'est le même code sur mon PC et sur le serveur de SFR.
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.
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 647
1 juin 2016 à 10:37
Tu peux ajouter la ligne suivante :
 error_reporting(E_ALL);

au début de tes pages php ?

Cela permettra d'afficher les éventuelles erreurs de code php.
0
jarailet Messages postés 164 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 14 mars 2024 3
1 juin 2016 à 11:05
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" !)


<!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>
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 647
1 juin 2016 à 11:11
Attention
Utilise bien les balises php :
<?php 

et non juste :
<?

comme tu l'as fait
  <? $a=rand(2,9);

A remplacer par :
  <?php  $a=rand(2,9);
0

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

Posez votre question
jarailet Messages postés 164 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 14 mars 2024 3
1 juin 2016 à 15:32
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


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;

...........................................................
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 647
1 juin 2016 à 15:34
Tu ne sais pas faire un copier/coller ???
La tu as réussi à inverser la récupération des variables .... et ton test sur ton captcha....
0
jarailet Messages postés 164 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 14 mars 2024 3
1 juin 2016 à 16:17
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
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 647
1 juin 2016 à 16:24
Moi ce matin le souvenir .. c'est ça :

0