[RESOLU] Déplacement et recherche entre deux array.

Eléphant du PHP | 213 Messages

19 oct. 2022, 15:23

Bonjour,

J'aimerai que la page qui est lue rentre dans un array.

Code : Tout sélectionner

$_SESSION['TabSuivant'][]=$_SERVER['REQUEST_URI'];
Puis l 'user en faisant suivant la nouvelle page rentre dans le même array, et que la page précédent passe dans un autre array.

Code : Tout sélectionner

$_SESSION['TabRetour'][] = array_pop($_SESSION['TabSuivant']);
Jusque là c'est bon.

Quand l'user fait précédent cela va lire la dernière valeur de l'array $_SESSION['TabRetour'][]
L'user arrive donc à la page précédente.

Code : Tout sélectionner

<?PHP function precedent(){ $_SESSION['TabRetour'][] = array_pop($_SESSION['TabSuivant']); $_SESSION['TabSuivant'][]= $_SERVER['REQUEST_URI']; $_SESSION['Precedent']= end ($_SESSION['TabRetour']); echo "<br/>Page lue<br/>".var_dump($_SESSION['TabRetour'])."<br/>"; echo "<br/>Page actuelle<br/>".var_dump($_SESSION['TabSuivant'])."<br/>"; echo "<br/>Page bouton précédent<br/>".$_SESSION['Precedent']."<br/>"; } ?>
Et l'array retour doit perdre sa dernière valeur.

Code : Tout sélectionner

<?PHP function Retour(){ $_SESSION['PrecedentRetour'] = array_pop($_SESSION['TabRetour']); echo "<br/>Array suite au retour <br/>".$_SESSION['PrecedentRetour']."<br/>"; } ?>
MAIS C'EST ICI QUE CELA SE COMPLIQUE.
Dans le bouton précédent en cas de retour sur une page, on arrive bien à la page précédente, mais si on fait précédent de nouveau sur cette page cela nous renvoi sur la page suivante, cela tourne en boucle.
Voici le code du bouton dans le footer.

Code : Tout sélectionner

<div id="precedent"> <form> <?php precedent(); ?> <button type="submit"><a href="<?PHP print_r($_SESSION['precedent']);?>">Précédent</a></button> </form> </div>
Merci pour votre aide.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Mammouth du PHP | 1967 Messages

19 oct. 2022, 16:02

Salut,

Comme ça à l'instiunct je ferai un seul tableau dans le quel je rajoute la nouvelle page si on utilise ni retour ni précédent et je garde un index dans ce tableau sur la page actuelle ainsi la continuité est assuré.

je ferait l'insertion de nouvelle page avec array_unshift, et ne stockerai l'index que si il y a navigation dans l'historique (la même logique peut être utilisé avec array_push)
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 213 Messages

19 oct. 2022, 16:14

Bonjour Spols,
Comme ça à l'instinct je ferai un seul tableau dans le quel je rajoute la nouvelle page si on utilise ni retour ni précédent et je garde un index dans ce tableau sur la page actuelle ainsi la continuité est assuré.
C'est quoi un Index et comment le garder ?

Ta solution ne me parle pas beaucoup, car je ne suis pas encore un pro en array.

Merci de tout cœur pour ton aide.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Mammouth du PHP | 1967 Messages

19 oct. 2022, 20:55

le visiteur arrive sur ton site à la page A, comme il a pas de session tu lui crée une variable $_session['navigation'][] = 'A';
il passe sur B sans utiliser de bouton "spécial" donc tu rajoute à sa session le nom de la page $_session['navigation'][] = 'B';
ainsi de suite pour C et D
$_session['navigation'] contient donc :
0 => A
1 => B
2 => C
3 => D

maintenant il clique sur retour,
le script voit qu'il y a une session de navigation >= 2 et qu'il n'y a pas de variable de session nommé index_navigation. il prend donc l'avant dernier index, crée la variable de session index_navigation lui donne la valeur de 2 et dirige l'utilisateur sur C
si il reclique sur retour, comme il y a désormais une variable index_navigation, il la décrémente et dirige vers la page B correspondant à $_session['navigation'][$_session['index_navigation']].
si il clique sur "avancer" (ce bouton nest disponible que si index_navigation est défini) tu incremente index_navigation et tu redirige avec $_session['navigation'][$_session['index_navigation']]. Mais si index_navigation (après incrémentation) == sizeof(navigation) - 1 il faut faire un unset()

il faut aussi gèrer le clique sur un lien classique alors que index_navigation est défini et donc couper l'array navigation pour ne garder que le début avant de reremplir des pages vues
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 213 Messages

