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 :

pourquoi $_POST existe pas ?


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut pourquoi $_POST existe pas ?
    Bonjour,
    mon code est basé sur l'existence de $_POST['user_name'] (if (isset($_POST['user_name']))) et je ne comprends pas pourquoi cette condition n'est pas valide.

    index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <p>Bienvenue sur le mini site consacré aux villes. </p>
                <?php include('user_authent.php');?>
                <?php require('inc_menu.php'); ?>

    user_authent.php :
    Code php : 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
      <?php
                if (!isset($_POST['user_name'])) { ?>
                <p>
                  Pour commencer, merci de vous identifier :<p/>
     
                  <form method="POST" action="">
                    <input type="text" name="user_name" />
                    <input type="submit" name ="submit_user_name" value="votre nom" />
                </form>
    <?php }
    else {
        $user_nom = $_POST['user_name'];
      ?>
        <p>Utilisez le menu de navigation pour consulter les pages du site ou rechercher <a href="search.php?name=<?= $user_nom ?>">ici</a>. <br>
        Bonne visite !</p>
     <?php } ?>

    dans villes.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo "include menu<br/>"; var_dump($_POST); include("inc_menu.php"); ?>

    inc_menu.php :
    Code php : 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
     
     <?php
                $result = $mysqli->query('SELECT ville_id, ville_nom FROM villes');
                while ($row = $result->fetch())
                {
                    $villes[$row['ville_id']] =$row['ville_nom'];
                }
                ?>
     
    <?php if (isset($_POST['user_name'])) { ?>
            <ul>
                <li><a href="index.php">Accueil</a></li>
                <?php foreach($villes as $id => $ville) : ?>
                <li><a href="villes.php?id=<?php echo $id ?>"><?php echo $ville ?></a></li>
                <?php endforeach ?>
            </ul>
     <?php } ?>

    Quand je vais dans villes.php, cela affiche ça :
    include menu
    array(0) { }
    Pourtant, m'étant déjà identifié donc passé dans user_authent.php, l'action du formulaire aurait du créer une variable $_POST, non ?

  2. #2
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    En l'absence de solution, j'ai modifié le code pour ne plus avoir le souci. Tant pis pour ce mystère...

  3. #3
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Bonjour

    Sauf erreur (j'ai un doute toutefois) tes variables postées sont accessibles uniquement dans la page qui reçoit la soumission du formulaire et donc user_authent.php uniquement.

    Ici tu souhaites récupérer la variable dans un autre script... $_POST n'est pas $_SERVER (accessible partout).

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Moi aussi, j'ai un doute ; j'étais même persuadé d'autre chose. Pour clarifier la chose, j'ai fait une recherche et trouvé un site qui dit autre chose :
    Ils sont super globaux, et donc on peut les atteindre de n’importe où dans le programme (même dans une fonction).
    vu dans http://www.oujood.com/php/variable-g...ost-de-php.php

  5. #5
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    "n'importe où dans le programme", est-ce qu'il faut comprendre programme par le script lui-même ou n'importe quel script, le doute reste pour moi.

  6. #6
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut Clean code
    Note : lorsqu'on fait un include d'un fichier, logiquement, il n''est pas attendu qu'un code s'exécute. C'est un concept aussi certainement pas une règle obligatoire.

    En clair : include, c'est charger un fichier. Ensuite, par exemple, tu appelles une fonction qui se trouve dans le fichier.

    Et cela répondrait à ton problème... Tu appellerais la fonction avec, comme paramètre, ta variable. Ce faisant ton code sera plus "propre", le risque de bugs potentiels étant alors moindre..

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    J'ai du mal à te suivre. Tu pourrais expliciter un peu plus STP ?

  8. #8
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Il s'agit du concept de side effect expliqué ici : https://github.com/jupeter/clean-code-php

    Si je fais un include inc_menu.php rien, strictement rien, ne devrait se passer. Zéro affichage zéro modification, rien.

    Dans ton cas, il y aura un output car tu fais un var_dump ou tu écris du contenu html. Un code dit "propre" ne devrait pas faire ça.

    Ton fichier devrait implémenter une fonction et, après mon include, là j'appelle la fonction. C'est là que je passerai ta variable.

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Merci pour le lien qui est intéressant.

    J'ai un peu compris ce qu'il fallait faire, mais j'y verrai bien plus clair demain matin. Donc je m'y colle demain et reviens vers toi.

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Bonjour Christophe,

    je suis revenu sur la discussion. J'avoue ne pas savoir comment suivre ton conseil.
    Tu dis que le fichier includé devrait implémenter une fonction. Mais ce que je voulais mettre dans le fichier includé (car utilisé à plusieurs endroits, donc c'est plus propre que de dupliquer le code), c'est un formulaire html (parfois son affichage est conditionné) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $result = $mysqli->query('SELECT ville_id, ville_nom FROM villes');
    while ($row = $result->fetch())
    {
        $villes[$row['ville_id']] =$row['ville_nom'];
    }
    ?>
        <ul>
            <li><a href="index.php">Accueil</a></li>
            <?php foreach($villes as $id => $ville) : ?>
                <li><a href="villes.php?id=<?php echo $id ?>"><?php echo $ville ?></a></li>
            <?php endforeach ?>
        </ul>
    Or, je doute qu'on puisse donner à une fonction un rôle d'affichage. Du reste, dans le lien que tu m'as donné, le rôle d'une fonction semble bien plus limité :
    A function produces a side effect if it does anything other than take a value in and return another value or values.
    Qu'en penses-tu ?

  11. #11
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Bonjour

    Imagine le fichier "main.php" avec un "include menu.php".

    (j'écris à la grosse louche)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo "Avant mon include";
    include "menu.php";
    echo "Après mon include";
    L'idée de clean code et de avoid side effect est que, ce que je dois voir à l'écran est "Avant mon include" suivi de "Après mon include" ==> le fait de charger menu.php ne devrait avoir aucun impact; ni sur mon affichage ni sur quoi que ce soit d'autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ma_variable="Toto";
    echo "Avant mon include";
    include "menu.php";
    echo "Après mon include";
    Second exemple ci-dessus; "ma_variable" ne peut pas être modifiée par le simple fait d'inclure menu.php. C'est ça, le side effect. Je ne peux pas "toucher" ni à mon contexte (mes variables, ...) ni à l'affichage par le simple fait d'inclure un fichier.

    Regardons ce qui serait une mauvaise approche

    main.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo "Avant mon include";
    include "menu.php";
    echo "Après mon include";
    menu.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "Je suis dans menu.php";
    Tu le vois, à l'écran, j'aurais donc "Avant mon include" suivi de "Je suis dans menu.php" suivi de "Après mon include" et, ça, c'est pas cool du tout parce que je ne veux pas avoir un affichage parasite.

    Autre exemple:

    main.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    firstname="Toto";
    echo "Avant mon include";
    include "menu.php";
    echo "Après mon include";
    echo "Salut ".firstname;
    menu.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    firstname="Alfred";
    Et paf, "Toto" est devenu "Alfred" (Side effect). Va-y pour déboguer cela ! Si tu lis le code de main.php; tu vas t'arracher les cheveux pour comprendre mais misère, pourquoi Toto n'est plus Toto. (ici je n'ai qu'un seul include; imagine des includes par dizaines)

    C'est pas "clean code" tout ça.

    Meilleur code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    echo "Avant mon include";
    include "menu.php";
    write_menu("Toto");
    echo "Après mon include";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function write_menu(string Firstname) {
        echo "Bonjour " . Firstname;
        echo "Voici ton menu";
    }
    (j'ai écris à l'arrache; pour illustrer le propos; le code n'est syntaxiquement pas correct)

  12. #12
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Merci pour ton message écrit à l'arrache.

    Tu as bien mis un exemple "pas cool" qui fait un affichage dans menu.php mais tu ne proposes pas d'alternative. Cependant, comme cet affichage doit être fait plusieurs fois, je suis tenté de faire un include. Comme c'est pas cool, comment faut s'y prendre ?

    Version pas cool :
    main.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo "Avant mon include";
    include "menu.php";
    echo "Après mon include";

    menu.php :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <ul>
    <li><a href="page1.php">item1</a></li>
    <li><a href="page2.php">item2</a></li>
    <li>etc</li>
    </ul>

  13. #13
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    mais tu ne proposes pas d'alternative.
    Ben si, mon tout dernier exemple. Le fichier inclus contient une fonction write_menu.

  14. #14
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Exact ; pas fait attention.

    Maintenant, ça doit être cool

    write_Menu.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    function write_Menu($mysqli) {
    $result = $mysqli->query('SELECT ville_id, ville_nom FROM villes');
    while ($row = $result->fetch())
    {
        $villes[$row['ville_id']] =$row['ville_nom'];
    }
    ?>
        <ul>
            <li><a href="index.php">Accueil</a></li>
            <?php foreach($villes as $id => $ville) : ?>
                <li><a href="villes.php?id=<?php echo $id ?>"><?php echo $ville ?></a></li>
            <?php endforeach ?>
        </ul>
    <?php } ?>

    dans index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php if (isset($_POST['user_name']))
                {
                    include('write_Menu.php');
                    write_Menu($mysqli);
                }?>

    Est-ce bien du clean code ?


  15. #15
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Yep c'est plus beau, non ? 😉

    Tu as dissocié le chargement avec zéro side effect puis, proprement, tu appelles la fonction au bon moment.

    C'est "plus mieux" 😉

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/03/2016, 19h17
  2. Pourquoi il n'existe pas de framework/bibliothèques orientés "métier"?
    Par kisitomomotene dans le forum Débats sur le développement - Le Best Of
    Réponses: 31
    Dernier message: 26/04/2012, 18h04
  3. Pourquoi les objets courbés n'existent pas ?
    Par bricechris dans le forum Moteurs 3D
    Réponses: 24
    Dernier message: 09/05/2011, 09h09
  4. Pourquoi ai-je une erreur lors d'une recherche si la valeur n'existe pas ?
    Par blackndoor dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/03/2009, 11h22
  5. Pourquoi option execution Format Word existe pas?
    Par jeffidf dans le forum Cognos
    Réponses: 5
    Dernier message: 13/03/2009, 15h41

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