Bonjour,
bien reçu.
1- Tes pages comportent encore des grosses failles...
ex. :
- sur la page "Affichage individuel" (parentPage.php?childPageKey=2)
- je clique sur un des liens : Ses enfants / Ses parents / Ses conjoints / Complément
- ex. "Ses enfants" (parentPage.php?childPageKey=2&insert=0&idMain=1)
Il suffit que je modifie l'idMain dans l'URL pour afficher une AUTRE FICHE !
- parentPage.php?childPageKey=2&insert=0&idMain=10
- parentPage.php?childPageKey=2&insert=0&idMain=11
- ...
Aucune sécurité !
2- Le bon usage des SESSION.
2a- $_SESSION['childPageKey'] (dans le fichier ParentPage.php, ligne 44) :
$_SESSION['childPageKey'] = filter_input(INPUT_GET, 'childPageKey', FILTER_VALIDATE_INT, ['options'=>['default'=>0, 'min_range'=>0, 'max_range'=>count(CHILDS)]]);
Là, on attend systématiquement que 'childPageKey' soit passé dans l'URL.
Quel intérêt alors de le mettre dans une SESSION ?
Autant le mettre dans une variable simple : $childPageKey !
Si on utilise une SESSION, c'est justement pour NE PAS avoir à se le trimbaler dans tous les liens/URL !
Le bon usage :
1 2 3 4 5 6 7 8 9 10
| // récupération childPageKey
if( !empty($_GET['childPageKey']) ) // passé dans l URL ?
{
$_SESSION['childPageKey'] = filter_input(INPUT_GET, 'childPageKey', FILTER_VALIDATE_INT, ['options'=>['default'=>0, 'min_range'=>0, 'max_range'=>count(CHILDS)]]);
}
if( empty($_SESSION['childPageKey']) || !is_numeric($_SESSION['childPageKey']) || $_SESSION['childPageKey']>count(CHILDS) )
{
$_SESSION['childPageKey'] = 0;
}
// (sinon, $_SESSION['childPageKey'] est inchangé) |
- On ne mettra alors 'childPageKey' dans un lien/URL QUE SI ON CHANGE DE PAGE.
2b- IDEM pour $idMain (dans le fichier displMain.php, ligne 202) :
// 1) Est-ce qu'un identifiant a été envoyé dans l'url ?
$idMain = filter_input(INPUT_GET, 'idMain', FILTER_VALIDATE_INT, ['options'=>['default'=>0, 'min_range'=>0]]);
Là aussi, 'idMain' DOIT être passer par l'URL !
Le bon usage :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| // récupération idMain
if( !empty($_GET['idMain']) ) // passé dans l URL ?
{
$_SESSION['idMain'] = filter_input(INPUT_GET, 'idMain', FILTER_VALIDATE_INT, ['options'=>['default'=>0, 'min_range'=>0]]);
} elseif( !empty($_POST['idMain']) ) // passé en POST (via un formulaire,...) ?
{
$_SESSION['idMain'] = filter_input(INPUT_POST, 'idMain', FILTER_VALIDATE_INT, ['options'=>['default'=>0, 'min_range'=>0]]);
}
if( empty($_SESSION['idMain']) || !is_numeric($_SESSION['idMain']) || $_SESSION['idMain']<0 )
{
$_SESSION['idMain'] = 0;
}
// (sinon, $_SESSION['idMain'] est inchangé)
$idMain = $_SESSION['idMain']; |
- On ne mettra alors 'idMain' dans un lien/URL QUE SI ON CHANGE DE PERSONNE.
2c- Par conséquent, pour les liens : Ses enfants / Ses parents / Ses conjoints / Complément (dans le fichier displMain.php, lignes 463-466) :
au lieu d'écrire :
1 2 3 4
| <a href="<?= THIS ?>&insert=0&idMain=<?= $idMain ?>"><?= AFF_NAV_1; ?></a> /
<a href="<?= THIS ?>&insert=1&idMain=<?= $idMain ?>"><?= AFF_NAV_2; ?></a> /
<a href="<?= THIS ?>&insert=2&idMain=<?= $idMain ?>"><?= AFF_NAV_3; ?></a> /
<a href="<?= THIS ?>&insert=3&idMain=<?= $idMain ?>"><?= AFF_NAV_4; ?></a> |
il suffit de mettre :
1 2 3 4
| <a href="?insert=0"><?= AFF_NAV_1; ?></a> /
<a href="?insert=1"><?= AFF_NAV_2; ?></a> /
<a href="?insert=2"><?= AFF_NAV_3; ?></a> /
<a href="?insert=3"><?= AFF_NAV_4; ?></a> |
EN EFFET :
- on reste sur la MEME page ($_SESSION['childPageKey'] ne change pas)
- on garde le MEME idMain ($_SESSION['idMain'] ne change pas)
2d - CONCLUSION :
dans TOUTE la partie "Affichage individuel",
- tu n'as pas besoin de trimbaler 'idMain' dans tous tes liens/URL (sauf si tu changes de personne, évidemment) !
- Ni 'childPageKey' (sauf si tu changes de page, évidemment)
3- une modification à faire (dans le fichier ParentPage.php, lignes 53-55) :
1 2 3 4 5 6 7 8
| // si on n est pas/plus dans "Affichage individuel - EDITER"
if ($_SESSION['childPageKey'] != 3) {
unset($_SESSION['editPerson']);
}
// si on n est pas/plus dans la rubrique "Affichage individuel" (childPageKey de 2 à 8)
if ( !in_array($_SESSION['childPageKey'], range(2,8)) {
unset($_SESSION['idMain']); // on efface idMain
} |
Il faudra aussi faire pas mal de ménage dans le reste du code...
4- On peut lire ça en page d'accueil :
Une seule personne entre les informations mais toute la famille en profite. Grâce aux mots de passe,
seule votre famille y a accès.
Permet-moi d'en douter :
si on peut changer FACILEMENT idMain dans l'URL, on a accès A TOUTES les FICHES, de n'importe qui, de n'importe quelle généalogie !
Je me trompe ou pas ?
Partager