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 :

Notice: Array to string conversion in script.php [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 59
    Par défaut Notice: Array to string conversion in script.php
    Bonjour ,

    je m'arrache les cheveux et je ne trouve pas la cause de mon problème.
    Mon code doit migrer d'un serveur php 5.6 vers un autre serveur en php 7

    A priori, ça devait bien se passer.

    Sauf que j'ai une erreur du type
    Notice: Array to string conversion
    et que les résultats ne correspondant plus à ce qui est attendu, plus rien ne s'affiche.

    Pour résumer le contexte, je fais un select dans mysql qui me renvoi un tableau qui me permettra de construire le menu utilisateur.
    Les champs renvoient le libellé, le lien, les sous-menus éventuels , etc...

    chaque enregistrement reçu est mis dans un tableau. Ce tableau est ajouté dans un tableau "conteneur" qui sera renvoyé par ma classe au programme. A charge pour le programme de le lire et de faire les affichages qui vont bien.

    Le bout de code qui fait ça est le suivant (il marche très bien en php 5.6)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
               foreach ($requete->fetchAll() as $result) {
     
                    $liste[$result[self::FIELD_ID]] = array('Titre' => $result[self::FIELD_TITRE],
                        'LinkUrl' => $result[self::FIELD_LINK],
                        'ImageUrl' => $result[self::FIELD_IMAGE],
                        'Texte' => $result[self::FIELD_TEXTE],
                        'ordre' => $result[self::FIELD_ORDRE],
                        'parent' => $result[self::FIELD_PARENT],
                        'Button' => $result[self::FIELD_BUTTON],
                        'Id' => $result[self::FIELD_ID]
                    );
                }
                return $liste;

    si je vais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($liste[1][self::FIELD_LINK]);
    En php 5.6 j'aurai une URL
    En php 7 il m'affiche : string(1) "A"

    A noter qu'il fait ça pour tous les FIELD_... , j'ai systématiquement string(1) "A"

    Quelqu'un peut me pointer mon erreur et me glisser la syntaxe correcte en version 7 ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    comme ça :

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 59
    Par défaut
    cela ne fonctionne pas.

    J'ai oublié de préciser dans mon premier post qu'au début de ma classe j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const FIELD_LINK = 'action';
    Par acquis de conscience, je viens d'essayer et la ça n'affiche
    J'ai également essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                echo $liste[1]['action'];
                echo '<br>';
                echo $liste[1][self::FIELD_LINK];
    L'output est 'A' dans les deux cas.

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    quand tu fais foreach ($requete->fetchAll() as $result), $result contient déjà tes valeurs.
    Il n'y a plus qu'à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($requete->fetchAll() as $result) {
        echo $result[self::FIELD_ID], '<br>', $result[self::FIELD_LINK];
    }
    au pire tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach ($requete->fetchAll() as $result) {
        $id = $result[self::FIELD_ID];
        $liste[$id] = $result;
    }

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 59
    Par défaut
    Bonjour à tous,

    Les solutions proposées ici n'ont pas résolu mon problème, mais j'ai fini par trouver ce qui n'allait pas.
    Pour le cas ou ça servirait à quelqu'un d'autre, je partage la cause du problème:

    En php 5.6 j'avais déclaré ma variable comme suit:

    ensuite, j'utilisais mon foreach comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
               foreach ($requete->fetchAll() as $result) {
     
                    $liste[$result[self::FIELD_ID]] = array('Titre' => $result[self::FIELD_TITRE],
                        'LinkUrl' => $result[self::FIELD_LINK],
                        'ImageUrl' => $result[self::FIELD_IMAGE],
                        'Texte' => $result[self::FIELD_TEXTE],
                        'ordre' => $result[self::FIELD_ORDRE],
                        'parent' => $result[self::FIELD_PARENT],
                        'Button' => $result[self::FIELD_BUTTON],
                        'Id' => $result[self::FIELD_ID]
                    );
                }
    En php 7, $result DOIT être initialisé comme tableau avant de pouvoir lui ajouter des éléments. la ligne suivante
    a suffit à résoudre le problème

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

Discussions similaires

  1. [MySQL] Notice: Array to string conversion
    Par Invité dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/05/2019, 19h53
  2. [PHP 5.6] PHP Notice: Array to string conversion
    Par beegees dans le forum Langage
    Réponses: 6
    Dernier message: 09/11/2015, 08h55
  3. [MySQL] PB : "Notice: Array to string conversion"
    Par moma586 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/07/2012, 09h11
  4. [MySQL] Formulaire erreur Array to string conversion
    Par akamaru dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/12/2008, 11h02
  5. Réponses: 2
    Dernier message: 28/12/2007, 12h09

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