Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/01/2011, 17h11   #1
Membre à l'essai
 
Inscription : février 2006
Messages : 259
Détails du profil
Informations personnelles :
Âge : 20

Informations forums :
Inscription : février 2006
Messages : 259
Points : 23
Points : 23
Envoyer un message via MSN à corgato
Par défaut Redirection sans confirmation

Bonjour,

j'ai suivi le tuto pour créer un espace membre, pour avoir déjà la base et je voudrais améliorer le fonctionnement du système de redirection des pages (quand on valide un formulaire ou autre, on transite par une page avec un message et ensuite on est redirigé sur la page suivante, ex: quand on post sur ce site).

Mon but est de ne plus avoir le message de confirmation pour recharger la page, vu que ça fait de temps en temps planté les données envoyées.
J'ai donc essayé un tuto mais je n'ai pas réussi...

Voilà comment je fais actuellement pour la redirection :

ma_page_avec_formulaire.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<?php
// Mon super formulaire ici
// FORMULAIRE FORMULAIRE FORMULAIRE FORMULAIRE FORMULAIRE FORMULAIRE FORMULAIRE FORMULAIRE
// FORMULAIRE FORMULAIRE FORMULAIRE FORMULAIRE FORMULAIRE FORMULAIRE FORMULAIRE FORMULAIRE
 
 
// Quand les informations du formulaire sont validées en redirige la personne
$informations = array(
			false,
			'Topic Crée',
			'Votre topic a été crée !',
			'',
			'ma_page_suivante.php',
			5
		);
require_once ROOTPATH.'/information.php';
exit();

information.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
<?php
if(!isset($informations))
{
	$informations = Array(/*Erreur*/
					true,
					'Erreur',
					'Une erreur interne est survenue...',
					'',
					ROOTPATH.'/index.php',
					3
					);
}
 
if($informations[0] === true) $type = 'erreur';
else $type = 'information';
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
	<head>
		<title><?php echo $informations[1]; ?> : <?php echo TITRESITE; ?></title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<meta name="language" content="fr" />
		<meta http-equiv="Refresh" content="<?php echo $informations[5]; ?>;url=<?php echo $informations[4]; ?>">
		<link rel="stylesheet" title="Design" href="<?php echo ROOTPATH; ?>/design.css" type="text/css" media="screen" />
	</head>
 
 
	<body>
		<div id="info">
			<div id="<?php echo $type; ?>"><?php echo $informations[2]; ?> Redirection en cours...<br/>
			<a href="<?php echo $informations[4]; ?>">Cliquez ici si vous ne voulez pas attendre...</a><?php echo $informations[3]; ?></div>
		</div>
	</body>
</html>
<?php
unset($informations);
?>

J'ai essayé avec les sessions mais j'ai quand même le message de confirmation donc je bloque un peu...
Voilà ce que j'ai fait :

ma_page_avec_formulaire.php
Code :
1
2
3
4
5
6
7
8
9
10
11
 
$_SESSION['informations'] = array(
					false,
					'Topic Crée',
					'Votre topic a été crée !',
					'',
					'ma_page_suivante.php',
					5
				);
require_once ROOTPATH.'/information.php';
exit();
information.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
<?php
ob_start();
 
if(!isset($_SESSION['informations']))
{
	$_SESSION['informations'] = array(
						true,
						'Erreur',
						'Une erreur interne est survenue...',
						'',
						ROOTPATH.'/',
						TPSREDIR
					);
}
 
if($_SESSION['informations'][0] === true)
	$type = 'erreur';
else
	$type = 'information';
 
 
if(!empty($_POST))
{
?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
        <head>
            <title><?php echo $_SESSION['informations'][1]; ?> : <?php echo TITRESITE; ?></title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <meta name="language" content="fr" />
            <meta http-equiv="Refresh" content="<?php echo $_SESSION['informations'][5]; ?>;url=<?php echo $_SESSION['informations'][4]; ?>">
            <link rel="stylesheet" title="Design" href="<?php echo ROOTPATH; ?>/design.css" type="text/css" media="screen" />
        </head>
 
 
        <body>
            <div id="info">
                <div id="<?php echo $type; ?>"><?php echo $_SESSION['informations'][2]; ?> Redirection en cours...<br/>
                <a href="<?php echo $_SESSION['informations'][4]; ?>">Cliquez ici si vous ne voulez pas attendre...</a><?php echo $_SESSION['informations'][3]; ?></div>
            </div>
        </body>
    </html>
<?php
    $_SESSION['sauvegarde'] = $_POST;
 
	if (isset($_SESSION['url_redirection']))
		$fichierActuel = $_SESSION['informations'][4];
    elseif(!empty($_SERVER['HTTP_REFERER']))
        $fichierActuel = $_SERVER['HTTP_REFERER'];
	else
		$fichierActuel = '/';
 
	unset($_SESSION['informations']);
 
	if(!$_SESSION['informations'][5] == 0)
		header('refresh:'.$_SESSION['informations'][5].'; url='.$fichierActuel);
    exit;
}
 
