IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Redirection sans confirmation


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    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

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    window.setTimeout("location=('http://tonsite.com');",1000);
    Si tu utilises Jquery, tu peux faire l'équivalent comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    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 ^^

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Bah tu peux donc faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/04/2007, 13h03
  2. [PHP-JS] Redirection sans passer par les headers
    Par ozzmax dans le forum Langage
    Réponses: 4
    Dernier message: 29/01/2007, 15h38
  3. [PHP-JS] Redirection sans contrainte
    Par MANU_2 dans le forum Langage
    Réponses: 22
    Dernier message: 05/10/2006, 13h12
  4. Comment Envoyé un mail auto sans confirmation.
    Par Az3rTy dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 30/07/2006, 21h16
  5. Redirection et confirmation
    Par ephemere2 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/04/2006, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo