[RESOLU] Position du scroll après rafraichissement de la page

Eléphant du PHP | 100 Messages

26 déc. 2019, 11:22

Bonjour à Toutes et à Tous,
Je suis une bille en javascript et jquery, voici mon problème:
Je suis sur une page index.php qui affiche toutes les fiches via un while
sur chaque fiche, j'ai un lien qui me permet de valider ou invalider chaque fiche

Code : Tout sélectionner

<head> include('validation.php'); </head> while ($ligne = $reponse->fetch()) { $id = $ligne['id']; $fait = $ligne['fait']; $date = $ligne['date']; $numerosemaine = ucfirst(utf8_encode(strftime('%W',strtotime($date)))); $dateentiere = ucfirst(utf8_encode(strftime('%A %d %B %Y',strtotime($date)))); //------------ Affiche les enregistrements de la Semaine Actuelle ------------------------- include('alerte.php'); echo"<div class='afaire'> <form action='?id=$id' method='post' id='fait' >"; if($ligne['fait']=='non'){ echo"<a href='".$alerte."' title='Validation' ><img src='../../img/avalider.png' width='40' height='40' alt='Validation' />Validation</a>"; } if($ligne['fait']=='oui'){ echo"<a href='".$alerte."' title='InValidation' ><img src='../../img/validation.png' width='40' height='40' alt='InValidation' /> InValidation</a>"; } echo"</form> </div>"; echo '<div class="listetravaux"><h1> '.'Semaine '.$numerosemaine.'</br>'.$dateentiere.' à : '.substr($ligne['heure'],0,2).'h'.substr($ligne['heure'],3,2).'</br><span class="numeroequipe">Equipe '.$ligne['equipe'].'</span></h1>'; //echo 'Equipe :'.$ligne['equipe'].''; echo $ligne['descriptif']; //--------------------------------------------------------------------------------------------------- if($ligne['fait']=='non'){ echo '<h2>Prestation à Réaliser</h2>'; } if($ligne['fait']=='oui'){ echo '<h3>Prestation Réalisée</h3>'; } echo "</div>";// <!-- fin de listetravaux --> }
J'ai une alerte qui prévoit une confirmation

Code : Tout sélectionner

<?php require_once('../../administrateur/configadmin.php'); $chemin = '../../'; if($ligne['id']<>''){ $text=str_replace('<p>', "", $ligne['descriptif']); $text=str_replace('</p>', "\\n", $text); $text=str_replace('<br />', "\\n", $text); setlocale(LC_TIME, "fr"); $date = $ligne['date']; $dateentiere = utf8_encode(strftime('%A %d %B %Y',strtotime($date))); $jourdate=substr($ligne['date'],8,2); $moisdate=substr($ligne['date'],5,2); $anneedate=substr($ligne['date'],0,4); $datedujour = $jourdate.'/'.$moisdate.'/'.$anneedate; $text = $text."\\n Prestation Du :".$dateentiere; $alerte = 'javascript:if(confirm("Étes-vous sûr de vouloir Modifier cette Prestation : \\n'.$text.' ?")) { window.location.href="index.php?dirsuppr='.$ligne['id'].'"; }'; } ?>
et mon code de validation :

Code : Tout sélectionner

<?php if (isset($_GET["dirsuppr"])) { $id = $_GET["dirsuppr"]; $reponse = $bdd->prepare('SELECT * FROM '.$agenda_BDD.' WHERE id LIKE "'.$id.'%" ORDER BY id ASC'); $reponse->bindParam(':id', $id, PDO::PARAM_INT); // $reponse->bindParam(':equipe', $equipe, PDO::PARAM_INT); // $reponse->bindParam(':date', $date, PDO::PARAM_STR); // $reponse->bindParam(':heure', $heure, PDO::PARAM_STR); // $reponse->bindParam(':descriptif', $descriptif, PDO::PARAM_STR); $reponse->bindParam(':fait', $fait, PDO::PARAM_STR); $reponse->execute(); $donnees = $reponse->fetch(); $fait=$donnees['fait']; $id=$donnees['id']; if ($donnees['fait'] =="oui"){ $fait = "non"; // Modification dans BDD $rep =$bdd->prepare('UPDATE '.$agenda_BDD.' SET fait=:fait WHERE id=:id'); $rep->bindParam(':id', $id, PDO::PARAM_INT); $rep->bindParam(':fait', $fait, PDO::PARAM_STR); $rep->execute(); $rep -> closeCursor(); echo"<meta http-equiv='refresh' content='0;URL=index.php' />"; } if ($donnees['fait'] =="non"){ $fait = "oui" ; // Modification dans BDD $rep =$bdd->prepare('UPDATE '.$agenda_BDD.' SET fait=:fait WHERE id=:id'); $rep->bindParam(':id', $id, PDO::PARAM_INT); $rep->bindParam(':fait', $fait, PDO::PARAM_STR); $rep->execute(); $rep -> closeCursor(); echo"<meta http-equiv='refresh' content='0;URL=index.php' />"; } } ?>
Après refresh de ma page index.php, j'aimerai que le scroll de la page reste sur la même position avant refresh

Si vous avez une solution, je suis preneur

Merci beaucoup

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 déc. 2019, 12:20

Tu as 2 possibilités :
- Soit c'est changer la façon avec laquelle tu fais ton traitement pour le faire en ajax, c'est à dire sans rafraichir l'ensemble de la page.
Quand on clic sur le lien ou bouton, ça envoie l'appel en javascript directement pour faire le traitement et toujours en javascript tu affiche un message de confirmation quand le traitement a été fait.
C'est le plus propre pour ton utilisateur, mais ça t'oblige à redéveloppper la logique de ton fonctionnement actuel.
https://developer.mozilla.org/fr/docs/Web/Guide/AJAX
https://www.w3schools.com/xml/ajax_intro.asp

- Soit effectivement, c'est de repositionner ta page à peu prêt au même endroit en conservant ton code actuel.
Le principe c'est de poser des ancres HTML dans ta page et que dans ta redirection après traitement tu appelles cette ancre pour que le scroll se positionne au bon endroit.
https://www.alsacreations.com/astuce/li ... diese.html
Techniquement dans ta boucle while, tu poses une ancre qui contient par exemple l'ID, et à la fin de ton traitement tu rappelle le fichier index.php mais suivi de # et de l'ID que tu viens de traiter pour que ça se repositionne à ce niveau.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 100 Messages

26 déc. 2019, 17:30

Bonjour @rthur,

Merci pour tes réponses

J'ai essayé de mettre une ancre, cela ne fonctionne pas du fait du while et de mon div à l'intérieur

Je penses qu'il faut utiliser scrolltop mais c'est une autre histoire
en fait mes fiches s'affichent l'une en dessous des autres via mon while et mon div
Merci pour ton aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

27 déc. 2019, 10:57

Réessaye et vérifie le HTML généré (Clic droit, voir la source), il n'y a pas de raison que ça ne fonctionne pas avec une ancre HTML
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 100 Messages

27 déc. 2019, 12:45

Bonjour @rthur,

dans ma page index.php j'ai ajouter un div id pour l'ancre

Code : Tout sélectionner

while ($ligne = $reponse->fetch()) { $id = $ligne['id']; $fait = $ligne['fait']; $date = $ligne['date']; $numerosemaine = ucfirst(utf8_encode(strftime('%W',strtotime($date)))); $dateentiere = ucfirst(utf8_encode(strftime('%A %d %B %Y',strtotime($date)))); //------------ Affiche les enregistrements de la Semaine Actuelle ------------------------- include('alerte.php'); $emplacement =$ligne['id']; echo"<div id='emplacement'> <div class='afaire'> <form action='?id=$id' method='post' id='fait' >"; if($ligne['fait']=='non'){ echo"<a href='".$alerte."' title='Validation' ><img src='../../img/avalider.png' width='40' height='40' alt='Validation' />Validation</a>"; } if($ligne['fait']=='oui'){ echo"<a href='".$alerte."' title='InValidation' ><img src='../../img/validation.png' width='40' height='40' alt='InValidation' /> InValidation</a>"; } echo"</form> </div> </div>"; echo '<div class="listetravaux"><h1> '.'Semaine '.$numerosemaine.'</br>'.$dateentiere.' à : '.substr($ligne['heure'],0,2).'h'.substr($ligne['heure'],3,2).'</br><span class="numeroequipe">Equipe '.$ligne['equipe'].'</span></h1>'; //echo 'Equipe :'.$ligne['equipe'].''; echo $ligne['descriptif']; //--------------------------------------------------------------------------------------------------- if($ligne['fait']=='non'){ echo '<h2>Prestation à Réaliser</h2>'; } if($ligne['fait']=='oui'){ echo '<h3>Prestation Réalisée</h3>'; } echo "</div>";// <!-- fin de listetravaux --> //} }
J'ai ajouter dans ma page validation.php le id

Code : Tout sélectionner

echo"<meta http-equiv='refresh' content='0;URL=index.php?#emplacement' />";
Cela n'a aucun effet,
La page ne se positionne plus tout en haut de ma page mais au début du div emplacement 1er enregistrement

Peut-être(sûrement) des erreurs venant de ma part ?

Merci

Eléphant du PHP | 100 Messages

27 déc. 2019, 17:20

Bonjour Tout le Monde,
J'ai trouvée une solution "à la Barbare"
Je simule le retour à la page précédente

Code : Tout sélectionner

while ($ligne = $reponse->fetch()) { $id = $ligne['id']; $fait = $ligne['fait']; $date = $ligne['date']; $numerosemaine = ucfirst(utf8_encode(strftime('%W',strtotime($date)))); $dateentiere = ucfirst(utf8_encode(strftime('%A %d %B %Y',strtotime($date)))); //------------ Affiche les enregistrements de la Semaine Actuelle ------------------------- include('alerte.php'); $emplacement =$ligne['id']; echo"<div class='afaire'> <form action='?id=$id' method='post' id='fait' on Click=' history.back();'>"; if($ligne['fait']=='non'){ echo"<a href='".$alerte."' title='Validation' ><img src='../../img/avalider.png' width='40' height='40' alt='Validation' />Validation</a>"; [color=#4000FF]echo'<a href="#" onClick="history.back()">Retour à la page précédente</a>';[/color] } if($ligne['fait']=='oui'){ echo"<a href='".$alerte."' title='InValidation' ><img src='../../img/validation.png' width='40' height='40' alt='InValidation' /> InValidation</a>"; } echo"</form> </div>";


J'aurais aimer mettre cette instruction : onClick="history.back()" dans mon fichier validation.php

Code : Tout sélectionner

echo"<meta http-equiv='refresh' content='0;URL=index.php />";
mais cela ne fonctionne pas :

Code : Tout sélectionner

echo"<meta http-equiv='refresh' content='0;URL=index.php?onClick='history.back()'' />";
Si vous pouvez m'aider à insérer ce code dans ma meta, je vous en serais reconnaissant

merci d'avance