8768 sujets

Développement web côté serveur, CMS

Bonjour,

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

$_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.

$_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.

<?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.

<?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.

<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.
Modifié par wisefun77 (19 Oct 2022 - 15:28)
Modérateur
Bonjour,

Il faut conserver l'ensemble des pages précédentes et des pages suivantes visitées, pas seulement la dernière précédente et la dernière suivante.

Amicalement,
Bonjour,
a écrit :

Il faut conserver l'ensemble des pages précédentes et des pages suivantes visitées, pas seulement la dernière précédente et la dernière suivante.


Ok mais alors comment savoir vers quelle page faire le retour ?
Car si l'user fait un retour à la dernière page, il peut y avoir 50 pages de visitées avant la dernière.

Merci beaucoup.
Modérateur
Bonjour,

Ça dépend un peu de ce que tu veux faire. Ça peut être plus ou moins complexe.

Une fonctionnement relativement simple :

1) on conserve dans $_SESSION un seul tableau contenant l'historique des pages visitées, tableau contenant initialement la 1re page visitée.
2) on conserve dans $_SESSION un indice qui indique si où se trouve la page qu'on vient d'afficher dans le tableau de l'historique. Initialement l'indice vaut 0. Ce sera ce qu'on appelle l'indice courant.
3) À chaque fois qu'on visite une nouvelle page, on supprime toutes les pages du tableau qui sont à un indice supérieur à l'indice courant, et on ajoute au tableau la nouvelle page avec un indice égale à l'indice courant + 1 (et évidemment l'indice courant devient l'indice courant + 1).
4) À chaque fois qu'on clique sur le bouton page suivante, on ajoute 1 à l'indice courant et on visite la page qui est dans le tableau à ce nouvel indice (si on n'est pas déjà à la fin de l'historique évidemment, sinon on ne fait rien).
5) À chaque fois qu'on clique sur le bouton page précédente, on retire 1 à l'indice courant et on visite la page qui est dans le tableau à ce nouvel indice (si on n'est pas déjà au début du tableau, sinon on ne fait rien).

Amicalement,
Modifié par parsimonhi (19 Oct 2022 - 17:25)
Bonjour parsimonhi,
j'ai fait ce code.

<?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.

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


la ligne 15 est:

 echo "<br/>Page précédente pour le retour <br/>".$Retour."<br/><br/>";

Si je la supprime les autres array fonctionnent bien.

Merci beaucoup.
Modérateur
Bonjour,

Ta variable $retour contient un tableau (car $_SESSION['TabRetour'] est un tableau) et on ne peut pas afficher un tableau dans un chaine de caractères "comme ça".

Amicalement,
Bonjour,
voici le code.


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.

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



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

Page précédente pour le retour>>>OK
array(2) { [0]=> string(27) "/Precedent/sdp-demande0.php" }



Merci à vous.
Bonjour,

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

<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 à vous.