20 oct. 2022, 12:14

Bonjour Spols,
j'ai fait ce code.

Code : Tout sélectionner

<?PHP function precedent(){ $Page= $_SERVER['REQUEST_URI']; echo "<br/>Pages Actuelle <br/>".$Page."<br/><br/>"; $_SESSION['TabSuivant'][]=$Page; echo "<br/>Pages lues <br/>".var_dump($_SESSION['TabSuivant'])."<br/>"; $_SESSION['TabPagesAnterieures'][] = array_slice($_SESSION['TabSuivant'],0,-1); echo "<br/>Pages lues Antérieures <br/>".var_dump($_SESSION['TabPagesAnterieures'])."<br/>"; $_SESSION['TabRetour'][] = array_slice($_SESSION['TabPagesAnterieures'],0,-1); $Retour = end($_SESSION['TabRetour']); echo "<br/>Page précédente pour le retour <br/>".$Retour."<br/><br/>"; } ?>
Arrivé à la deuxième page j'ai cette erreur.

Code : Tout sélectionner

PHP Notice: Array to string conversion in C:\inetpub\wwwroot\Precedent\function-Precedent.php on line 15
la ligne 15 est:

Code : Tout sélectionner

echo "<br/>Page précédente pour le retour <br/>".$Retour."<br/><br/>";
Si je la supprime les autres array fonctionnent bien.

Merci beaucoup.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Mammouth du PHP | 1967 Messages

20 oct. 2022, 13:28

array_slice retourne un tableau utilise plutot end() tu devrais arriver à un meilleur résultat
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 213 Messages

20 oct. 2022, 14:03

Bonjour Spols,
Je comprends. Merci.
Ce que je cherche c'est de supprimer la dernière valeur du tableau.
Je vais essayer en passant par un autre tableau.

Merci à toi.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Eléphant du PHP | 213 Messages

20 oct. 2022, 14:13

Bonjour,
voici le code.

Code : Tout sélectionner

function precedent(){ $Page= $_SERVER['REQUEST_URI']; echo "<br/>Pages Actuelle <br/>".$Page."<br/><br/>"; $_SESSION['TabSuivant'][]=$Page; echo "<br/>Pages lues <br/>".var_dump($_SESSION['TabSuivant'])."<br/>"; $_SESSION['TabPagesAnterieures'][] = array_slice($_SESSION['TabSuivant'],0,-1); echo "<br/>Pages lues Antérieures <br/>".var_dump($_SESSION['TabPagesAnterieures'])."<br/>"; $_SESSION['TabRetour'] = end($_SESSION['TabPagesAnterieures']); echo "<br/>Page précédente pour le retour <br/>".var_dump($_SESSION['TabRetour'])."<br/><br/>"; }
Mais la dernier code ne me donne pas que la page précédente, il affiche toutes les pages avant.

Code : Tout sélectionner

$_SESSION['TabRetour'] = end($_SESSION['TabPagesAnterieures']); echo "<br/>Page précédente pour le retour <br/>".var_dump($_SESSION['TabRetour'])."<br/><br/>";

Code : Tout sélectionner

Pages Actuelle>>> OK /Precedent/sdp-demandeall.php Pages lues>>>OK array(3) { [0]=> string(26) "/Precedent/sdp-methode.php" [1]=> string(27) "/Precedent/sdp-demande0.php" [2]=> string(29) "/Precedent/sdp-demandeall.php" } Pages lues Antérieures>>>OK array(2) { [0]=> array(1) { [0]=> string(26) "/Precedent/sdp-methode.php" } [1]=> array(2) { [0]=> string(26) "/Precedent/sdp-methode.php" [1]=> string(27) "/Precedent/sdp-demande0.php" } } Page précédente pour le retour>>>NOK array(2) { [0]=> string(26) "/Precedent/sdp-methode.php" [1]=> string(27) "/Precedent/sdp-demande0.php" }
J'aimerai que cela m'affiche

Code : Tout sélectionner

Page précédente pour le retour>>>OK array(2) { [0]=> string(27) "/Precedent/sdp-demande0.php" }
Merci à vous.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Mammouth du PHP | 1967 Messages

20 oct. 2022, 14:22

end n'extrait pas la dernière valeur du tableau array_pop le fait.

remplace tes end et test array_slice par array_pop
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 213 Messages

20 oct. 2022, 15:37

Bonjour Spols,

Ze ne comprends plus rien #-o #-o

J'ai modifié le code.

Code : Tout sélectionner

function precedent(){ $Page= $_SERVER['REQUEST_URI']; echo "<br/>Pages Actuelle <br/>".$Page."<br/><br/>"; Pages Actuelle /Precedent/sdp-demandeall.php ////////////////////////////------------------------------------- ////////////////////////////------------------------------------- $_SESSION['TabSuivant'][]=$Page; echo "<br/>Pages lues <br/>".var_dump($_SESSION['TabSuivant'])."<br/><br/>"; array(3) { [0]=> string(26) "/Precedent/sdp-methode.php" [1]=> string(27) "/Precedent/sdp-demande0.php" [2]=> string(29) "/Precedent/sdp-demandeall.php" } Pages lues ////////////////////////////------------------------------------- ////////////////////////////------------------------------------- $_SESSION['TabPagesAnterieures'][] = array_pop($_SESSION['TabSuivant']); echo "<br/>Pages lues Antérieures <br/>".var_dump($_SESSION['TabPagesAnterieures'])."<br/>"; array(2) { [0]=> array(1) { [0]=> string(26) "/Precedent/sdp-methode.php" } [1]=> string(29) "/Precedent/sdp-demandeall.php" } Pages lues Antérieures ////////////////////////////------------------------------------- ////////////////////////////------------------------------------- }
Mais pourquoi au dernier echo cela supprime cette page>>Precedent/sdp-demande0.php et non celle-ci >>Precedent/sdp-demandeall.php?

Code : Tout sélectionner

$_SESSION['TabPagesAnterieures'][] = array_pop($_SESSION['TabSuivant']); echo "<br/>Pages lues Antérieures <br/>".var_dump($_SESSION['TabPagesAnterieures'])."<br/>"; array(2) { [0]=> array(1) { [0]=> string(26) "/Precedent/sdp-methode.php" } [1]=> string(29) "/Precedent/sdp-demandeall.php" } Pages lues Antérieures
Merci pour ta patience. Moi ze craaaaaaque.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Eléphant du PHP | 213 Messages

20 oct. 2022, 16:07

Bonjour Spols,
Je pense avoir trouvé pour que cela fonctionne.
Malheureusement un page est supprimée.
Page1 == index.php
Page2=page2.php
Page3= page3.php
Page4=page4.php
Dans la page 2 il y a un lien directe pour le retour sur la page index.
Mais la function est :

Code : Tout sélectionner

function precedentMethode(){ $_SESSION['TabSuivant'][]= $_SERVER['REQUEST_URI']; echo "<br/>Page actuelle<br/>".var_dump($_SESSION['TabSuivant'])."<br/>"; }
Dans la page3 et page4 la function est :

Code : Tout sélectionner

function precedent(){ $Page= $_SERVER['REQUEST_URI']; echo "<br/>Pages Actuelle <br/>".$Page."<br/><br/>"; $_SESSION['TabSuivant'][]=$Page; echo "<br/>Pages lues <br/>".var_dump($_SESSION['TabSuivant'])."<br/><br/>"; $_SESSION['TabPagesAnterieures'][] = array_pop($_SESSION['TabSuivant']); echo "<br/>Pages lues Antérieures <br/>".var_dump($_SESSION['TabPagesAnterieures'])."<br/>"; }
Pour les pages3 et 4, dans le bouton le code est :

Code : Tout sélectionner

<?php precedent(); $Retour= implode("",$_SESSION['TabSuivant']) ?> <button type="submit"><a href="<?PHP print_r($Retour);?>">Précédent</a> </button> </form>
Mais dès que j'arrive à la page4 cela envoi vers la page2, car la page3 n'est plus dans le tableau.
Sans avoir fait de retour sur la page3.

Merci à toi pour ton aide.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Mammouth du PHP | 1967 Messages

20 oct. 2022, 16:28

array_pop depile le tableau, donc la valeur n'y est plus après extraction. si tu veux la garder dans le tableau il y a $array[sizeof($array)-1]
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 213 Messages

20 oct. 2022, 17:02

Bonjour Spols,
array_pop depile le tableau, donc la valeur n'y est plus après extraction. si tu veux la garder dans le tableau il y a $array[sizeof($array)-1]
Je vais étudier dès demain.
Merci à toi.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Eléphant du PHP | 213 Messages

24 oct. 2022, 10:19

Bonjour Spols,

En fait j'ai trouvé une solution de dépannage.
Sur la bouton précédent le code est ;:

Code : Tout sélectionner

<input type="button" value="Précédent" onclick="history.go(-1)">
Et dans la page qui devra s'afficher j'ai fait une boucle If Et Else.
Si on arrive par la bouton suivant, ou on arrive depuis le bouton précédent.

Je continue pour trouver le bon code avec des tableaux.

Merci à toi.
Merci à vous.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.