Partage
  • Partager sur Facebook
  • Partager sur Twitter

Compter champs spécifique d'un formulaire

Sujet résolu
11 octobre 2018 à 22:59:01

(SUJET RÉSOLU : pour toutes ceux et celles qui lirez ce sujet, prenez le temps de bien tout regarder, les contributeurs ont fait un super travail et de nombreux exemples de codes sont cités et expliqués... bonne lecture)

Bonsoir à toute et tous,

J'ai un formulaire qui va envoyer des info sur une page de traitement et je cherche à tester certains champs, si ils sont remplient, alors je compte 1.

En gros, j'ai 5 salariés avec pour chaque, Civilité, Nom, Prénom, voici le code html :

<div class="panel-group" id="accordion">
                                    <div class="panel panel-default">
                                        <div class="panel-heading">
                                            <h4 class="panel-title">
                                                <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">Salarié 1</a>
                                            </h4>
                                        </div>
                                        <div id="collapseOne" class="panel-collapse collapse in">
                                            <div style="padding:5px;">
                                                <div class="form-group">
                                                    <label for="cv_effectif1">Civilité Effectif formé :</label>
                                                    <select class="form-control" id="cv_effectif1" name="civilite_effectif1">
                                                          <option value="Mr">Mr</option>
                                                          <option value="Mme">Mme</option>
                                                        </select>
                                                </div>
                                                <div class="form-group">
                                                    <label for="nom_effectif1">Nom effectif formé :</label>
                                                    <input class="form-control" type="text" id="nom_effectif1" name="nom_effectif1" placeholder="Nom de l'effectif formé...">
                                                </div>

                                                <div class="form-group">
                                                    <label for="prenom_effectif1">Prénom effectif formé :</label>
                                                    <input class="form-control" type="text" id="prenom_effectif1" name="prenom_effectif1" placeholder="Prénom de l'effectif formé...">
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="panel panel-default">
                                        <div class="panel-heading">
                                            <h4 class="panel-title">
                                                <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">Salarié 2</a>
                                            </h4>
                                        </div>
                                         <div id="collapseTwo" class="panel-collapse collapse">
                                            <div style="padding:5px;">
                                                <div class="form-group">
                                                    <label for="cv_effectif2">Civilité Effectif formé :</label>
                                                    <select class="form-control" id="cv_effectif2" name="civilite_effectif2">
                                                          <option value="Mr">Mr</option>
                                                          <option value="Mme">Mme</option>
                                                        </select>
                                                </div>
                                                <div class="form-group">
                                                    <label for="nom_effectif2">Nom effectif formé :</label>
                                                    <input class="form-control" type="text" id="nom_effectif2" name="nom_effectif2" placeholder="Nom de l'effectif formé...">
                                                </div>

                                                <div class="form-group">
                                                    <label for="prenom_effectif2">Prénom effectif formé :</label>
                                                    <input class="form-control" type="text" id="prenom_effectif2" name="prenom_effectif2" placeholder="Prénom de l'effectif formé...">
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="panel panel-default">
                                        <div class="panel-heading">
                                            <h4 class="panel-title">
                                                <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">Salarié 3</a>
                                            </h4>
                                        </div>
                                         <div id="collapseThree" class="panel-collapse collapse">
                                            <div style="padding:5px;">
                                                <div class="form-group">
                                                    <label for="cv_effectif3">Civilité Effectif formé :</label>
                                                    <select class="form-control" id="cv_effectif3" name="civilite_effectif3">
                                                          <option value="Mr">Mr</option>
                                                          <option value="Mme">Mme</option>
                                                        </select>
                                                </div>
                                                <div class="form-group">
                                                    <label for="nom_effectif3">Nom effectif formé :</label>
                                                    <input class="form-control" type="text" id="nom_effectif3" name="nom_effectif3" placeholder="Nom de l'effectif formé...">
                                                </div>

                                                <div class="form-group">
                                                    <label for="prenom_effectif3">Prénom effectif formé :</label>
                                                    <input class="form-control" type="text" id="prenom_effectif3" name="prenom_effectif3" placeholder="Prénom de l'effectif formé...">
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="panel panel-default">
                                        <div class="panel-heading">
                                            <h4 class="panel-title">
                                                <a data-toggle="collapse" data-parent="#accordion" href="#collapseFour">Salarié 4</a>
                                            </h4>
                                        </div>
                                         <div id="collapseFour" class="panel-collapse collapse">
                                            <div style="padding:5px;">
                                                <div class="form-group">
                                                    <label for="cv_effectif4">Civilité Effectif formé :</label>
                                                    <select class="form-control" id="cv_effectif4" name="civilite_effectif4">
                                                          <option value="Mr">Mr</option>
                                                          <option value="Mme">Mme</option>
                                                        </select>
                                                </div>
                                                <div class="form-group">
                                                    <label for="nom_effectif4">Nom effectif formé :</label>
                                                    <input class="form-control" type="text" id="nom_effectif4" name="nom_effectif4" placeholder="Nom de l'effectif formé...">
                                                </div>

                                                <div class="form-group">
                                                    <label for="prenom_effectif4">Prénom effectif formé :</label>
                                                    <input class="form-control" type="text" id="prenom_effectif4" name="prenom_effectif4" placeholder="Prénom de l'effectif formé...">
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="panel panel-default">
                                        <div class="panel-heading">
                                            <h4 class="panel-title">
                                                <a data-toggle="collapse" data-parent="#accordion" href="#collapseFive">Salarié 5</a>
                                            </h4>
                                        </div>
                                        <div id="collapseFive" class="panel-collapse collapse">
                                            <div style="padding:5px;">
                                                <div class="form-group">
                                                    <label for="cv_effectif5">Civilité Effectif formé :</label>
                                                    <select class="form-control" id="cv_effectif5" name="civilite_effectif5">
                                                          <option value="Mr">Mr</option>
                                                          <option value="Mme">Mme</option>
                                                        </select>
                                                </div>
                                                <div class="form-group">
                                                    <label for="nom_effectif5">Nom effectif formé :</label>
                                                    <input class="form-control" type="text" id="nom_effectif5" name="nom_effectif5" placeholder="Nom de l'effectif formé...">
                                                </div>

                                                <div class="form-group">
                                                    <label for="prenom_effectif5">Prénom effectif formé :</label>
                                                    <input class="form-control" type="text" id="prenom_effectif5" name="prenom_effectif5" placeholder="Prénom de l'effectif formé...">
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>

Déjà, je cherche une solution pour que seulement si le salarié 1 est rempli, alors je permet de remplir le salarié 2 et ainsi de suite... Mon objectif et je pense que vous l'aurez compris est de pouvoir passer dans une variable le nombre de salariés ( de 1 à 5) et opérer sur ce chiffre des calculs.

J'ai regardé et essayé de tester avec count(), mais je n'arrive à rien, auriez-vous des pistes, des idées pour faire cela.

Merci d'avance pour vos réponses :)

-
Edité par Artof 19 octobre 2018 à 15:26:01

  • Partager sur Facebook
  • Partager sur Twitter
11 octobre 2018 à 23:09:14

Du java script peut etre ?
  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

11 octobre 2018 à 23:26:17

Disons que pour ce qui est d’afficher les champs salarié suivant que si le précédent est rempli , oui j’ai pensé au JavaScrip, il doit sûrement y avoir une solution PHP mais JavaScript semble plus Adapté !

la page de traitement sera en php et je dois compter le nombre de salariés envoyés par le formulaire (salarié 1 ok ... je compte 1 .... salarié 2 ok ... je compte 2 etc ...)

sur le nombre de salarié je dois faire des calculs puis passer cela en BDD.

merci d’avance pour vos réponses et idées etc (je débute mais depuis mes derniers post progresse, merci à toutes et tous :) )

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 0:21:30

Tu dois afficher en java si il rempli le 1 le 2 etc le traitement se fait en php avec des empty ou isset et tes req bdd
  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

12 octobre 2018 à 8:09:20

Vassili Joffroy a écrit:

Tu dois afficher en java si il rempli le 1 le 2 etc le traitement se fait en php avec des empty ou isset et tes req bdd


Merci pour ta réponse :) cependant, ca réponde pas ou partiellement à ma problématique, ca se passe en deux temps, d'abord, côté formulaire où si salarié 1 rempli alors on peut remplir le deux etc là, le javascript me semble une bonne solution mais je sais pas sur quelle base partir(les joie du débutant lol) ... puis l'envoi du formulaire, là je dois compter combien de salarié.

Côté page de traitement, j'ai pensé aux tests avec isset (ou empty) je vais faire des tests ce matin. l’algorithme donnerai ca (c'est l'idée de base) :

SI post salarié 1 est vrai --> alors NBsalarié = 1

   ET SI salarié 1 et salarié 2 est vrai --> alors NBsalarié = 2

   etc etc etc ...

Pour avoir au final le nombre de salariés et faire mes calculs, puis enregistrer cela en BDD.

Merci pour vos lumières :)

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 8:28:06

ou tu met ton post dans un array et tu count
  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

12 octobre 2018 à 9:15:08

Vassili Joffroy a écrit:

ou tu met ton post dans un array et tu count


Voici une base que je viens de faire pour la page de traitement afin de compter le nombre de salariés, je me suis limité à 2 salariés vu que je test, je cherche la méthode la plus propre et vu que je suis débutant je dois surement faire du code qui fera bondir certains lol), mais bon, j'apprend (je fait tout pour lol) au fure et mesure :)...

Voici ma base :

if(!empty($_POST['civilite_effectif1'])){
    if(!empty($_POST['nom_effectif1'])){
       if(!empty($_POST['prenom_effectif1'])) 
    }
    $count1 = 1;
}
else{
    $count1 = 0;
}

if(!empty($_POST['civilite_effectif2'])){
    if(!empty($_POST['nom_effectif2'])){
       if(!empty($_POST['prenom_effectif2'])) 
    }
    $count2 = 1;
}
else{
    $count2 = 0;
}

$count = $count1+$count2;
echo $count; 

Vos avis sont les bienvenus :)

Au plaisir de vous lire

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 9:34:44

Tu pourrai faire une boucle evitant les repetition :) si tu as 500 champs

-
Edité par Vassili Joffroy 12 octobre 2018 à 9:39:42

  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

12 octobre 2018 à 9:40:54

Bonjour,

Fait une division par 3 (si tu as que 3 infos sur chaque salarié) sur la taille de $_POST, et l'entier en sortie te diras le nombre d'employé.

Ou alors tu mets le même name pour tes inputs en tableau.

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 9:52:01

Vassili Joffroy a écrit:

Tu pourrai faire une boucle evitant les repetition :)si tu as 500 champs

-
Edité par Vassili Joffroy il y a moins de 30s


Heuuuu, une boucle ?... 

Matioso a écrit:

Bonjour,

Fait une division par 3 (si tu as que 3 infos sur chaque salarié) sur la taille de $_POST, et l'entier en sortie te diras le nombre d'employé.

Ou alors tu mets le même name pour tes inputs en tableau.

Mon formulaire comporte de nombreux champs, sur la partie salarié je dois certes compter le nombre de salarié envoyés, mais également écrire pour chaque salariés envoyés Civilité - Nom - Prénom, c'est pour cela que j'ai différencié chaque salariés (cela me paraissait logique...).

Sur ma page traitement, j'affiche :

  • Le nombre de salariés est de $count (le nombre de salariés envoyés)
  • Il y a : Mr Newbie Tom, Mme Japprend Julie, Mr Etc.. etc ..., ....

Je vous demande pas de me donner la solution mais de m'éclairer pour faire quelque chose de propre et fonctionnel :) merci pour tout, Au plaisir de vous lire...

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 10:03:46

TomDelorme a écrit:

Vassili Joffroy a écrit:

Tu pourrai faire une boucle evitant les repetition :)si tu as 500 champs

-
Edité par Vassili Joffroy il y a moins de 30s


Heuuuu, une boucle ?... 

Matioso a écrit:

Bonjour,

Fait une division par 3 (si tu as que 3 infos sur chaque salarié) sur la taille de $_POST, et l'entier en sortie te diras le nombre d'employé.

Ou alors tu mets le même name pour tes inputs en tableau.

Mon formulaire comporte de nombreux champs, sur la partie salarié je dois certes compter le nombre de salarié envoyés, mais également écrire pour chaque salariés envoyés Civilité - Nom - Prénom, c'est pour cela que j'ai différencié chaque salariés (cela me paraissait logique...).

Sur ma page traitement, j'affiche :

  • Le nombre de salariés est de $count (le nombre de salariés envoyés)
  • Il y a : Mr Newbie Tom, Mme Japprend Julie, Mr Etc.. etc ..., ....

Je vous demande pas de me donner la solution mais de m'éclairer pour faire quelque chose de propre et fonctionnel :) merci pour tout, Au plaisir de vous lire...

Une boucle qui fait ta verif pour x salarie donnee ou tu met ton formulaire en array comme ca un count suffira :)

  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

12 octobre 2018 à 10:15:11

Ca y est je suis perdu, ... tu as pas une base ou un modèle d'algo ?

J'étais parti sur empty (d'ailleurs, je n'y arrive pas, mon script marche pas et je sais pas pourquoi...) , là je sais plus où donner de la tête :/

Avant de me lancer sur les boucles (foreach je suppose) je fais une erreur sur ce code là ? :

if(!empty($_POST['civilite_effectif1'])){
    if(!empty($_POST['nom_effectif1'])){
       if(!empty($_POST['prenom_effectif1']))
    }
    $count1 = 1;
}
else{
    $count1 = 0;
}
 
