Controle données formulaire

Bonjour,

Dans un formulaire j'ai un champ de 3 caractères qui doit etre obligatoirement rempli. j'ai une page PHP qui fait les traitements de mon formulaire (insertion des données dans une base MySql) mais je voudrai indiquer de bien remplir ce champ si ce n'est pas fait.

J'ai essayé de faire avec un if mais je n' y arrive pas.

Merci pour votre aide... voici le code actuel qu ine fonctionne pas
if ($reponse="")
{

print("Veuillez remplir le champ trigramme");
}
else
{

print("Champ trigramme ok");
}

22 réponses

Résumé de la discussion

Le fil porte sur la validation d'un champ trigramme de trois caractères dans un formulaire PHP, afin d'éviter l'insertion dans la base tant que le champ n'est pas renseigné. Plusieurs réponses proposent une validation côté client via JavaScript, vérifiant que le champ auteur n'est pas vide et, le cas échéant, que sa longueur respecte trois caractères, puis soumettent. D'autres solutions suggèrent d'utiliser un bouton caché déclenché par un script après contrôle, ou d'ajouter l'attribut maxlength et des vérifications serveur en PHP avec empty() ou strlen(). En pratique, il est conseillé une double vérification, côté client pour l'expérience utilisateur et côté serveur pour la sécurité, et d'éviter les erreurs comme $reponse = '' au lieu de empty($reponse).

