Formulaire mal rempli = message d'erreur

  • Auteur de la discussion Auteur de la discussion aventvoy
  • Date de début Date de début
WRInaute discret
Hello,
J'ai différents formulaires simples (contact, newsletter, inscription...) sur différents sites.
Si le formulaire est correctement rempli, sans oublier aucun champ obligatoire, tout va bien, je reçois le formulaire par courriel, no problem.
Par contre, si un champ n'est pas (ou mal) rempli, la page s'ouvre sur un message d'erreur et l'affichage du formulaire partiellement rempli avec mention genre "vous n'avez pas rempli ça..." . Et le bouton "Envoyer" classique.
Le problème c'est que lorsqu'on corrige l'erreur, on peut cliquer 20 fois sur "Envoyer", rien ne se passe, le formulaire est bloqué... Le bouton "Recommencer" ne marche pas non plus...
Une idée du pourquoi de la chose?
Voici un bref apperçu du code (simplifié à une entrée et sans html pour faire simple...)

Code:
<?php
if(isset($_POST['envoi']))
{
    $email_dest = "machin@machin.com";
    $headers ="MIME-Version: 1.0 \n";
    $headers .="From: Site internet <webmaster@machin.com>\n";
    $headers .="Content-Type: text/html; charset=iso-8859-1 \n";
    $subject = "Formulaire de contact depuis le site machin.com";

    // Récupération des données du formulaire
    $prenom     = $_POST['prenom'];

   //Définition des variables servant au traitement des info
    // Conditions de mauvaises réponses (champ vide par exemple)

    if ($prenom == '' )
    {
        // Action à adopter
?>
            
Un (ou plusieurs) champ(s) n'a(ont) pas été correctement rempli(s).

  <?php
        if ($prenom == '')
        {
            print "<li>Vous n'avez pas précisé votre prénom </li>\n";
        }

        /* Si les vérifications ont généré des erreurs, affichage du formulaire
        contenant les données déjà saisies par l'utilisateur.
        Si aucune erreur n'est relevée, alors le script continue et le message part */
?>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
   <input type="text" name="prenom" maxlength="40" class="cases" value="<?php echo $prenom ?>" />
 
<input type="submit" class="verif" name="envoi" value="Envoyer" />
<input name="recommencer" type="reset" class="verif" id="recommencer" value="Recommencer" />

<?php
    }
    else
    {
        /*	Si aucun des champs obligatoire n'est vide et si les données sont valides : Traitement des données et affichage des infos reçues*/

        print "<p>Merci ! Voici la demande d'information reçue : </p>\n";
        
//etc...

        /*envoi de ces mêmes informations par courrier électronique : */
        $message  = "<p> le message ici...\r\n";

        /* On envoie le message */
        if(mail($email_dest, $subject, $message, $headers))
          { 
            echo("<p>blablabla, etc....</p>");
        }
        else
        {
            echo("<p>Un incident technique s'est produit, Nous n'avons pas reçu votre message. Contactez nous directement à <a href=mailto:contact@machin.com</a></p>\n");
        }
    }
}
/* Si cette page s'ouvre pour la première fois sans que le bouton soumettant le formulaire n'ait été cliqué, alors on affiche le formulaire normalement */

else
{
?>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
  
Votre prénom 
      <input type="text" name="prenom" maxlength="40" class="cases" value="" /></td>
     
<input type="submit" class="verif" name="envoi" value="Envoyer" /> <input name="recommencer" type="reset" class="verif" id="recommencer" value="Recommencer" />
        
</form>
<?php
}
?>

Voilà... Pourquoi ça ne marche pas lorsque le formulaire se voit à nouveau partiellement rempli (après erreur donc)?

Merci d'avance!
A.
 
WRInaute discret
outre que c'est pas la plus simple manière de coder ton script, il me semble qu'il te manque tout bêtement un </form>


Code:
       /* Si les vérifications ont généré des erreurs, affichage du formulaire
        contenant les données déjà saisies par l'utilisateur.
        Si aucune erreur n'est relevée, alors le script continue et le message part */
?>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
   <input type="text" name="prenom" maxlength="40" class="cases" value="<?php echo $prenom ?>" />
 
<input type="submit" class="verif" name="envoi" value="Envoyer" />
<input name="recommencer" type="reset" class="verif" id="recommencer" value="Recommencer" />