if(!empty($_POST['civilite_effectif2'])){
    if(!empty($_POST['nom_effectif2'])){
       if(!empty($_POST['prenom_effectif2']))
    }
    $count2 = 1;
}
else{
    $count2 = 0;
}
 
$count = $count1+$count2;
echo $count;

Merci pour tout :)

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 10:24:09

Pourquoi faire une boucle pour y mettre dans un tableau alors que $_POST est déja un tableau ?

tu mets tes names de tes input de nom : name="nom[]"

et tu as juste a faire count($_POST['nom'])

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 10:24:31

Je vais sur ordi et jessaye de regarder

  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

12 octobre 2018 à 10:34:04

Matioso a écrit:

Pourquoi faire une boucle pour y mettre dans un tableau alors que $_POST est déja un tableau ?

tu mets tes names de tes input de nom : name="nom[]"

et tu as juste a faire count($_POST['nom'])


Oui mais je compte 1 seulement si les trois champs (civilité, nom, prénom) sont bien remplient, sinon, la mise en place du html donnerai cela en suivant ton idée ? :

<div class="panel panel-default">
                                        <div class="panel-heading">
                                            <h4 class="panel-title">
                                                <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">Salarié 1</a>
                                            </h4>
                                        </div>
                                        <div id="collapseOne" class="panel-collapse collapse in">
                                            <div style="padding:5px;">
                                                <div class="form-group">
                                                    <label for="cv_effectif1">Civilité Effectif formé :</label>
                                                    <select class="form-control" id="cv_effectif1" name="civilite[]">
                                                          <option value="Mr">Mr</option>
                                                          <option value="Mme">Mme</option>
                                                        </select>
                                                </div>
                                                <div class="form-group">
                                                    <label for="nom_effectif1">Nom effectif formé :</label>
                                                    <input class="form-control" type="text" id="nom_effectif1" name="nom[]" placeholder="Nom de l'effectif formé...">
                                                </div>
 
                                                <div class="form-group">
                                                    <label for="prenom_effectif1">Prénom effectif formé :</label>
                                                    <input class="form-control" type="text" id="prenom_effectif1" name="prenom[]" placeholder="Prénom de l'effectif formé...">
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="panel panel-default">
                                        <div class="panel-heading">
                                            <h4 class="panel-title">
                                                <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">Salarié 2</a>
                                            </h4>
                                        </div>
                                         <div id="collapseTwo" class="panel-collapse collapse">
                                            <div style="padding:5px;">
                                                <div class="form-group">
                                                    <label for="cv_effectif2">Civilité Effectif formé :</label>
                                                    <select class="form-control" id="cv_effectif2" name="civilite[]">
                                                          <option value="Mr">Mr</option>
                                                          <option value="Mme">Mme</option>
                                                        </select>
                                                </div>
                                                <div class="form-group">
                                                    <label for="nom_effectif2">Nom effectif formé :</label>
                                                    <input class="form-control" type="text" id="nom_effectif2" name="nom[]" placeholder="Nom de l'effectif formé...">
                                                </div>
 
                                                <div class="form-group">
                                                    <label for="prenom_effectif2">Prénom effectif formé :</label>
                                                    <input class="form-control" type="text" id="prenom_effectif2" name="prenom[]" placeholder="Prénom de l'effectif formé...">
                                                </div>
                                            </div>
                                        </div>
                                    </div>

Vassili Joffroy a écrit:

Je vais sur ordi et jessaye de regarder


Merci c'est cool :) je test encore avec empty de mon côté...



  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 10:41:26

en gros oui.

As tu besoin des "id" sur tes inputs ?

Si tu en as pas besoin (ou trouver une astuce pour incrémenter l'id), tu peux faire une fonction, par exemple au clique d'un bouton "Ajouter employé", ajouter a nouveau les 3 champs pour un nouvel employé.

Après dans ton PHP, tu auras 3 tableaux contenant "civilité", "nom" et "prénom".

Tu auras juste a faire un count sur l'un des 3 tableaux pour savoir le nombre d'employé.

Puis de faire un foreach pour récupérer les différentes informations des employés (étant donné que les clés de tes tableaux seront les même)

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 10:51:32

J'avais mis une id au cas ou, pour faire un autre traitement, je sais c'est pas propre mais comme plusieurs fois cité, je suis "newbie", j'ai pas encore la bonne logique mais cela viendra :)

Pour ce que tu me décrit, je ne suis pas encore capable de le mettre en place, enfin je pense, si tu as une piste sans me donner la solution (genre un modele d'algo), je suis preneur, cela me permettra d'avoir le process de traitement et de chercher comment l'appliquer :)

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 10:52:44

TomDelorme a écrit:

J'avais mis une id au cas ou, pour faire un autre traitement, je sais c'est pas propre mais comme plusieurs fois cité, je suis "newbie", j'ai pas encore la bonne logique mais cela viendra :)

Pour ce que tu me décrit, je ne suis pas encore capable de le mettre en place, enfin je pense, si tu as une piste sans me donner la solution (genre un modele d'algo), je suis preneur, cela me permettra d'avoir le process de traitement et de chercher comment l'appliquer :)


l'id sert pour les label ^^

tien regarde moi ça et dit moi si tu vois ou je veux en venir ?

<?php 

if (isset($_POST)){
	echo "<pre>";
	var_dump($_POST);
	echo "</pre>";
}

$nbr_effectif = 5;
?>
<form action="" method="POST">
<?php
for ($i=0; $i < $nbr_effectif; $i++) { ?>
	<select name="civilite_effectif<?=$i?>">
         <option value="Mr">Mr</option>
         <option value="Mme">Mme</option>
      </select><br>
   
     <input type="text" name="nom_effectif<?=$i?>" placeholder="Nom de l'effectif formé..."><br>

     <input type="text" name="prenom_effectif<?=$i?>" placeholder="Prénom de l'effectif formé..."><br><hr>
<?php
} ?>
<input type="submit">
</form>


ce qui donne

array(15) {
  ["civilite_effectif0"]=>
  string(2) "Mr"
  ["nom_effectif0"]=>
  string(0) ""
  ["prenom_effectif0"]=>
  string(0) ""
  ["civilite_effectif1"]=>
  string(2) "Mr"
  ["nom_effectif1"]=>
  string(0) ""
  ["prenom_effectif1"]=>
  string(0) ""
  ["civilite_effectif2"]=>
  string(2) "Mr"
  ["nom_effectif2"]=>
  string(0) ""
  ["prenom_effectif2"]=>
  string(0) ""
  ["civilite_effectif3"]=>
  string(2) "Mr"
  ["nom_effectif3"]=>
  string(0) ""
  ["prenom_effectif3"]=>
  string(0) ""
  ["civilite_effectif4"]=>
  string(2) "Mr"
  ["nom_effectif4"]=>
  string(0) ""
  ["prenom_effectif4"]=>
  string(0) ""
}

-
Edité par Vassili Joffroy 12 octobre 2018 à 10:54:07

  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

12 octobre 2018 à 10:59:03

Si je te donne un algo je pense que je te donnerai la solution, je vais essayé de te donner une aide pour que tu trouves (si jamais tu trouves pas, je te la donnerais)

Vu que tes inputs on le même name (ex : nom[], prenom[]), tu peux récupérer le nom et prénom du 1er employé a la clé "0" des 2 tableaux.

nom 1er employé : $_POST['nom'][0]

C'est pareil pour le prénom.

J'espère que je t'ai donné assez explication.

Edit : @vassili, je pense qu'il a un nombre d'employé variant, donc mettre un numéro sur les champs complique le code derrière selon moi.

-
Edité par Matioso 12 octobre 2018 à 11:00:40

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 11:00:09

Matioso a écrit:

Si je te donne un algo je pense que je te donnerai la solution, je vais essayé de te donner une aide pour que tu trouves (si jamais tu trouves pas, je te la donnerais)

Vu que tes inputs on le même name (ex : nom[], prenom[]), tu peux récupérer le nom et prénom du 1er employé a la clé "0" des 2 tableaux.

nom 1er employé : $_POST['nom'][0]

C'est pareil pour le prénom.

J'espère que je t'ai donné assez explication.

C'est aussi une idée soit nom[] soit nom1 c'est exactement pareil :D

  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

12 octobre 2018 à 11:11:03

Vassili Joffroy a écrit:

l'id sert pour les label ^^ Oui effectivement lol

tien regarde moi ça et dit moi si tu vois ou je veux en venir ? Je commente ton script

<?php 
//pour afficher le tableau
if (isset($_POST)){
	echo "<pre>";
	var_dump($_POST);
	echo "</pre>";
}
//tu défini le nombre effectif à 5
$nbr_effectif = 5;
?>
<form action="" method="POST">
//Tu génère les champs dynamiquement
<?php
// for = pour donc je traduit pour $i=0 $i inférieur à $nbr_effectif $i"++" j'écris html x $nbr_effectif en incrémentant de 1 à chaque fois (soit 5 fois chaque champs)
for ($i=0; $i < $nbr_effectif; $i++) { ?> <select name="civilite_effectif<?=$i?>"> <option value="Mr">Mr</option> <option value="Mme">Mme</option> </select><br> <input type="text" name="nom_effectif<?=$i?>" placeholder="Nom de l'effectif formé..."><br> <input type="text" name="prenom_effectif<?=$i?>" placeholder="Prénom de l'effectif formé..."><br><hr> <?php } ?> <input type="submit"> </form>


ce qui donne --> je suppose que c'est la dessus que je compte ensuite pour avoir mon nombre de salarié envoyé ???

array(15) {
  ["civilite_effectif0"]=>
  string(2) "Mr"
  ["nom_effectif0"]=>
  string(0) ""
  ["prenom_effectif0"]=>
  string(0) ""
  ["civilite_effectif1"]=>
  string(2) "Mr"
  ["nom_effectif1"]=>
  string(0) ""
  ["prenom_effectif1"]=>
  string(0) ""
  ["civilite_effectif2"]=>
  string(2) "Mr"
  ["nom_effectif2"]=>
  string(0) ""
  ["prenom_effectif2"]=>
  string(0) ""
  ["civilite_effectif3"]=>
  string(2) "Mr"
  ["nom_effectif3"]=>
  string(0) ""
  ["prenom_effectif3"]=>
  string(0) ""
  ["civilite_effectif4"]=>
  string(2) "Mr"
  ["nom_effectif4"]=>
  string(0) ""
  ["prenom_effectif4"]=>
  string(0) ""
}

Je bloque encore  sur comment savoir sur la page traitement si les trois champs de chaque salarié sont bien rempli et donc pouvoir compter 1 pour chaque salariés correctement envoyés ...

Merci en tous les cas de prendre le temps de m'expliquer, c'est franchement cool :) je me coucherai moins bête ce soir hé hé hé d'ailleurs :

...je dois partir au travail (j'en ai deux : brancardier et photographe pro et ... babyDev aujourd'hui), je reprend cette discussion ce soir en étudiant vos propositions, mon objectif est également d'apprendre, comprendre, mettre en application, j'ai commencé le cours php depuis hier, j'avais quelques notions de bases (mais vraiment de base lol, là je veux vraiment progresser :) )

Merci pour votre intérêt :)



-
Edité par Artof 12 octobre 2018 à 11:17:49

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 11:18:21

Le code que t'as donné @vassili ne te permet pas d'avoir un nombre d'employés variable, a moins de passer par une page en amont ou l'utilisateur spécifie le nombre d'employé.

Dans son code, tu as forcément 5 employés remplis ou non.

Après ce que je te proposais, c'est qu'avec une fonction JS pour ajouter dynamiquement des champs, tu peux avoir un nombre d'employés variable et surtout sans complexifié le code PHP.

-
Edité par Matioso 12 octobre 2018 à 11:19:05

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 11:33:15

Matioso a écrit:

Le code que t'as donné @vassili ne te permet pas d'avoir un nombre d'employés variable, a moins de passer par une page en amont ou l'utilisateur spécifie le nombre d'employé.

Dans son code, tu as forcément 5 employés remplis ou non.

Après ce que je te proposais, c'est qu'avec une fonction JS pour ajouter dynamiquement des champs, tu peux avoir un nombre d'employés variable et surtout sans complexifié le code PHP.

-
Edité par Matioso il y a 6 minutes

Oui je sais :) ... Je pensais côté formulaire à un select de 1 à 5 qui défini d'une part le nombre d'employés (que je récupère en traitement dans une variable $count) et afficherai en fonction le bon nombre de champs salarié à remplir :) ... j'essaie d'étudier les deux possibilités, le but étant d'avoir un code le plus léger possible, je reprend cette discussion ce soir car je dois partir au taf :)

