Bonjour,
J'ai une application de généalogie avec sélection des parents en deux temps. Les formulaires "Présélection du père" ou "Préselection de la mère" permettent de sélectionner les parents possibles et d'alimenter des listes d'options dans lesquelles l'utilisateur sélectionne le vrai parent.
Pourquoi la création d'une liste d'un parent possible efface la liste de l'autre parent. Par exemple, si je crée la liste des mères potentielles, celle des pères s'efface.
Dans le code source html, les deux premiers formulaires servent à fixer les critères de sélection des pères ou des mères possibles. Les pères possibles seront affichés dans la liste des pères (liste 'father') à sélectionner par l'utilisateur qui devra en sélectionner un. Idem pour les mères.
A la soumission par l'un des deux boutons 'filter', le fichier "editPersonHandler.php" détermine les clauses de sélection du parent. Jusque là tout fonctionne bien.
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 <div class="parents fitContent"> <form method="post" action="/editPersHandler.php"> <input type="hidden" name="form" value="M"> <input type="hidden" name="step" value="31"> <fieldset><legend>Présélection du père</legend> <label><span>Nom de naissance</span><input type="text" name="lastname" value="Paris"></label> <label><span>Prénom usuel</span><input type="text" name="firstname" value=""></label> <label class="date"> <span>Né entre</span><input type="text" name="birthY1" value="1861" placeholder="2024"> <span class="date">et</span> <input type="text" name="birthY2" value="1937" placeholder="2024"> </label> <label class="date"> <span>Décédé entre </span><input type="text" name="deathY1" value="" placeholder="2024"> <span class="date">et</span> <input type="text" name="deathY2" value="" placeholder="2024"> </label> <p><input type="submit" name="filter" value="Valider"></p> </fieldset> </form> <form method="post" action="/editPersHandler.php"> <input type="hidden" name="form" value="F"> <input type="hidden" name="step" value="31"> <fieldset><legend>Présélection de la mère</legend> <label><span>Nom de naissance</span><input type="text" name="firstname" value=""></label> <label><span>Prénom usuel</span><input type="text" name="firstname" value=""></label> <label class="date"> <span>Né entre</span><input type="text" name="birthY1" value="1901" placeholder="2024"> <span class="date">et</span> <input type="text" name="birthY2" value="1939" placeholder="2024"> </label> <label class="date"> <span>Décédé entre </span><input type="text" name="deathY1" value="" placeholder="2024"> <span class="date">et</span> <input type="text" name="deathY2" value="" placeholder="2024"> </label> <p><input type="submit" name="filter" value="Valider"></p> </fieldset> </form> </div> <form method="post" action="/editPersHandler.php"> <input type="hidden" name="step" value="3"> <fieldset><legend>Famille d'origine</legend> <label><span>Clef</span><input type="text" name="id" value="21" readonly></label> <label class="date"> <span>Père</span> <select name='father'><option value='20'>PARIS Henri Charles ( 31/08/1921 - 24/08/2005 )</option></select> </label> <label class="date"> <span>Mère</span> <select name='mother'></select> </label> <label><span>Ordre dans la fraterie *</span><input type="number" min="1" name="birthorder" value=""></label> <p class="note">* Cette information est utile pour le classement par dates de naissances lorsque celles-ci ne sont pas connues.</p> </fieldset> <p><input type="submit" name="previous" value="Précédent"> <input type="submit" name="next" value="Suivant"></p> </form>
Ensuite le fichier 'editPerson.php' ci-dessous crée les listes d'options. Et c'est là que la création de la liste des pères potentiels efface la lise des mères potentielles et réciproquement. Ce code utilise une classe de création des listes d'options et des options elles-mêmes dont j'espère que les noms de méthodes sont assez clairs. Je pense que c'est dans cette partie que quelques chose ne va pas.
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 case 31:{ if( isset($post['filter']) ) { $s31 = array_diff_key($_SESSION['editPerson']['s31'], ['filter'=>'', ]); $s31['gender'] = $s31['form']; $criteria = ['gender', 'lastname', 'firstname', 'birthY1', 'birthY2', 'deathY1', 'deathY2', ]; $clauses = []; foreach($criteria as $value){ if( !empty($s31[$value]) ) $clauses[$value] = $s31[$value]; } $_SESSION['editPerson']['parentClauses'] = $clauses; } break;}
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 $father = new OptListSelect('father'); $_SESSION['editPerson']['father'] = $father; $mother = new OptListSelect('mother'); $_SESSION['editPerson']['mother'] = $mother; if( isset($_SESSION['editPerson']['parentClauses']) ) { $clauses = $_SESSION['editPerson']['parentClauses']; if($clauses['gender'] === 'M') { $Father = searchParents($idAbo, $clauses); if( !empty($Father) ) { foreach($Father as $item) { $father->addOption( new OptListOption( (string)$item['id'], $item['fullname'] . ' ( ' . $item['birthdate'] . ' - ' .$item['deathdate'] . ' )' ) ); } if( count($father->getOptions() ) ) $_SESSION['editPerson']['father'] = $father; } } else { $Mother = searchParents($idAbo, $clauses); if( !empty($Mother) ) { foreach($Mother as $item) { $mother->addOption( new OptListOption( (string)$item['id'], $item['fullname'] . ' ( ' . $item['birthdate'] . ' - ' .$item['deathdate'] . ' )' ) ); } if( count($mother->getOptions() ) ) $_SESSION['editPerson']['mother'] = $mother; } } }







Répondre avec citation
Partager