Bobot (l’IA à votre service)
  1. J'ai un soucis avec l'insertion dans une table mysql de l'ip d'un client car il me met : Undefined index: IPauteur

    $IPauteur = $_SERVER["REMOTE_ADDR"] ;
    print ("<b> $IPauteur </B>") ;

    // requete SQL d'enregistrement du sondage
    $requete="INSERT INTO sondage(idsond,auteur,ipauteur,reponse) VALUES('','".$_POST['auteur']."','".$_POST['IPauteur']."','".$_POST['reponse']."')";
    $resultat=mysql_query($requete);
    1. c'est peut etre une erreur de synthaxe, pourquoi t'as des points des guillemets et des cotes !!! essai plein de trucs différents pour trouver la bonne synthaxe et si c'est pas ca, je ne sais pas!

      Flipody
  2. ba la j'ai supprimé tous les espaces, mais ca marche toujours pas :(

    <SCRIPT LANGUAGE="JavaScript">
    function verifForm()
    {
    if( formulaire.new_numprest.value == ""||formulaire.new_site_num1.value==""||
    formulaire.new_site_num2.value==""||formulaire.new_etb.value==""||
    formulaire.new_type_liaison.value==""||formulaire.new_numprest.value==""||
    formulaire.new_communaute.value==""||formulaire.new_contact.value==""||
    formulaire.new_tl.value==""||formulaire.new_page_stat.value==""||
    formulaire.new_vp_vc.value=="")
    alert('Le champ est vide !!!');
    else
    formulaire.go.click();
    }
    </SCRIPT>

    l'informatique ca rend fou!!!!!
    1. Je ne t'ai pas dit de supprimer tous les espaces !! :)

      Simplement commence par écrire if (...) et non if( ...)

      Ensuite en principe on met un espace avant et après chaque || , mais je ne sais pas si ça a une importance ou non.

      .::: "A trop vouloir feindre de faire fi, on finit 
      par faire fi de vouloir feindre." 
      :::.
    2. @flokochaet bien en fait, il semblerait que le probleme vienne du fait qe ce sont des && qu'il faut, et non des ||...
      je trouve pas ca tres logique mais bon... qu'a cele ne tienne!! si y veut ca je lui met ca:p

      l'informatique ca rend fou!!!!!
    3. @layorkSi tu mets des && ton script n'a plus aucun sens. Il n'affichera l'alerte que si aucun champ n'est rempli !

      .::: "A trop vouloir feindre de faire fi, on finit 
      par faire fi de vouloir feindre." 
      :::.
    4. @flokochatu a raison, donc j'ai remdifier et ca marche....
      c'est a n'y rien comprendre ;)

      l'informatique ca rend fou!!!!!
  3. Il faut faire attention à la syntaxe aussi ! ;)

    Tu as des espaces mal placés, et certains manquent... Relis ton script !

    .::: "A trop vouloir feindre de faire fi, on finit 
    par faire fi de vouloir feindre." 
    :::.
    1. ba c est nikel, ca marche avec 1, mais avec plein , ca marche po :(

      <SCRIPT LANGUAGE="JavaScript">
      function verifForm()
      {
      if( formulaire.new_numprest.value == "" || formulaire.new_site_num1.value=="" || formulaire.new_site_num2.value=="" ||
      formulaire.new_etb.value=="" || formulaire.new_type_liaison.value=="" || formulaire.new_numprest.value=="" ||formulaire.new_communaute.value=="" ||
      formulaire.new_contact.value=="" || formulaire.new_tl.value=="" || formulaire.new_page_stat.value=="" || formulaire.new_vp_vc.value=="")
      alert('Le champ est vide !!!');
      else
      formulaire.go.click();
      }
      </SCRIPT>

      l'informatique ca rend fou!!!!!
      1. Et bien tu définis ta fonction comme ça :
        function verifForm(formulaire) {...}

        Ce qui signifie que cette fonction a besoin d'un argument ("formulaire") pour fonctionner.
        Il faut donc qu'au moment où tu appelles ta fonction, tu lui transmettes cet argument qu'elle attend.
        Or toi tu appelles cette fonction comme ça :
        onClick="verifForm()"
        Dans ce cas tu ne lui passes aucun argument, il faut que tu écrives
        onClick="verifForm(this.form)">

        Mais si tu veux obtenir quelque chose de concluant, utilise la fonction de Flipody.

        .::: "A trop vouloir feindre de faire fi, on finit 
        par faire fi de vouloir feindre." 
        :::.
        1. effectivement, dans ta fonction enleve l'argument
          en fait voila ta fonction com elle doit l'etre :

          <SCRIPT LANGUAGE="JavaScript">
          function verifForm()
          {
          if( formulaire.new_numprest.value == "")
          alert('Le champ est vide !!!');
          else
          formulaire.go.click();
          }
          </SCRIPT>
          1. C'est normal que ça ne marche pas, tu ne passes pas d'argument à ta fonction quand tu l'appelles !

            .::: "A trop vouloir feindre de faire fi, on finit 
            par faire fi de vouloir feindre." 
            :::.
            1. bon, j'ai pile le meme probleme, mais le truc c'est que moi ca marche po :(
              j'ai "essayé" de faire comme vous l'avez indiqué, mais lorsqe je lance ma page, c'est marqué en bas "erreur sur la page"
              si vous poviez meclairer ce serait cool ;)

              voici mon code:

              <html>
              <head>
              <title>Modifications</title>
              <SCRIPT LANGUAGE="JavaScript">
              function verifForm(formulaire){
              if( formulaire.new_numprest.value == "")
              alert('Le champ est vide !!!');
              else
              formulaire.submit();
              }
              </SCRIPT>

              </head>
              <body bgcolor="lightblue">
              <img border="0" src="caliseo.jpg"><br>

              <?
              $bdd = "auvergnelocal";
              $user = "root";
              $passwd = "";
              $host = "localhost";
              $numsite = $_GET['site_num1'];
              $site_num2 = $_GET['site_num2'];

              mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
              mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");

              $requete=mysql_query("SELECT * FROM `adherent` WHERE site_num1=$numsite AND site_num2=$site_num2 " );
              $donnees = mysql_fetch_array ($requete)
              ?>

              <form name=formulaire ACTION="traitement.php" METHOD="get">
              <table border="3" cellspacing="6" cellpadding="5">
              <tr>
              <td><INPUT TYPE="Hidden" NAME="site_num1" VALUE="<? echo $numsite; ?>"></td>
              <td><INPUT TYPE="Hidden" NAME="site_num2" VALUE="<? echo $site_num2; ?>"></td>
              </tr>

              <tr>
              <td>Nom:</td>
              <td><input type="texte" name="new_nm" size="20" value="<?echo($donnees['nm']);?>"></td>
              </tr>

              <tr>
              <td>Nom de l etablissement: </td>
              <td><input type="texte" name="new_etb" size="20" value="<?echo($donnees['etb']);?>"></td>
              <tr>
              <tr>
              <td>Code postal:</td>
              <td><input type="texte" name="new_cp" size="20" value="<?echo($donnees['cp']);?>"></td>
              <tr>
              <tr>
              <td>Adresse:</td>
              <td><input type="texte" name="new_ad" size="20" value="<?echo($donnees['ad']);?>"></td>
              <tr>
              <tr>
              <td>Ville:</td>
              <td><input type="texte" name="new_vl" size="20" value="<?echo($donnees['vl']);?>"></td>
              <tr>
              <tr>
              <td>Type de liaison:</td>
              <td><input type="texte" name="new_type_liaison" size="20" value="<?echo($donnees['type_liaison']);?>"></td>
              <tr>
              <tr>
              <td>Numero de prestation:</td>
              <td><input type="texte" name="new_numprest" size="20" value="<?echo($donnees['numprest']);?>"></td>
              <tr>
              <tr>
              <td>Communauté:</td>
              <td><input type="texte" name="new_communaute" size="20" value="<?echo($donnees['communaute']);?>"></td>
              <tr>
              <tr>
              <td>IPlan:</td>
              <td><input type="texte" name="new_iplan" size="20" value="<?echo($donnees['iplan']);?>"></td>
              <tr>
              <tr>
              <td>masque lan:</td>
              <td><input type="texte" name="new_masque_lan" size="20" value="<?echo($donnees['masque_lan']);?>"></td>
              <tr>
              <tr>
              <td>ipmgmt:</td>
              <td><input type="texte" name="new_ipmgmt" size="20" value="<?echo($donnees['ipmgmt']);?>"></td>
              <tr>
              <tr>
              <td>contact:</td>
              <td><input type="texte" name="new_contact" size="20" value="<?echo($donnees['contact']);?>"></td>
              <tr>
              <tr>
              <td>tel:</td>
              <td><input type="texte" name="new_tl" size="20" value="<?echo($donnees['tl']);?>"></td>
              <tr>
              <tr>
              <td>page stat:</td>
              <td><input type="texte" name="new_page_stat" size="20" value="<?echo($donnees['page_stat']);?>"></td>
              <tr>
              <tr>
              <td>vp vc:</td>
              <td><input type="texte" name="new_vp_vc" size="20" value="<?echo($donnees['vp_vc']);?>"></td>
              <tr>
              <tr>
              <td>circuit BNC:</td>
              <td><input type="texte" name="new_circuit_BNC" size="20" value="<?echo($donnees['circuit_BNC']);?>"></td>
              <tr>
              <tr>
              <td>materiel actif:</td>
              <td><input type="texte" name="new_materiel_actif" size="20" value="<?echo($donnees['materiel_actif']);?>"></td>
              <tr>
              <tr>
              <td>serial IPSEC:</td>
              <td><input type="texte" name="new_serial_IPSEC" size="20" value="<?echo($donnees['serial_IPSEC']);?>"></td>
              <tr>
              <tr>
              <td>IPwan:</td>
              <td><input type="texte" name="new_ipwan" size="20" value="<?echo($donnees['ipwan']);?>"></td>
              <tr>
              <tr>
              <td>masque wan:</td>
              <td><input type="texte" name="new_masque_wan" size="20" value="<?echo($donnees['masque_wan']);?>"></td>

              <tr>
              <tr>
              <td>IP lan2:</td>
              <td><input type="texte" name="new_iplan2" size="20" value="<?echo($donnees['iplan2']);?>"></td>
              <tr>

              </table>
              <input type="button" value="Ok" name="bouttonok" onClick="verifForm()">
              <input type="submit" name=go style="visibility:hidden;">
              </form>

              <?mysql_close();?>
              <a href=siteman.php>Retour a la page d acceuil</a>
              </body>
              </html>

              l'informatique ca rend fou!!!!!
              1. oui il y a une toute petite erreur dans ta fonction javascript, remplace cette ligne : formulaire.submit(); par celle ci :
                formulaire.go.click();

                je pense que ca doit marcher.

                Flipody
            2. <input type="submit" name=go style="visibility:hidden;">
              Cette ligne de code est un bouton du formulaire, c'est le bouton submit qui lance ta page php si ton controle est bon, seulement, on ne veut pas le voir donc on rajoute un style pour le rendre invisible (visibility:hidden;)
              Il est exécuté si tu regarde bien dans la fonction Javascript par : sondage.go.click();

              Sinon pour récupérer l'adresse ip , en javascript je ne l'ai jamais fais, mais il me semble que c'est un peu plus compliqué qu'en PHP. Car en PHP il n'y a qu'une ligne com l'a di flokocha : echo "IP : $REMOTE_ADDR";

              Flipody
              1. Ah pardon j'avais pas vu que tu voulais le faire en Java.

                .::: "A trop vouloir feindre de faire fi, on finit 
                par faire fi de vouloir feindre." 
                :::.
                1. La variable $_SERVER["REMOTE_ADDR"] te donne l'IP du client.

                  .::: "A trop vouloir feindre de faire fi, on finit 
                  par faire fi de vouloir feindre." 
                  :::.
                  1. Wahou!! Merci beaucoup ...ca marche niquel je vais faire ca pour ma zone de texte du coup!!!!

                    Pourrais tu m'expliquer cette ligne de code :
                    <input type="submit" name=go style="visibility:hidden;">

                    Et sinon je souhaite qu'une seule personne puisse voter. Il faut que j'utilise l'IP privée de chaque poste mais je crois qu'avec du java c possible et plus simple qu'avec du php....Connais tu ce domaine?
                    1. C'est normal dans la mesure ou sur le click submit l'action du formulaire se lance, essai ce code :

                      dans ta balise <head>
                      <SCRIPT LANGUAGE="JavaScript">
                      function verifForm()
                      {
                      if(sondage.auteur.value == "")
                      alert('Vous avez oublié de saisir votre trigramme !');
                      else
                      sondage.go.click();
                      }
                      </script>

                      dans ta balise <body>
                      <form name="sondage" method="post" action="http://*****/pages/voyages/sondage.php">
                      <input type="text" name="auteur" size="20"> //ici c'est ta zone de texte a vérifier
                      <input type="button" value="Ok" name="bouton" onClick="verifForm()"> //ici le bouton sur lequel d'effectue le controle
                      <input type="submit" name=go style="visibility:hidden;"> //ici le bouton (caché) qui s'executera si le controle est bon et qui lancera ta page php
                      </form>

                      Bon courage
                      Flipody
                      1. salut, je suis dans le meme cas que le posteur du mess, et en fait e me demandai un truc
                        comment l'utilisateur va valider, si le bouton est hidden???
                        <input type="submit" name=go style="visibility:hidden;">

                        l'informatique ca rend fou!!!!!
                      2. c'est la qu'il y a l'astuce, en fait il y a deux boutons ! un premier visible qui exectue la fonction javascript et un deuxieme invisible qui est juste la pour lancer l'action du formulaire et ainsi recupere les données PHP ensuite sans pb. Ce bouton submit est executé dans la fonction

                        Flipody
                    2. Ouais je viens de tesetr avec la deuxième solution et des que je clique sur le bouton ok de la fenettre alert ca me redirige vers ma page....

                      <SCRIPT LANGUAGE="JavaScript">
                      function verifForm(formulaire)
                      {
                      if(sondage.auteur.value == "")
                      alert('Vous avez oublié de saisir votre trigramme !');
                      else
                      return true;
                      }
                      </script>
                      <form name="sondage" method="post" action="http://*****/pages/voyages/sondage.php" onSubmit="return verifForm(this.form)">
                      1. Cela fonctionne sauf que lorsque le champ est vide j'ai bien le message qui s'affiche mais la redirection vers ma page php se fait qand meme!! C'est un peu embetant! :-)
                        1. Tu as bien repris la deuxième solution du message que je t'ai donné et pas la première ?

                          .::: "A trop vouloir feindre de faire fi, on finit 
                          par faire fi de vouloir feindre." 
                          :::.
                        2. Ah oui pardon, j'ai fait un oubli sur le message que je t'ai donné !

                          Il faut en réalité écrire :
                          onSubmit="return verifForm(this.form)"

                          .::: "A trop vouloir feindre de faire fi, on finit 
                          par faire fi de vouloir feindre." 
                          :::.
                      2. Hum oui je pense ke flokocha a raison, il serai plus judicieux d'effectuer le controle dans la page html au moment ou tu clique sur le bouton submit, de plus le code en javascript n'est pas trop lourd. Parce que si tu controle dans la page php, dans le cas ou l'utilisateur n'aurai pas saisi, il faudrai lui faire retourner a la page html pour qu'il recommence je suppose, dc ca c'est plutot lourd!

                        Flipody
                        1. Voici le code de mon fichier html :

                          <form name="sondage" method="post" action="http://******/****/****/sondage.php">
                          <table width="60%" border="0" cellspacing="0" cellpadding="0">
                          <tr>
                          <td class="texte"><p> </p>
                          <p align="center" class="boutonaccueil">Que souhaitez vous effectuer comme sorties?</p>
                          <p> </p></td>
                          </tr>
                          <tr>
                          <td class="texte"><div align="center"></div>
                          <table width="100%" border="0" cellspacing="0" cellpadding="0">
                          <tr>
                          <td class="texte">Trigramme : </td>
                          <td><input name="auteur" type="text" size="3" maxlength="3"></td>
                          </tr>
                          <tr>
                          <td width="31%" class="texte">Souhait : </td>
                          <td width="69%"><p>
                          <textarea name="reponse" id="reponse"></textarea>
                          </p>
                          <p><span class="pied">(255 caractères maximum) </span></p></td>
                          </tr>
                          </table>
                          </td>
                          </tr>
                          <tr>
                          <td height="99"><div align="center">
                          <br>
                          <p><input type="submit" Value="Valider"></p>

                          <p align="left"> </p>
                          </div>
                          </td>
                          </tr>
                          </table>
                          </form>

                          et mon fichier php qui recupere cela :

                          <?php
                          if ($reponse="")
                          {

                          print("Veuillez remplir le champ trigramme");
                          }
                          else
                          {

                          print("Champ trigramme ok");
                          }
                          // utilisation du fichier librairie contenant les différentes fonctions
                          include("../librairies/librairiebdd.php");

                          // utilisation de la fonction pour ouvrir la BDD
                          $link=OuvreBase("***");

                          // requete SQL d'enregistrement du sondage
                          $requete="INSERT INTO sondage(idsond,auteur,reponse) VALUES('','".$_POST['auteur']."','".$_POST['reponse']."')";
                          $resultat=mysql_query($requete);

                          // fermeture de la BDD
                          FermeBase($link);

                          ?>
                          1. Comment as tu récupéré des données ?
                            Peut tu mettre ton code des deux pages pour voir un peu plus clair! =)

                            Flipody
                            • 1
                            • 2