Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question sur la portée de $_POST

$_POST[...] inconnu depuis une page quelconque

Sujet résolu
    18 novembre 2017 à 15:46:45

    Bonjour,

    Je suis novice en PHP, et j'ai une question qui peut paraître un peu bête mais voilà mon problème:

    Depuis une page form.php, je rentre mon prenom dans un form avec submit. Je cible un fichier target.php et je récupère bien $_POST['prenom'] depuis ce fichier target.php. Par contre, j'aimerais également que $_POST['prenom'] soit accessible directement sur mon site depuis n'importe quel page sans passer par des données transitant dans l'url. Comme j'ai lu dans le cours d'openclassroom que $_POST est une variable superglobale, j'ai cru comprendre qu'elle était visible de partout. Or ça n'est pas le cas avec mon code. Pour être plus clair, je vous donne l'intégralité de mon code ci-dessous:

    Fichier form.php (mon formulaire):

    <!DOCTYPE html>
    <html>
        <head>
            <title>Notre première instruction : echo</title>
            <meta charset="utf-8" />
        </head>
        <body>
    <p>
        Cette page ne contient que du HTML.<br />
        Veuillez taper votre prénom :
    </p>
    
    <form action="target.php" method="post">
    <p>
        <input type="text" name="prenom" />
    	</p>
    	
    <p>
        <input type="submit" value="Valider" />
    </p>
    </form>
    
    <p> si tu souhaites vérifier l'impact de ce formulaire sur une autre page: <a href="one_page.php">test impact formulaire!</a></p>
        </body>
    </html>

    Mon fichier target.php (la cible de mon formulaire):

    <!DOCTYPE html>
    <html>
        <head>
            <title>Notre première instruction : echo</title>
            <meta charset="utf-8" />
        </head>
        <body>
    <p>Bonjour !</p>
    
    <p>Je sais comment tu t'appelles, hé hé. Tu t'appelles <?php echo $_POST['prenom']; ?> !</p>
    
    <p>Si tu veux changer de prénom, <a href="form.php">clique ici</a> pour revenir à la page formulaire.php.</p>
    
    
     <p> si tu souhaites vérifier l'impact de ce formulaire sur une autre page: </p><a href="one_page.php">test impact formulaire!</a> 
        </body>
    </html>

    => Ici le prénom est bien reconnu!

    Problème sur le fichier 

    one_page.php (une page quelconque de mon site):

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            
        </head>
    
        <body>
    	
    <p>
    <?php 
    
    if (isset($_POST['prenom'])) {
    
        echo "coucou, je connais ton prénom. La preuve: tu t'appelles:  " . $_POST['prenom'];    
    }else{  
        echo "je ne connais pas ton prénom car depuis cette page, la variable _POST[prenom] est inconnue :'(";
    }
    ?></p>
    
    <p>Si tu veux changer de prénom, <a href="form.php">clique ici</a> pour revenir à la page form.php.</p>
    
    		
        </body>
    	
    </html>

    => Là problème: $_POST['prenom'] n'est pas reconnu alors que je pensais qu'en tant que variable superglobale, elle aurait dû l'être.

    Du coup, pour arriver au même résultat, je suis passé par la transmission du paramètre prénom dans l'url, mais je n'aime pas beaucoup cette méthode. Et j'aimerais savoir si on peut arriver à faire quelque chose avec la méthode $_POST sans transmettre quoi que ce soit dans l'url.

    Merci beaucoup d'avance pour votre aide!!



    • Partager sur Facebook
    • Partager sur Twitter
      18 novembre 2017 à 15:57:13

      Hello !

      POST est une variable superglobale, certes, mais pas persistante ! C'est à dire qu'elle est supprimée si tu change de page, de même que GET.

      Pour des informations persistantes, tu peux t'orienter sur les cookies ou la supergloable SESSION.

      La différence est que les cookies sont stockés pour une durée assez longue (bien que l'utilisateur puisse les supprimer avant) alors que les variables de session finissent pas disparaitre (SESSION est généralement utilisée pour gérer la connexion d'un utilisateur à un site : au bout d'un certain temps, l'utilisateur sera automatiquement déconnecté).

      Tu peux te reporter ici pour les cookies ou ici pour les session si tu veux en savoir plus ! :) J'espère que ça t'aura aidé !

      -
      Edité par Algorun 18 novembre 2017 à 15:57:36

      • Partager sur Facebook
      • Partager sur Twitter
      Celui qui croit tout savoir ne sait rien
        18 novembre 2017 à 15:57:37

        Bonjour,

        pour qu'une variable soit accessible sur l'ensemble de ton site il y a 2 solutions majeurs. Soit faire un cookie soit faire une variable session, je te conseil la 2e methode.

        session_start();
        $_SESSION['prenom'] = $_POST['prenom'];
        echo $_SESSION['prenom'];

        Essayes ça.

        -
        Edité par ThomasHallot 18 novembre 2017 à 15:58:40

        • Partager sur Facebook
        • Partager sur Twitter
        Créateur de projet web Pronostic.pro
          18 novembre 2017 à 16:02:53

          Du coup je me permet de préciser que la fonction session_start() doit être appelée avant tout code HTML (donc avant le <!DOCTYPE>) et sur chaque page où tu souhaite avoir tes données. Et pour supprimer un élément de ta session, c'est comme un tableau :

          session_start();
          $_SESSION['prenom'] = $_POST['prenom'];
          echo $_SESISON['prenom'];
          
          unset($_SESSION['prenom']);
          echo $_SESSION['prenom']; // ERREUR, la variable $_SESSION['prenom'] n'existe plus !



          • Partager sur Facebook
          • Partager sur Twitter
          Celui qui croit tout savoir ne sait rien
            18 novembre 2017 à 20:05:13

            Merci pour vos conseils, j'ai bien utilisé session selon vos recommandations et de mon côté, ça marche nickel!

            Merci à vous tous :)))

            • Partager sur Facebook
            • Partager sur Twitter

            Question sur la portée de $_POST

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown