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 :

passage php 7.3 à 8.0


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 399
    Points : 166
    Points
    166
    Par défaut passage php 7.3 à 8.0
    Bonjour à tous

    je suis confronté à un problème que je n’arrive pas à comprendre

    J’ai des sessions comme ceci : if($_SESSION['lang'] == 'en') ( et c’est pareil pour d’autres sessions )

    en php 7.3 pas de problème

    en php 8.0
    erreur PHP Warning: Undefined array key "lang"
    Si vous avez une idée du problème je suis preneur

    Merci

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    Je ne pense pas vraiment que ça soit un problème de version de PHP mais plutôt que la session est mal instanciée.
    Je veux dire par là que dans la déclaration de la session, l'index lang n'est pas défini pour une raison ou pour une autre.

    Si vous voulez évitez ce message d'erreur, soit vous vous assurez d'avoir toujours au moins l'index de défini (même vide) soit vous vérifiez qu'il est défini et/ou pas vide avant d'en faire une comparaison.

    Dans le premier cas :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    session_start();
     
    // Si l'index lang n'est pas défini, on lui donne une valeur par défaut
    if(empty($_SESSION['lang']) {
        $_SESSION['lang'] = 'en';
       // on imagine qu'ensuite on peut vérifier la langue du navigateur ou un cookie pour changer cette valeur
    }

    Dans le second cas, si on reprend votre code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    // if($_SESSION['lang'] == 'en') devient :
    if(!empty($_SESSION['lang']) && $_SESSION['lang'] == 'en')  {
    }

    NB : Depuis les versions récentes de PHP (la 7.0 je crois), la méthode empty() intègre automatiquement une vérification de isset(), on a donc plus besoin de faire d'abord isset() et puis empty()
    Je veux dire par là qu'on peut utiliser empty() pour vérifier si un index est défini (à l'inverse, on ne peut pas utiliser empty si on veut seulement vérifier si une variable ou un index existe mais ce n'est pas trop cas de figure)

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 793
    Points : 3 064
    Points
    3 064
    Par défaut
    Bonjour

    Le message semble explicite non ? $_SESSION n'a pas de clef se nommant lang. Tu accèdes donc à une clef qui n'existe pas et c'est heureux que PHP rouspète.

    Tu peux faire un truc comme $lang = $_SESSION['lang'] ?? 'en'; pour forcer l'anglais si absence d'une langue prédéfinie.

  4. #4
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 399
    Points : 166
    Points
    166
    Par défaut
    Bonjour

    effectivement j'ai la réponse : le problème c'est de php 7.3 ne générait pas d'erreur donc je n'avais pas connaissance de ces problèmes
    mais php 8.0 lui génère bien l'erreur
    Il me reste plus qu'à bosser pour résoudre les problèmes

    question subsidiaire :$_SESSION['lang'] = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);.

    là j'ai une erreur :
    Undefined array key "HTTP_ACCEPT_LANGUAGE"
    je la traite comment

    Merci

  5. #5
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Rebonjour,

    C'est exactement la même chose qu'au-dessus

    Il vaudrait mieux vérifier que l'index existe avant de l'utiliser :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    // récupère les 2 premières lettres de la langue du navigateur si la clé existe, sinon on met l'anglais par défaut
    $_SESSION['lang'] = (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : 'en';

    En réalité, vous devriez également vérifier que la langue retournée par le navigateur fait partie des langues gérées par le site web

    Si je reprends mon premier exemple, ça donnerait ceci :
    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
    session_start();
     
    $available_languages = ['fr', 'en', 'de'];
    // Si l'index lang n'est pas défini, on lui donne une valeur par défaut
    if (empty($_SESSION['lang'])) {
        $_SESSION['lang'] = 'en';
        // On récupère la langue du navigateur si celui-ci la transmet
        if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
            $browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
            // Si la langue du navigateur fait partie de celles du site, on va l'utiliser
            if (in_array($browser_lang, $available_languages)) {
                $_SESSION['lang'] = $browser_lang;
            }
        }
    }

  6. #6
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 399
    Points : 166
    Points
    166
    Par défaut
    Merci à tous

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

Discussions similaires

  1. [MySQL] Passage à php 5.4 chez 1and1
    Par Freedolphin dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/07/2015, 19h15
  2. [PHP 5.3] Problème passage PHP 5.2 -> 5.3 avec fonction iconv()
    Par clement106 dans le forum Langage
    Réponses: 4
    Dernier message: 06/10/2011, 09h49
  3. OVH Serveur dédié, passage à PHP 5
    Par zz_10 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 06/11/2009, 12h45
  4. [POO] Évolution d'un site - passage à PHP 5
    Par filipic dans le forum Langage
    Réponses: 7
    Dernier message: 05/02/2007, 14h24
  5. passage php flash
    Par guitalca dans le forum Flash
    Réponses: 1
    Dernier message: 02/10/2006, 23h56

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