</FORM>


<?php
    }
    else
    {
 
WRInaute discret
Résolu

Pfff... C'était aussi simple que ça... MERCI!
Bon, pour le
outre que c'est pas la plus simple manière de coder ton script
, merci également. Je me doutais bien qu'il y avait certainement plus simple... C'est en forgeant qu'on devient forgeron, c'est en codant qu'on code rond :roll:
Petit à petit j'ai bon espoir d'y arriver !
Merci encore.
A.
 
Nouveau WRInaute
Je profite de ce post, j'ai le même type de problème sur un formulaire. S'il y a une erreur, mon bouton submit reste bloqué.
Quelqu'un aurait une idée svp?
Merci !


<code><form method="post" action="contact.php" name="contactform" id="contactform" autocomplete="on">
<p><label for=name accesskey=U><span class="required fsample_01">*</span> Votre nom</label>
<input name="name" type="text" id="name" size="50" value="" /></p>

<p><label for=email accesskey=E><span class="required fsample_01">*</span> Email</label>
<input name="email" type="text" id="email" size="50" value="" /></p>

<p><label for=phone accesskey=P><span class="required fsample_01">*</span> Téléphone</label>
<input name="phone" type="text" id="phone" size="50" value="" /></p>

<p><label for=subject accesskey=S>Sujet</label>
<select name="subject" id="subject">
<option value="Support">Informations</option>
<option value="a Sale">Devis</option>
<option value="a Bug fix">Reporter un bug</option>
</select></p>

<p><label for=comments accesskey=C><span class="required">*</span> Votre message</label>
<textarea name="comments" rows="8" cols="40" id="comments" style="width: 450px;"></textarea></p>

<p><span class="required">*</span> Code de vérification</p>

<div>
<label style="display:block; float:left; margin-right:15px;" for=verify accesskey=V>&nbsp;&nbsp;&nbsp;<img src="image.php" border="0" alt="code" /></label>
<input name="verify" type="text" id="verify" size="6" value="" style="width: 50px; float:left;" />
<div class="clear"></div>
</div><br />
<input type="submit" class="submit" id="submit" value="Submit" />

</form></code>
 
WRInaute impliqué
Il reste bloqué, c'est à dire ?

Peut être parce qu'il n'y a aucun traitement php de celui-ci ?
 
Nouveau WRInaute
oui bien sur je voulais indiquer le code… :) donc on enlève les balises <code> </code>.
S'il y a une erreur dans le formulaire, par exemple le code de vérification est mal entré, le bouton submit reste appuyé, donc impossible de re soumettre le formulaire.
Merci.
 
WRInaute passionné
tu utilises du JQuery, non?
class="required" force la validation du champ, il me semble ....
 
WRInaute impliqué
MikeR a dit:
tu utilises du JQuery, non?
class="required" force la validation du champ, il me semble ....

Je vois souvent cette classe sur prestashop et il me semble qu'elle sert uniquement pour l'astérisque placement/couleur.
Mais bon peut être là il utilise jquery...
 
Nouveau WRInaute
merci pour vos réponses ! mais non ça ne viens pas de la class.
Le problème viens du fait que mon formulaire en html renvoie les informations collectées vers un formulaire en php.
Quand il y a un message d'erreur, le bouton submit n'est pas réinitialisé. Du coup pas moyen de renvoyer les données corrigées.
 
WRInaute impliqué
Tu devrais traiter les données (PHP) dans le même fichier que ton formulaire.
Tu commences ta page du type:
Code:
<?php
if(isset($_POST('submit')) //il faut que tu rajoutes l'attribut name="submit" à ton input submit
{ traitement...}
?>
Et ensuite ta page html avec ton formulaire

Du coup pas moyen de renvoyer les données corrigées
Si, tu peux renvoyer les données vers ton formulaire en faisant un header('location:formulaire.html...) et en mettant les données collectées dans l'URL et en les récupérant avec GET.
Mais bon, comme dit plus haut, ce serait beaucoup plus simple de traiter tout dans le même fichier.
 
Nouveau WRInaute
muarf, ce qui faisais bugger le formulaire c'était la balise ID sur le bouton submit. Je restais focalisé sur le php alors que c'était juste sur les balises :oops:
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut