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 :

2 fois la même variable


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 2 fois la même variable
    Bonjour,
    je sais que c'est pas possible et pourtant le var_dump de ce tableau associatif m'indique 2 éléments avec le même index...

    D'abord, j'avais
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $this->ref_App = new AP_application($this->data['sesaid'],
                $this->data['applicationname']);
    ...
    class AP_application extends JobClass
    {
       public function __construct( $sesaid, $appli_name ) 
    ...{
    et en debug dans AP_application.php, $sesaid vallait null alors que quand je fais new AP_application($this->data['sesaid'],... $this->data['sesaid'], n'est pas null. Pour être sûr, j'ai rajouté 2 lignes :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            $this->data['sesaid'] = 'SESA1234';
            UtilFct::debug("cvsimportcontroller 316 this_data",$this->data);
            $this->ref_App = new AP_application($this->data['sesaid'],
                $this->data['applicationname']);
    et $sesaid vaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    array(24) {
      ["sesaid"]=>
    string(10) "SESA100008"
      ...
      ["sesaid"]=>
      string(8) "SESA1234"
    }
    Il y a donc 2 fois le même index. Quelqu'un comprend ?

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 200
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 200
    Points : 8 425
    Points
    8 425
    Billets dans le blog
    17
    Par défaut
    Ce n'est pas possible.

    N'as-tu pas deux var_dump() successifs, ou deux arguments sur un var_dump() ? Ou un des deux éléments sesaid dans un sous-tableau ou dans un objet ?

    Transmet-nous le résultat complet dans un fichier

  3. #3
    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
    Voici le code de ma méthode de debug :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     static public function debug($location, $var)
        {
            echo "<br/>".(is_string($location))?$location:'';//la variable $location sert à indiquer le nom
            // du fichier et le numéro de la ligne où on a appelé la fonction car quand on en a plus besoin, on sait plus où
            // on l'a placé !
            echo "<br/><pre>";
            var_dump($var);
            echo "</pre><br/>";
        }
    Il n'y a qu'un seul var_dump...

    Je donnerais un fichier pour reproduire que demain...

  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
    Bonjour,
    je pense que le problème se situe en amont. Donc, je suis revenu en arrière, et suis reparti sur ce code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $this->ref_App = new AP_application($this->data['sesaid'],
                $this->data['applicationname']);
    ...
    class AP_application extends JobClass
    {
       public function __construct( $sesaid, $appli_name ) 
    ...{
    Vu le message d'erreur :
    Warning: Undefined array key "sesaid" in C:\projets\ticket_rawsrc\src\controller\CSVImportController.php on line 321
    j'ai rajouté un var_dump :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var_dump($this->data);echo "<br/>";
    self::createLicensesObjects();
     
    private function createLicensesObjects()
        {
            $this->ref_App = new AP_application($this->data['sesaid'], $this->data['applicationname']);
            ...
    et
    array(23) { ["sesaid"]=> string(8) "SESA1000" ["alternateids"]=> string(6) "(none)" ["platform"]=> string(20) "Software Engineering" ["platformowner"]=> string(9) "SESA84441" ["publisher"]=> string(9) "Atlassian" ["applicationname"]=> string(20) "JIRA Global Instance" ["hfmcode"]=> string(0) "" ["currentlyactive"]=> string(4) "True" ["activatedate"]=> string(12) "Jan 01, 2021" ["deactivatedate"]=> string(0) "" ["groupname"]=> string(0) "" ["officecountry"]=> string(5) "Spain" ["firstname"]=> string(6) "Miguel" ["lastname"]=> string(4) "Abad" ["companyname"]=> string(33) "SCHNEIDER ELECTRIC ESPANA, S.A.U." ["jobcode"]=> string(4) "FKP8" ["reportingentity"]=> string(0) "" ["businessunitname"]=> string(14) "Global Finance" ["location"]=> string(23) "BARCELONA (BAC DE RODA)" ["internetaddress"]=> string(18) "mail@se.com" ["managerfirstname"]=> string(8) "Alistair" ["managerlastname"]=> string(8) "Mckelvie" ["manageremail"]=> string(24) "manager.mail@se.com" }
    Comment est-ce possible ?

  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
    Bonjour

    Même avis que Séb, c'est impossible. Il doit y avoir un stud' quelque part.

    Dans ta fonction createLicensesObjects, comme première ligne, fais un truc comme die(isset($this->data['sesaid']) ? 'Exist' : 'Missing')); juste histoire de voir que ta clef existe ou pas.

    Note : tu avais installé xDebug il me semble, voici un bon cas pour faire du debugging pas à pas.

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 200
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 200
    Points : 8 425
    Points
    8 425
    Billets dans le blog
    17
    Par défaut
    J'ai ceci dans mon VSCode avec ton var_dump() :

    Nom : f443.png
Affichages : 174
Taille : 2,9 Ko

    Sur un éditeur hexadécimal :

    Nom : f443b.png
Affichages : 176
Taille : 4,0 Ko

    EF BB BF => Tu as un BOM qui traîne

    Tu dois sûrement avoir dans ton tableau une clef "{BOM}sesaid" et une autre "sesaid"

    Ceci explique cela

  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
    L'hypothèse du caractère BOM qui traîne me semble intéressante. Je pensais le supprimer ainsi :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     $this->data = array_map('trim', $this->data);
     $this->ref_App = new AP_application(($this->data)['sesaid'], $this->data['applicationname']);
    mais non, y a toujours l'erreur. Peut-on éditer en hexadécimal avec Notepad++ ? Si oui, comment ?

    Je vais être absent jusqu'en fin d'après-midi...

  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

  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
    Finalement, j'avais encore 5 minutes. Merci pour la recherche. Du coup :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     private function remove_utf8_bom($text)
        {
            $bom = pack('H*','EFBBBF');
            $text = preg_replace("/^$bom/", '', $text);
            return $text;
        }
     
        private function createLicensesObjects()
        {
            $this->data = array_map('self::remove_utf8_bom', $this->data);
            $this->ref_App = new AP_application(($this->data)['sesaid'], $this->data['applicationname']);
            ....
    J'ai encore l'erreur...

  10. #10
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    L'hypothèse du caractère BOM qui traîne me semble intéressante. Je pensais le supprimer ainsi :
    Laurent...
    CosmoKnaki t'avais indiqué le code à utiliser.
    Tu l'as déjà oublié ?

  11. #11
    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
    Citation Envoyé par jreaux62 Voir le message
    Tu l'as déjà oublié ?
    C'est malheureusement une séquelle de mon accident en 2000 (très mauvaise mémoire)...Pour le retrouver, le plus rapide a été de faire une recherche sur DVP : BOM et CosmoKnacki. Du coup :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private function remove_utf8_bom($text)
        {
            $text = preg_replace('~^\N{U+FEFF}~u', '', $text);
            return $text;
        }
     
    private function createLicensesObjects()
        {
            $this->data = array_map('self::remove_utf8_bom', $this->data);
            ...
    mais encore l'erreur

  12. #12
    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
    As-tu validé que la fonction est appelée non pas sur la valeur mais la clef ? Ton souci est au niveau du tableau associatif (key), pas de la valeur.

    Comment as-tu créé ton tableau ? C'est à cet endroit que tu dois alors valider ta clef (ou encore plus haut au niveau du fichier).

  13. #13
    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 en effet réalisé (avant de te lire) que la clé posait problème. De ce fait, j'ai résolu le problème ainsi :
    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
    private function remove_utf8_bom_and_semicolon($text)
        {
            $text = preg_replace('~^\N{U+FEFF}~u', '', $text);
            $text = str_replace(';','',$text);
            return $text;
        }
     
    private function createLicensesObjects()
        {
            $tab = [];
            foreach ($this->data as $key => $value)
            {
                $tab[self::remove_utf8_bom_and_semicolon($key)] = self::remove_utf8_bom_and_semicolon($value);
            }
            $this->data = $tab;
    y avait aussi un point_virgule qui gênait.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/07/2012, 16h45
  2. [RegEx] extraire un nombre variable de fois le même pattern
    Par [Hugo] dans le forum Langage
    Réponses: 3
    Dernier message: 18/11/2010, 14h53
  3. Réponses: 4
    Dernier message: 04/09/2007, 08h55
  4. [Débutant - Avis] même variable dans plusieurs pages...
    Par ShinJava dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 16/12/2004, 22h50
  5. [VB.NET] Appliquer plusieurs fois la même fonction...
    Par MiJack dans le forum Windows Forms
    Réponses: 9
    Dernier message: 22/09/2004, 10h52

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