if(isset($_SESSION['sauvegarde']))
{
    $_POST = $_SESSION['sauvegarde'];
    unset($_SESSION['sauvegarde']);
	unset($_SESSION['informations']);
}
 
ob_end_flush();
?>

Merci !
corgato est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 17h19   #2
Futur Membre du Club
 
Inscription : octobre 2009
Messages : 17
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 17
Points : 15
Points : 15
Si tu souhaites faire une redirection sans délai vers une autre page, voire sur la même page pour la réactualiser tu peux le faire en php en utilisant la fonction header.

Code :
header("location: tapage.php");
Tes paramètres POST ne seront plus envoyés quand tu réactualiseras la page manuellement.

Edit: Tu peux également passer des paramètres en GET si tu veux afficher un message, ou même les stocker en session (Si mes souvenirs sont bons).
Myst. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 17h21   #3
Membre à l'essai
 
Inscription : février 2006
Messages : 259
Détails du profil
Informations personnelles :
Âge : 20

Informations forums :
Inscription : février 2006
Messages : 259
Points : 23
Points : 23
Envoyer un message via MSN à corgato
Oui mais le problème c'est que moi justement je veux passer par une page avec un message dessus, comme sur ce forum.

j'ai aussi un delai d'attendre dans les paramètres de la session "informations" si tu regardes bien.

EDIT : pour ton edit, mon but là, est de passer par les sessions, j'ai essayé voir le code ci-dessus, mais ça n'a pas marché je cherche donc la solution a ce problème

Merci pour ta réponse
corgato est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 17h48   #4
Futur Membre du Club
 
Inscription : octobre 2009
Messages : 17
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 17
Points : 15
Points : 15
Pour la redirection, tu peux utiliser le header pour une redirection sur une page transitoire, sur laquelle tu auras (en plus des contrôles et vérifications qui s'imposent) un lien du style "Si vous ne souhaitez pas attendre, cliquez ici".

En ce qui concerne la redirection, tu peux utiliser du javascript du style:
Code :
window.setTimeout("location=('http://tonsite.com');",1000);
Si tu utilises Jquery, tu peux faire l'équivalent comme ceci:

Code :
1
2
3
4
 
redirect = $.timer(1000, function() {   
            window.location = "http://tonsite.com";  
 });
Pense à préciser ton temps en MS.


Pour les sessions, pas de problèmes.
Pense à utiliser session_start(), et même après ta redirection header, les variables seront toujours accessibles.

Edit: à moins que tous tes fichiers en incluent un fédérateur dans lequel tu as ton instruction session_start, pense à utiliser cette fonction sur toutes les pages où tu utilises les sessions !
Myst. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 18h02   #5
Membre à l'essai
 
Inscription : février 2006
Messages : 259
Détails du profil
Informations personnelles :
Âge : 20

Informations forums :
Inscription : février 2006
Messages : 259
Points : 23
Points : 23
Envoyer un message via MSN à corgato
Je pense pas que tu es compris mon message ^^

je voudrais faire en sorte de faire :

=> validation d'un formulaire
=> création de la session "informations", redirection vers la page information.php
=> Elle va afficher un message pour expliqué si la validation du formulaire et okay etc...
=> redirection vers la page qui se trouve dans la session au bout de X secondes définit aussi dans la session :header(refresh:5;url:'page.html').

Le but c'est de supprimer le message que l'on a par son navigateur pour renvoyer les données quand on fait un F5 après le formulaire, du coup ça peut posé certain problème, pour un double post etc... Par exemple.

Donc là j'ai essayé de faire ça avec le code que j'ai montré dans mon premier post, et vu que ça marche pas j'aimerais trouver la solution mais c'est pas facile ^^
corgato est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 18h16   #6
Futur Membre du Club
 
Inscription : octobre 2009
Messages : 17
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 17
Points : 15
Points : 15
Bah tu peux donc faire

Code :
1
2
3
4
5
6
7
8
9
10
 
 
session_start(); // En haut du fichier
 
if(isset($_POST['submit'])) //Ou toute méthode pour tester l'envoie du form
{
      //Tu fais tes traitements et tes vérifications
      $_SESSION['informations'] = $tesInfos;
      header("location: informations.php");
}
Dans ta page informations, tu aurais un truc du style
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
if(isset($_SESSION['informations'])) 
{
   //Tu peux faire d'autres vérifications
 
   //Si tout se passe bien, t'affiches ton message
   echo "Tout s'est bien passé, ok !";
   echo "<a href='tapage.php'>Cliquez ici pour ne pas attendre</a>";
 
 
   //Tu récupères le nombre de secondes dans la variable $secondes
 
   echo "<script>
                 window.setTimeout('location=(\'http://tonsite.com\');', {$secondes / 1000});
           </script>";
}
Voilà en gros ce que ça pourrait donner...
Je suis pas très opé sur les headers location/refresh timés, mais le mécanisme resterait presque identique.
À toi de compléter avec ton code.
Myst. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h39.


 
 
 
 
Partenaires

Hébergement Web