Champs facultatifs dans un formulaire

Petit nouveau ! | 3 Messages

05 juil. 2019, 11:58

Bonjour à tous ! je suis nouvelle et assez débutante ! Je suis actuellement en stage pour créer une base de données naturaliste dans un bureau d'étude. Ce n'est pas ma formation de base mais comme ça me passionne, j'ai dit GO ! Mais voilà, après moultes galères, franchies avec brio ( Tadaaaaaa), j'en ai une qui me tient depuis 3 jours...

J'ai créé le formulaire de saisie des observations suivant :
<!DOCTYPE html>

<html>

  <head>
            <link href="bootstrap/css/bootstrap.css" rel="stylesheet">
            <link href="style.css" rel="stylesheet">
            <link rel="stylesheet" type="text/css" href="icons/font/flaticon.css">
        <!--    <link rel="stylesheet" href="TEST_MENU/style.css"> -->
            <meta charset="utf-8"/>
          <!--  <title> Menu Principal </title> -->

  </head>

  <body >

                                                  <!-- HTML -->
<div class="container col-lg-12 MENU scrolling" id="">

<h1 class= "row Header2 col-lg-6 relative ColorRecherche"> Saisie des observations</h1>

        <div class="col-lg-12 ">



                          <div class="Module col-lg-12 col-xs-12">

                            <form method="post" action="P_FormEnvoi.php" class="FormRecherche FormAlign col-lg-12 col-xs-12" >

                              <div class="FieldLabelAlign col-lg-6 col-xs-6 " >
                                <label for="Nom_lat"> Nom latin :</label>
                                <label for="Nom_Ver"> Nom vernaculaire :</label>
                                <label for="Nb_ind"> Nombre d'individus :</label>
                                <label for="Cmtr"> Commentaire(s) :</label>
                                <label for="Localisation"> Localisation :</label>
                                <label for="Observateur"> Observateur :</label>
                                <label for="N_affaire"> Numero d'affaire :</label>

                              </div>

                              <div class="FieldLabelAlign col-lg-6 col-xs-6">
                                <input type="text" name="Nom_lat" id="Nom_lat" autofocus required/>
                                <input type="text" name="Nom_Ver" id="Nom_Ver" />
                                <input type="text" name="Nb_ind" id="Nb_ind" />
                                <input type="text" name="Cmtr" id="Cmtr"  />
                                <input type="text" name="Observateur"  id="Observateur" />
                                <input type="text" name="N_affaire"  id="N_affaire" />
                            </div>

                            <div class="FieldLabelAlign col-xs-6" >
                              <label for="Methode"> Methode :</label>
                              <label for="Recouvrement"> Recouvrement :</label>
                              <label for="Sexe"> Sexe :</label>
                              <label for="Stade_dev"> Stade de développement :</label>
                              <label for="Statut_repro"> Statut reproducteur :</label>

                            </div>

                            <div class="FieldLabelAlign col-xs-6">
                              <select name="Methode" id="Methode" size="1">
                                          <option></option>
                                          <option>Vu</option>
                                          <option>Entendu</option>
                                          <option>Exuvie</option>
                                          <option>Trace/indice</option>
                                          <option>Inconnu</option>
                                          <option>Nid/Gîte</option>
                                          <option>Ultrason</option>
                                          <option>Vu ET Entendu</option>
                                          <option>En main/prélèvement</option>

                            </select>

                              <select name="Recouvrement" id="Recouvrement" size="1">
                                          <option></option>
                                          <option>0%</option>
                                          <option>25%</option>
                                          <option>50%</option>
                                          <option>75%</option>
                                          <option>100%</option>

                      </select>
                      <select name="Sexe" id="Sexe" size="1">

                              <option>Inconnu</option>
                              <option>Femelle</option>
                              <option>Mâle</option>
                              <option>Mixte</option>
                      </select>
                      <select name="Stade_dev" id="Stade_dev" size="1">
                                  <option></option>
                                  <option>Indéterminé</option>
                                  <option>Oeuf</option>
                                  <option>Larve</option>
                                  <option>Chrysalide</option>
                                  <option>Exuvie</option>
                                  <option>Adulte</option>

                      </select>
                      <select name="Statut_repro" id="Statut_repro" size="1">
                                  <option></option>
                                  <option>Inconnu</option>
                                  <option>Non reproducteur</option>
                                  <option>Reproducteur possible</option>
                                  <option>Reproducteur probable</option>
                                  <option>Reproducteur certain</option>
                      </select>
                  </div>

                            <div class="SendQuiery">
                                <input type="submit" name="Rechercher"  value="ENVOYER"/>
                            </div>

                            </form>

                          </div>




        </div>



            <!-- MENU -->

            <input type="checkbox" id="togglebox" />

            <nav id="offcanvas-menu">
              <ul class="menu">
                <li>
                  <a href="P_Accueil.php">Accueil</a>
                </li>
                <li>
                  <a href="P_Creation.php">Création</a>
                </li>
                <li>
                  <a href="P_Saisie.php">Saisie</a>
                </li>
                <li>
                  <a href="P_Modification.php">Modification</a>
                </li>
                <li>
                  <a href="P_Recherche.php">Recherche</a>
                </li>
                <li>
                  <a href="P_Support.php">Support</a>
                </li>
              </ul>
            </nav>

            <div id="contentarea">
              <label for="togglebox" id="navtoggler">Menu</label>

            </div>

            <!--Fin Menu-->




           </div>




                                          <!-- RETOUR CONDITION PHP -->


  </body>


</html>
et celui ci, après validation, m'envoie sur cette page :
<!DOCTYPE html>

<html>

  <head>
            <link href="bootstrap/css/bootstrap.css" rel="stylesheet">
            <link href="style.css" rel="stylesheet">
            <link rel="stylesheet" type="text/css" href="icons/font/flaticon.css">
        <!--    <link rel="stylesheet" href="TEST_MENU/style.css"> -->
            <meta charset="utf-8"/>
          <!--  <title> Menu Principal </title> -->

  </head>

  <body >

                                                  <!-- HTML -->
<div class="container col-lg-12 MENU scrolling" id="">




<?php

try
{
  // PDO
    // Logins
    $bdd = new PDO('mysql:host=mysql-naemeris.alwaysdata.net; dbname=naemeris_bdd_test_mig; charset = utf8', 'naemeris', '************************');
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}

catch (Exception $e)
{
    // Message erreur
  die('Erreur : ' . $e->getMessage());
}

$tab = array(
':nomlat' => $_POST['Nom_lat'],
':observateur' => (empty($_POST['Observateur']) ? NULL : $_POST['Observateur']),
':sexe' => $_POST['Sexe'],
':methode' => $_POST['Methode'],
':stade_dev' => $_POST['Stade_dev'],
':statut_repro' => $_POST['Statut_repro']);

    //Creation de la requete INSERT :
$sql ='INSERT INTO observation (id_ESP,id_OBR,id_SEX,id_MET,id_STR,id_STD) SELECT id_ESP,id_OBR,id_SEX,id_MET,id_STR,id_STD FROM espece,observateur,sexe,methode,statut_repro,stade_dev WHERE espece.NOM_LAT=:nomlat
 AND observateur.OBSERVATEUR=:observateur AND sexe.SEXE=:sexe AND methode.METHODE=:methode AND statut_repro.STATUT_REPRO=:statut_repro AND stade_dev.STADE_DEV=:stade_dev';

 $req = $bdd->prepare($sql);

 if ($req->execute($tab)) {
     echo 'Insertion effectuée';
 } else {
     echo 'Erreur d\'insertion';
 }




                      ?>


                      <?php
                    var_dump($_POST);
                                  $req-> closeCursor();
                      ?>


        </div>








           </div>




                                          <!-- RETOUR CONDITION PHP -->


  </body>


</html>
Le principe est le suivant : Seul mon champ Nom_Lat est obligatoire, les autres pourrons ne pas être remplis, soit parce que l'observation ne les concernent pas ( exemple : la faune n'a pas besoin du recouvrement) soit parce qu'il ne sont pas connus lors de la saisie et pourrons être renseigné plus tard via un formulaire de modification.

Le problème est que quand je ne remplit pas l'un des champs, cela ne me crée pas de nouvelle entrée dans ma base de données, tandis que cela marche quand ils sont tous renseignés.
j'ai essayé de suivre une personne qui avait le même souci que moi, sauf que si pour lui c'est résolu, ce n'est pas mon cas.

(php-debutant/inserer-null-dans-bdd-lors ... 77684.html)

Je fais pour l'instant des essais uniquement avec quelques champs (nomlat,observateur,sexe,methode,std et str) et j'essaye de ne pas remplir le champs observateur.

Si vous avez des pistes.. car je sèche totalement... MERCI d'avance !

Mammouth du PHP | 2703 Messages

05 juil. 2019, 13:27

quel est le contenu de la table Sexe par exemple ?

Petit nouveau ! | 3 Messages

05 juil. 2019, 13:52

Bonjour ! Ma table sexe contient une colonne id_SEX et une colonne SEXE avec le sexe correspondant .
donc j'ai : id_SEX : 1,2,3,4 et SEXE : Inconnu, Femelle, Mâle, Mixte
SEXE est Default Null et Null autorisé

Mammouth du PHP | 2703 Messages

05 juil. 2019, 14:05

la bonne manière de faire :
compléter les champs option en html pour ajouter l'id.
et la requete d'insertion devient classique :
INSERT INTO observation (id_ESP,id_OBR,id_SEX,id_MET,id_STR,id_STD) values (:nomlat, :observateur, :sexe, :methode, :statut_repro, :stade_dev)

Petit nouveau ! | 3 Messages

05 juil. 2019, 19:19

Oh ! Je n'y avais pas penser ! c'est vrai que ça peut être beaucoup plus simple. mais du coup, puis-je cacher ces id en affichage ? car je ne voudrais pas d'un truc du genre : "1 : Mâle" "2 : Femelle" ..

Mammouth du PHP | 2703 Messages

05 juil. 2019, 23:47


akli
Invité n'ayant pas de compte PHPfrance

11 juil. 2019, 14:39

bonjour
si au niveau du programme tu as defini qu'un seul champ obligatoire et le reste optionnel et ca ne marche pas au moment de la validation dans ce cas il faut verifier au niveau de la table que tu as accepte la valeur null pour les champs