(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 :
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.
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 )
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.
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 :)...
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...
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
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 ? :
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)
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
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 ?
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.
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
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é ???
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 )
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.
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
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é ?
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
Jeune et ambitieux | Htmlspecialschars - Var_dump
Jeune et ambitieux | Htmlspecialschars - Var_dump
Jeune et ambitieux | Htmlspecialschars - Var_dump
Jeune et ambitieux | Htmlspecialschars - Var_dump
Jeune et ambitieux | Htmlspecialschars - Var_dump
Jeune et ambitieux | Htmlspecialschars - Var_dump
Jeune et ambitieux | Htmlspecialschars - Var_dump
Jeune et ambitieux | Htmlspecialschars - Var_dump
Jeune et ambitieux | Htmlspecialschars - Var_dump
Jeune et ambitieux | Htmlspecialschars - Var_dump