En espèrant que vous suivrez cette discussion jusqu'au bout ... merci pour tout :)

-
Edité par Artof 12 octobre 2018 à 11:33:59

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 11:35:55

Ah, j'ai peut être mal compris la problématique si le code de @vassili est bon pour toi. Au moins tu as 2 façon de faire.

Je regarderai peut être demain, mais ce soir je pourrais pas.

Toujours disponible en MP si jamais.

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 13:31:06

Scette boucle peux aussi verifier les input aussi :)

Moi jaffiche les input mais tu peux les cacher en js :)

-
Edité par Vassili Joffroy 12 octobre 2018 à 13:32:43

  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

12 octobre 2018 à 15:51:23

Vassili Joffroy a écrit:

Scette boucle peux aussi verifier les input aussi :)

Moi jaffiche les input mais tu peux les cacher en js :)

-
Edité par Vassili Joffroy il y a environ 1 heure

Ton code est fonctionnel par rapport à ce que je recherche :)

je cherche juste une solution pour avoir un sélect qui me permette de choisir $nbr_effictif de 1 à 5

genre juste avant ton code comme ça et d’une jai mon nombre de salariés que je peux envoyer en traitement et de deux le bon nombre de champs :)

merci :)

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 15:56:14

Salut, en faisant une boucle for, tu peux avoir des name sous cette forme

name="salarie[$i]['nom']"

Quand tu valides le formulaire, tu boucle sur salarie et tu verifies si tout les champs sont renseignés, si c'est le cas.

tu met les infos du salarié dans un nouveau tableau

Après la boucle, tu fais un count de ton nouveau tableau.

exemple : 

<?php
	
	echo '<pre>';
	print_r($_POST);
	echo '</pre>';

	$salaries = array();
	foreach($_POST['salarie'] as $v){
		if(
			!empty($v['civilite']) &&
			!empty($v['nom']) &&
			!empty($v['prenom']) 
		){
			$salaries[] = $v;
		}
	}
	
	$salaries['nb'] = count($salaries);
	
	echo '<pre>';
	print_r($salaries);
	echo '</pre>';
?>


<form method="POST" action="">
	<?php
		for($i = 1; $i < 6; $i++){
		?>
			<h3>Salarié <?=$i?></h3>
			<select name="salarie[<?=$i?>][civilite]">
				<option value="Mr">Mr</option>
				<option value="Mme">Mme</option>
			</select><br />
			<input name="salarie[<?=$i?>][nom]" placeholder="Nom" /><br />
			<input name="salarie[<?=$i?>][prenom]" placeholder="Prénom" /><br /><br />
			<hr>
		<?php
		}
	?>
	<input type="submit" />
</form>



-
Edité par Romuald44 12 octobre 2018 à 16:00:40

  • Partager sur Facebook
  • Partager sur Twitter
12 octobre 2018 à 16:42:43

Bonjour à toutes et tous,

Petit up par rapport au dernier post, le script proposé par @Romuald44 est top :

   <?php

    $salaries = array();
    foreach($_POST['salarie'] as $v){
        if(
            !empty($v['civilite']) &&
            !empty($v['nom']) &&
            !empty($v['prenom'])
        ){
            $salaries[] = $v;
        }
    }
     
    $salaries['nb'] = count($salaries);
     
$count = $salaries['nb'];
echo $count;
?>
 
<form method="POST" action="">
    <?php
        for($i = 1; $i < 6; $i++){
        ?>
            <h3>Salarié <?=$i?></h3>
            <select name="salarie[<?=$i?>][civilite]">
                <option value="Mr">Mr</option>
                <option value="Mme">Mme</option>
            </select><br />
            <input name="salarie[<?=$i?>][nom]" placeholder="Nom" /><br />
            <input name="salarie[<?=$i?>][prenom]" placeholder="Prénom" /><br /><br />
            <hr>
        <?php
        }
    ?>
    <input type="submit" />
</form>

Pour l'étape 2 :

Récupérer et afficher les info salarié (civilité, nom, prénom), et écrire comme ceci : Mr nom1 prenom1, Mme nom2 prenom2, etc... voici le bout de code que j'ai ajouté au début du script de Romuald44 :

//Je boucle sur le tableau salarie envoyé en POST
foreach($_POST['salarie'] as $a){
        if(
            //Je vérifie qu'il est pas vide, si un des champs vide, alors il ne sera pas compté ni affiché !
            !empty($a['civilite']) &&
            !empty($a['nom']) &&
            !empty($a['prenom'])
        ){  //J'affiche le résultat
            echo $a['civilite'].' ';
            echo $a['nom'].' ';
            // comment supprimer la virgule pour le dernier salarié écrit ? ou si il y a qu'un employé envoyé ?...
            echo $a['prenom'].', ';
        }
    }

J'ai suivi le cours sur les tableaux, il y à 2, 3 choses encore un peu flou pour moi, mais j'ai bien appris, donc voilà, puis-je améliorer mon bout de code pour afficher les info salarié ?

Comment faire en sorte (comme cité en commentaire dans le code) de supprimer la , au dernier salarié affiché ou si il y a qu'un seul salarié envoyé ?

Merci d'avance :)

-
Edité par Artof 13 octobre 2018 à 12:14:34

  • Partager sur Facebook
  • Partager sur Twitter
13 octobre 2018 à 21:59:18

Bonsoir à toutes et tous,

Petit up pour vous demander conseils, modifications éventuelles sur le code que j'ai mis en place :

Voici la partie formulaire :

