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 :

Portée de variable [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut Portée de variable
    Bonjour,

    Je rencontre un problème "simple", j'explique:

    Je dispose de deux fichiers: index.php et gamme.php

    Index.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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    <?php
    ob_start();
     
    list($k, $l, $m) = explode('/', $_SERVER['REQUEST_URI']);
    if(empty($m)){
    header('Status: 301 Moved Permanently', false, 301);
    header('Location: ./index.html');
    exit();
    }
    include('./includes/bdd_connect.php');
    include('./includes/functions.php');
     
    //Smarty
    include('./includes/xSmarty/Smarty.class.php');
    $smarty = new Smarty();
    $smarty->template_dir = './includes/myViews_tpl/';
    $smarty->compile_dir = './includes/myViews_c/';
    $smarty->config_dir = './includes/xSmarty/configs/';
    $smarty->cache_dir = './includes/xSmarty/cache/';
    $smarty->left_delimiter = '<!--{';
    $smarty->right_delimiter = '}-->';
     
    //Architecture MVC
    define('CONTROLERS', './includes/myControlers/');
    define('MODELS', './includes/myModels/');
    define('VIEWS', './includes/myViews_tpl/');
    include(MODELS.'general.php');
    if(isset($_GET['view'])){
    switch($_GET['view']){
    case '404':
    $smarty->assign('title', 'Page non trouvée');
    $inc = CONTROLERS.'404.php';//fonctions liées à gammes
    $display = '404.tpl';
    break;
    case 'gamme'://page gamme.
    //////////////////////////
    //LA PARTIE DE TEST POUR LE TITRE EST ICI:
    //////////////////////////
    $inc = CONTROLERS.'gamme.php';//fonctions liées à gammes
    $display = 'gamme.tpl';
    break;
    //////////////////////////////////////////////////
    case 'actualites'://page gamme.
    $smarty->assign('title', 'Actualités');
    $inc = CONTROLERS.'actualites.php';//fonctions liées à actualites
    $display = 'actualites.tpl';
    break;
    case 'articles'://page gamme.
    $smarty->assign('title', 'Articles');
    $inc = CONTROLERS.'articles.php';//fonctions liées à articles
    $display = 'articles.tpl';
    break;
    case 'contact':
    $smarty->assign('title', 'Contact');
    $inc = CONTROLERS.'contact.php';//fonctions liées à contact
    $display = 'contact.tpl';
    break;
    case 'produit':
    $smarty->assign('title', 'Produit');
    $inc = CONTROLERS.'produit.php';//fonctions liées à produit
    $display = 'produit.tpl';
    break;
    case 'faq':
    $smarty->assign('title', 'Foire aux questions');
    $inc = CONTROLERS.'faq.php';//fonctions liées à la faq
    $display = 'faq.tpl';
    break;
    case 'qui-sommes-nous':
    $smarty->assign('title', 'Qui sommes nous');
    $inc = CONTROLERS.'qui.php';//fonctions liées à qui-sommes-nous
    $display = 'qui.tpl';
    break;
    case 'presse':
    $smarty->assign('title', 'Revues de presse');
    $inc = CONTROLERS.'presse.php';//fonctions liées à presse
    $display = 'presse.tpl';
    break;
    case 'revendeurs':
    $smarty->assign('title', 'Revendeurs');
    $inc = CONTROLERS.'revendeurs.php';//fonctions liées aux revendeurs
    $display = 'revendeurs.tpl';
    break;
    case 'poules':
    $smarty->assign('title', 'Les poules');
    $inc = CONTROLERS.'poules.php';//fonctions liées à poules
    $display = 'poules.tpl';
    break;
    default:
    $smarty->assign('title', 'Accueil');
    $inc = CONTROLERS.'accueil.php';//fonctions liées à l'accueil
    $display = 'accueil.tpl';
    }//fin switch
    }else{//si view pas defini = page accueil $smarty->display('menu.tpl');
    $smarty->assign('title', 'Accueil');
    $inc = CONTROLERS.'accueil.php';///fonctions liées à l'accueil
    $display = 'accueil.tpl';
    }
     
     
    ///////////////////////////////j'affiche la page!
    $smarty->assign('title', $title);
    $smarty->display('header.tpl');
     
    include(CONTROLERS.'ariane.php');//fonctions liées à l'affichage du fil d'ariane
     
    include(CONTROLERS.'caroussel_actu.php');//fonctions liées à l'affichage des actualités.
     
    //////////////affichage du menu/////////////
    include(CONTROLERS.'menu.php');
    $smarty->display('menu.tpl');
    ////////////////////////////////////////////
     
    require_once $inc;//inclus la page
    $smarty->display($display);
     
    ////////////Affichage du pied de page////////
    include(CONTROLERS.'footer.php');///fonctions liées au pied de page
    $smarty->display('footer.tpl');
    /////////////////////////////////////////////
    ob_end_flush();
    ?>
    gamme.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
     
    <?php
    require_once MODELS.'gamme.php';
     
    if(isset($_GET['id']) and is_numeric($_GET['id'])){
     
    $uneGamme = getGamme($_GET['id']);
    $uneGamme['url_image_gamme'] = './img/gammes/'.$uneGamme['id_gamme'].'-';
    $uneGamme['url_image_gamme'].= safe_str($uneGamme['nom_gamme']).'/'.$uneGamme['url_image_gamme'];
     
    $smarty->assign('uneGamme', $uneGamme);
    $produits = getProduits($_GET['id']);
    $smarty->assign('produits', $produits);
    global $title;
    $title = 'omg ça marche!';
     
     
    }else{
    header('location: ./index.php');
    }
    ?>
    On peut donc voir que je switch suivant un GET et que je traite mes données dans le fichier gamme.
    Pour le SEO, j'aimerais afficher un title différent selon chaque page (logique hein ^^). Le problème est que, je traite comme on peut le voir le $title dans le fichier gamme.php (le fichier inclus donc) et que je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $smarty->assign('title', $title);
    Et qu'il ne me trouve pas $title et qu'il m'affiche un undefined index...

    Je ne comprends pas car j'ai fait des tests (avec un nouveau fichier index.php et test.php pour voir si normalement la variable est rappatriée dans le fichier parent, et c'est le cas)


    Quelqu'un pourrait-il m'éclairer s'il vous plait?
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 104
    Points : 95
    Points
    95
    Par défaut
    C'est tout à fait normal.

    Ton fichier index.php ne peux pas récupérer 'par magie' les variables des autres fichiers.

    essaye ça tu comprendras peut-être mieux :

    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
    <!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" lang="fr">
    
    <?php include("test.php"); ?>
    
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     
      <title><?php echo $title; ?></title>
     
    </head>
    <body>
    Test de titre
    <!-- Document -->
    </body>
    </html>
    La tu 'inclus' dans ta page index le fichier test.php. A partir de la, tous ce qui existe dans ton fichier test.php sera accessible dans ton index.

  3. #3
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    Oui oui, je sais. J'avais oublié le include (j'ai fait un edit en le marquant).

    Mais cetait des tests. Regarde mon nouveau post. (edit de celui ci expliquant le vrai problème).

    Merci de te pencher sur mon cas
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

  4. #4
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    C'est bon, j'ai enfin trouvé à force de lire, relire et rererelire...

    En fait, c'est encore une étourderie...

    Dans mon switch case 'gamme' je faisais $inc = CONTROLERS.'gamme.php'

    Puis je l'incluais après le header.tpl... Donc normale qu'il ne le trouve pas. Je devais faire mon include dans le switch et non après...
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 104
    Points : 95
    Points
    95
    Par défaut
    hmmm je ne suis pas expert en MVC sous php mais il y a un truc qui me semble bizarre :


    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
    ///////////////////////////////j'affiche la page!
      $smarty->assign('title', $title);
      $smarty->display('header.tpl');
      
      include(CONTROLERS.'ariane.php');//fonctions liées à l'affichage du fil d'ariane
      
      include(CONTROLERS.'caroussel_actu.php');//fonctions liées à l'affichage des actualités.
      
      //////////////affichage du menu/////////////
      include(CONTROLERS.'menu.php');
      $smarty->display('menu.tpl');
      ////////////////////////////////////////////
      
      require_once $inc;//inclus la page
      $smarty->display($display);
    deja quand tu fais : $smarty->assign('title', $title);

    Ta variable $title n'existe pas encore.

    Juste au cas ou, as tu essayé de faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $title = "test";
    $smarty->assign('title', $title);
    si cela fonctionne alors tu devrais faire ton inclusion avant $smarty->assign('title', $title);

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 104
    Points : 95
    Points
    95
    Par défaut
    ah ba j'étais pas loin ^^ le problème est bien que ta variable $title n'était pas encore défini car tu faisais ton include après.

    bon courage pour la suite.

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

Discussions similaires

  1. [FLASH MX] Portée des variables ???
    Par mic79 dans le forum Flash
    Réponses: 2
    Dernier message: 08/02/2005, 10h21
  2. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  3. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  4. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05
  5. [FLASH MX 2004][XML]portée de variable
    Par marco_ dans le forum Flash
    Réponses: 8
    Dernier message: 29/04/2004, 15h47

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