Page 1 sur 1
Bouton précédent en supprimant la dernière variable ajoutée
Posté : 01 avr. 2022, 15:48
par wisefun77
Bonjour,
Grace à votre aide, je viens de valider la première condition pour avoir le poste.
Maintenant je dois faire un bouton précédent, sachant que la page contient des variables affichée depuis les autres pages lues.
je ne peut mettre de BDD.
j'ai essayé avec:
Code : Tout sélectionner
<input type = "button" value = "<<< Précédent" onclick = "history.go(-1)">
Mais cela me demande à chaque fois "Confirmer le nouvel envoi du formulaire".
si j'accepte il affiche quand même la dernière variable.
Comment faire pour passer cette étape?
Merci.
Re: Bouton précédent en supprimant la dernière variable ajoutée
Posté : 01 avr. 2022, 17:34
par GuillaumeLM
bonjour,
tu veux un retour sur la page formulaire précédent, ou un retour sur une autre page type dernière page avec le lien des formulaires?
Re: Bouton précédent en supprimant la dernière variable ajoutée
Posté : 01 avr. 2022, 17:35
par ynx
Bonjour wisefun77,
Félicitation pour le poste !
Concernant le message du navigateur "Confirmer le nouvel envoi du formulaire", ceci vient du fait que la précédente page doit correspondre à une requête de type POST (l'envoi du formulaire je suppose). Si tu recharges cette page, le navigateur va alors refaire cette requête POST, comme si tu envoyais le formulaire une deuxième fois.
La solution classique pour résoudre ce comportement est d'utiliser le principe POST-Redirect-GET :
https://fr.wikipedia.org/wiki/Post-redirect-get
Il s'agit de faire une redirection (requête GET) après le traitement du formulaire (requête POST).
Dans le script qui traite le formulaire (autrement dit, le script qui traite la requête POST), il faudrait ajouter une redirection à la fin de ce traitement (via la fonction php header('Location: url');). Cette redirection sera alors une requête de type GET, le navigateur ne proposera donc pas de renvoyer le formulaire.
Re: Bouton précédent en supprimant la dernière variable ajoutée
Posté : 01 avr. 2022, 17:52
par wisefun77
Bonjour GuillaumeLM, ynx,
Merci pour vos messages.
Je vais étudier la solution de @ynx.
Je suis persuadé que tu avais la même solution @GuillaumeLM.
Le poste n'est pas assuré, j'ai juste passé le premier cape.
Mais au moins personnellement j'ai bien progressé grâce à vous.
Re: Bouton précédent en supprimant la dernière variable ajoutée
Posté : 01 avr. 2022, 18:44
par wisefun77
Bonjour,
lorsque je mets ce code en fin de formulaire sur une page, le bouton suivant ne fonctionne pas.
Code : Tout sélectionner
<form method="GET">
<?PHP
header('location: nom de la page précédente');
?>
</form>
connaissez vous un tuto qui explique bien sur internet?
Merci pour votre patience.
Re: Bouton précédent en supprimant la dernière variable ajoutée
Posté : 02 avr. 2022, 09:50
par ynx
Pour voir comment utiliser la fonction header(), la doc php est une première bonne source d'information :
https://www.php.net/manual/fr/function.header.php
N'oubliez jamais que header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichages PHP.
Ceci est dû au fonctionnement du protocole HTTP. Une réponse HTTP est toujours structurée dans l'ordre suivant : d'abord les entêtes, puis le contenu.
Pour l'implémentation du post-redirect-get en php, j'ai pas beaucoup cherché mais le tuto suivant me semble assez détaillé :
https://www.phptutorial.net/php-tutorial/php-prg/
Re: Bouton précédent en supprimant la dernière variable ajoutée
Posté : 02 avr. 2022, 13:16
par wisefun77
Bonjour ynx,
Un énorme et sincère MERCI pour ta réponse. Cette nuit j ai lu des tutos mais pas trouvé la solution je vais lire tes liens.
Merci beaucoup.
Re: Bouton précédent en supprimant la dernière variable ajoutée
Posté : 03 avr. 2022, 18:12
par wisefun77
Bonjour,
Une question me taraude l'esprit.
Pourquoi ne pas fermer la session quand on clique sur le bouton précédent?
Car je ne comprend pas la logique la fonction header, et je ne comprend pas comment la mettre dans le bouton précédent.
Merci
Re: Bouton précédent en supprimant la dernière variable ajoutée
Posté : 03 avr. 2022, 20:31
par or 1
pour faire un lien cliqué par l'internaute, un simple code <a href="/lapage">précédent</a> fait l'affaire.
Re: Bouton précédent en supprimant la dernière variable ajoutée
Posté : 05 avr. 2022, 15:22
par wisefun77
Bonjour,
Merci pour toutes vos aides.
Je suis trop nul, cela ne fonctionne pas.
ce code fonctionne
Code : Tout sélectionner
<?php
if(isset($_POST['loc'])){
// traitement des données
header('Location:'.$_SERVER['HTTP_ORIGIN'].$_POST['loc']);
exit();
}
Mais renvoie au début du site, et non à la page précédente.
j'ai mis dans le bouton.
Code : Tout sélectionner
<td>
<?php
unset ($_POST['balise']);
?>
<script type="text/javascript">
function on4(){
$.ajax({
type: 'POST',
url: 'window.history.back(-1)',
});
};
</script>
<form>
<input type="button" onclick="window.history.back(-1)" value="Précédent"/>
</form>
</td>
puis dans la page
Code : Tout sélectionner
<?php
if(!isset($_POST['balise'])){
?>
<?php
// Set session variables
$_SESSION["Balises"] = $_SESSION["Balises"] . $_POST["balise"];
echo $_SESSION["Balises"];
?>
</br></br>
Type d'intervention:
</br></br>
S'agit-il d'une Demande ou d'un Incident ?
</br></br>
<table align="center">
<tr>
<td>
<form method="POST" action="sdp-demande.php">
<input type="hidden" name="balise" value="[DEM]"/>
<input type="submit" name="demande" value="Demande"/>
</form>
</td>
<td>
<form method="Post" action="incident-demande.php">
<input type="hidden" name="balise" value="[INC]"/>
<input type="submit" name="incident" value="Incident"/>
</form>
</td>
</tr>
</table>
<?PHP
}
elseif(isset($_POST['loc'])){
// traitement des données
header('Location:'.$_SERVER['HTTP_ORIGIN'].$_POST['balise']);
exit();
}
Franchement là je suis complètement HS.
Merci pour votre patience.
Re: Bouton précédent en supprimant la dernière variable ajoutée
Posté : 05 avr. 2022, 19:52
par ynx
Laisse de coté le post-redirect-get et les redirections avec header pour l'instant.
Suit la suggestion de or1 qui est surement la meilleure solution à la demande initiale : au lieu d'utiliser un bouton avec la fonction js history.back, fait un lien qui pointe vers l'URL de la page précédente. Via ce lien, le navigateur ne proposera pas "Confirmer le nouvel envoi du formulaire".
Re: Bouton précédent en supprimant la dernière variable ajoutée
Posté : 06 avr. 2022, 09:14
par wisefun77
Bonjour ynx, or1,
je viens de faire le simple lien.
Maintenant il ne demande plus de recharger la page.
Mais ce message d'erreur
Code : Tout sélectionner
( ! ) Notice: Undefined index: balise in C:\wamp\www\_Dev\sdp-methode.php on line 18
Call Stack
# Time Memory Function Location
1 0.0017 137256 {main}( ) ..\sdp-methode.php:0
qui pointe sur
Code : Tout sélectionner
$_SESSION["Balises"] = $_SESSION["Balises"] . $_POST["balise"];
Je vais essayer avec if isset, mais surtout je ne dois pas perdre les données des pages.
Merci
Re: Bouton précédent en supprimant la dernière variable ajoutée
Posté : 06 avr. 2022, 16:46
par wisefun77
Bonjour,
J'ai trouvé une solution.
Je mets le bouton dans le footer
Code : Tout sélectionner
<form>
<?php
$var= $_SESSION['Balises'];
//echo $var;( juste un test pour voir si les balises sont correctes.
?>
<button type="submit"><a href="<?php echo $_SERVER['HTTP_REFERER'];?>">Précédent</a> </button>
</form>
dans la page précédente
Code : Tout sélectionner
<?php include("header.php"); ?>
<div id="global">
<div id="texteglobal">
<div id="annule">
<span>En cas de demande annulée :</span>
<a href="code-final.php" class="boutonannule">Cliquez ici</a>
</span>
</div>
</br></br>
Type d'intervention :
</br>
<?php
if ( !isset( $var ) ){
ob_end_flush();
}else{
session_start();
$_SESSION["Balises"] = $_SESSION["Balises"] . $_POST["balise"];
echo $_SESSION["Balises"];
}
?>
</div>
</br></br>
Méthode d'intervention( et la suite de la pge)
Le seul soucis c'est quand je resélectionne un bouton il me rajoute la balise.
ex:
Je pense que je dois trouver un moyen de supprimer les doublons à la fin du formulaire avant d'afficher toutes les balises.
Merci encore pour votre patience.