<div class="panel-group" id="accordion">
								<?php for($i = 1; $i < 6; $i++){ ?>
                                    <div class="panel panel-default">
                                        <div class="panel-heading">
                                            <h4 class="panel-title">
                                                <a data-toggle="collapse" data-parent="#accordion" href="#collapse<?=$i?>">Salarié <?=$i?></a>
                                            </h4>
                                        </div>
                                        <div id="collapse<?=$i?>" class="panel-collapse collapse">
                                            <div style="padding:5px;">
                                                <div class="form-group">
                                                    <label for="cv_effectif<?=$i?>">Civilité Effectif formé :</label>
                                                    <select class="form-control" id="cv_effectif<?=$i?>" name="salarie[<?=$i?>][civilite]">
                                                      <option value="Mr">Mr</option>
                                                      <option value="Mme">Mme</option>
                                                    </select>
                                                </div>
                                                <div class="form-group">
                                                    <label for="nom_effectif<?=$i?>">Nom effectif formé :</label>
                                                    <input class="form-control" type="text" id="nom_effectif<?=$i?>" name="salarie[<?=$i?>][nom]" placeholder="Nom de l'effectif formé...">
                                                </div>

                                                <div class="form-group">
                                                    <label for="prenom_effectif<?=$i?>">Prénom effectif formé :</label>
                                                    <input class="form-control" type="text" id="prenom_effectif<?=$i?>" name="salarie[<?=$i?>][prenom]" placeholder="Prénom de l'effectif formé...">
                                                </div>
                                            </div>
                                        </div>
                                    </div>
									<?php
										}
									?>

et voici la partie traitement, n'ayant réussi à extraire les info du/des salariés pour les écrire à la suite avec une virgule ou sans si qu'un seul salarié, j'ai testé chaque champs et passé en variable, je suis sure qu'il y a beaucoup plus simple :

// COMPTE LE NOMBRE D'EFFECTIFS
$salaries = array();
    foreach($_POST['salarie'] as $v){
        if(
            !empty($v['civilite']) &&
            !empty($v['nom']) &&
            !empty($v['prenom'])
        ){
            $salaries[] = $v;
        }
    } 
    $salaries['nb'] = count($salaries);
	$countNbEffectif = $salaries['nb'];
// FIN -- COMPTE LE NOMBRE D'EFFECTIFS

// TEST ET PASSE EN VARIABLE EFFECTIFS + SÉPARATEURS
if(
            !empty($_POST['salarie'][1]['civilite']) &&
            !empty($_POST['salarie'][1]['nom']) &&
            !empty($_POST['salarie'][1]['prenom'])
        ){
            $cv1 = $_POST['salarie'][1]['civilite'];
            $name1 = $_POST['salarie'][1]['nom'];
            $firstname1 = $_POST['salarie'][1]['prenom'];
        }
if(
            !empty($_POST['salarie'][2]['civilite']) &&
            !empty($_POST['salarie'][2]['nom']) &&
            !empty($_POST['salarie'][2]['prenom'])
        ){
            $cv2 = $_POST['salarie'][2]['civilite'];
            $name2 = $_POST['salarie'][2]['nom'];
            $firstname2 = $_POST['salarie'][2]['prenom'];
			$separateur1 = ', ';
        }
if(
            !empty($_POST['salarie'][3]['civilite']) &&
            !empty($_POST['salarie'][3]['nom']) &&
            !empty($_POST['salarie'][3]['prenom'])
        ){
            $cv3 = $_POST['salarie'][3]['civilite'];
            $name3 = $_POST['salarie'][3]['nom'];
            $firstname3 = $_POST['salarie'][3]['prenom'];
			$separateur2 = ', ';
        }
if(
            !empty($_POST['salarie'][4]['civilite']) &&
            !empty($_POST['salarie'][4]['nom']) &&
            !empty($_POST['salarie'][4]['prenom'])
        ){
            $cv4 = $_POST['salarie'][4]['civilite'];
            $name4 = $_POST['salarie'][4]['nom'];
            $firstname4 = $_POST['salarie'][4]['prenom'];
			$separateur3 = ', ';
        }
if(
            !empty($_POST['salarie'][5]['civilite']) &&
            !empty($_POST['salarie'][5]['nom']) &&
            !empty($_POST['salarie'][5]['prenom'])
        ){
            $cv5 = $_POST['salarie'][5]['civilite'];
            $name5 = $_POST['salarie'][5]['nom'];
            $firstname5 = $_POST['salarie'][5]['prenom'];
			$separateur4 = ', ';
        }
// FIN -- TEST ET PASSE EN VARIABLE EFFECTIFS + SÉPARATEURS

Merci d'avance pour vos remarques :)


  • Partager sur Facebook
  • Partager sur Twitter
13 octobre 2018 à 22:23:51

fait nous une boucle pour changer juste i :)
  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump