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

PHP & Base de données Discussion :

Erreur Multiple Select : Array to string conversion


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club Avatar de iamalex
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Par défaut Erreur Multiple Select : Array to string conversion
    Bonjour, depuis hier j'ai un petit soucis dans mon code.
    Je suis actuellement en train de développer mon portfolio. Mon erreur est la suivante :

    Sur mon site, je peux poster des "Postes" qui seront soit des articles, soit des créations (projets...). Ces "Postes" peuvent appartenir à une ou plusieurs catégories.
    Dans mon administration, j'utilise un Multiple Select qui liste toutes les catégories. Le but était donc de pouvoir ajouter une ou plusieurs catégories à un poste lors de son ajout depuis l'administration.

    Mon modèle de données est le suivant :
    Nom : Capture du 2018-10-27 09-52-47.png
Affichages : 274
Taille : 30,3 Ko
    Il fonctionne très bien, du moins quand je fait des entrées depuis la base de données.

    Pour lister les différentes catégories présentes, j'utilise donc un Foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <select multiple class="form-control" id="tags" name="tags[]" required>
        <?php
     
        foreach ($getCategories->fetchAll() as $categorieDetails) {
            echo '<option value="' . (string) $categorieDetails['id'] . '">' . $categorieDetails['tag'] . '</option>';
        }
     
        ?>
    </select>
    Mon modèle est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $insert = $db->prepare('INSERT INTO postes_categories (id_poste, id_categorie) VALUES (:id_last_post, :id_categorie)');
     
    $insert->execute(array(
        'id_last_post' => $id_last_post,
        'id_categorie' => $id_categorie
    ));
    Je récupère l'id du dernier article posté, puis je lui passe l'une des catégories séléctionnés via le Multiple Select.

    Pour ce faire, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach ($_POST['tags'] as $tagDetails) {
     
        $addPosteCategorie = $postes_categories->addPosteCategorie($getLastPostesID->fetch(), $tagDetails);
     
    }
    Mais malheureusement, j'ai une erreur de type : Array to string conversion

    L'erreur provient de la ligne à l'intérieur du foreach (le dernier bloc de code).

    J'ai regardé sur différents forums mais je ne trouve pas un moyen pour résoudre ce problème.
    J’espère que vous parviendrez à m'aider.

    Merci par avance.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 415
    Par défaut
    Si tu utilises un select multiple, tu envoie un tableau et php récupère un tableau. Apparemment ton code php demande une chaine de caractère et tu lui fourni un tableau.

  3. #3
    Futur Membre du Club Avatar de iamalex
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Si tu utilises un select multiple, tu envoie un tableau et php récupère un tableau. Apparemment ton code php demande une chaine de caractère et tu lui fourni un tableau.
    Salut, j'ai bien compris que j'envoyais un tableau, c'est pour cela que j'ai créé un foreach.
    En gros, ma question est la suivante :

    Comment insérer les "values" d'un select multiple dans ma base de données.
    Le but du foreach et de parcourir chacune des valeurs sélectionnées dans le formulaire et d'ajouter autant d'entrées dans ma base de données.

    Je ne sais pas si je suis assez clair...

    Pour résumer, j'aimerais que si plusieurs catégorie ont été choisis, on ajoute chacune des catégories dans la base de données.
    Par exemple: Poste n°1 à 3 catégorie : php, html, css
    Donc, s'il y a eu 3 catégories de séléctionnés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    (Pseudo code)
    Insertion n°1 dans la table postes_categories = 'id_poste = [l'id du poste] + id_categorie = [l'id de la catégorie]
    Insertion n°2 dans la table postes_categories = 'id_poste = [l'id du poste] + id_categorie = [l'id de la catégorie]
    Insertion n°3 dans la table postes_categories = 'id_poste = [l'id du poste] + id_categorie = [l'id de la catégorie]

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 415
    Par défaut
    J'ai du mal à comprendre ton code. Pour visualiser les données tu peux utiliser var_dump()

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach ($_POST['tags'] as $tagDetails) {
     
    var_dump($tagDetails);
       // $addPosteCategorie = $postes_categories->addPosteCategorie($getLastPostesID->fetch(), $tagDetails);
     
    }

    Sinon sur le principe, pour enregistrer plusieurs lignes dans une bdd on fait une requête préparée, et on met le execute dans une boucle, par exemple :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $insert = $db->prepare('INSERT INTO postes_categories (id_poste, id_categorie) VALUES (?, ?)');
     
    foreach($tab_post as $value)
    {
    $insert->execute($value);
    };
    Suffit de t'arranger préalablement pour construire $tab_post de la sorte :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tab_post[] = ['id_last_post' => 'id_last_post_value1', 'id_categorie' => 'id_categorie_value1'];
    $tab_post[] = ['id_last_post' => 'id_last_post_vlaue2', 'id_categorie' => 'id_categorie_value2'];
    //...

    Après il existe d'autres variantes, mais sur le principe le execute (et lui seul) est dans la boucle.

    Remarques que comme j'ai mis des marqueurs ? (non nommés) tu pourrais utiliser un tableau plus simple :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tab_post[] = ['id_last_post_value1', 'id_categorie_value1'];
    $tab_post[] = ['id_last_post_vlaue2', 'id_categorie_value2'];
    //...

  5. #5
    Futur Membre du Club Avatar de iamalex
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Par défaut
    Nop, toujours rien.

    Pour être plus précis, je vais te mettre ci-dessous le code de ma méthode modèle et mon contrôleur : (le code a un peu été modifié par rapport au début du topic)
    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
     
        public function addPosteCategorie($id_last_post, array $ids_categories) {
     
            $db = $this->dbConnect();
     
            $insert = $db->prepare('INSERT INTO postes_categories (id_poste, id_categorie) VALUES (:id_last_post, :id_categorie)');
     
            foreach ($ids_categories as $categorieDetails) {
     
                var_dump($categorieDetails);
     
                $insert->execute(array(
                    'id_last_post' => $id_last_post,
                    'id_categorie' => $categorieDetails
                ));
     
     
            }
    [Fichier "Postes_Categories.php", modèle de la table "postes_categories"]


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                $postes = new Postes();
                $addPoste = $postes->addPoste($_POST['titre'], $_POST['slug'], $_POST['img_url'], $_POST['contenu'], $id_type);
                $getLastPostesID = $postes->getLastPostesID();
     
                $postes_categories = new Postes_Categories();
     
                var_dump($_POST['tags']);
     
                $addPosteCategorie = $postes_categories->addPosteCategorie($getLastPostesID->fetch(), $_POST['tags']);
    [Morceau du fichier "addPosteController.php"]


    En gros ce qu'il se passe dans le contrôleur, c'est que j'ajoute un postes en appelant la méthode "addPoste" puis, à l'aide de la méthode "getLastPostID()", je récupère l'ID du dernier poste ajouté.
    Par la suite, la méthode "addPosteCategorie" (méthode du fichier "Postes_Categories", voir ci-dessus) est censé me permettre d'ajouter des catégories à un poste.
    Pour ce faire, je récupère l'ID du dernier poste créé mais aussi l'une des valeurs du tableau "tags[]" provenant de mon multiple select.

    Un screen de l'erreur sera peut-être plus parlant.
    Nom : Capture du 2018-10-28 19-37-08.png
Affichages : 140
Taille : 170,6 Ko
    [La ligne 28 est la ligne "'id_categorie' => $categorieDetails" du modèle PHP ci-dessus]


    Comme tu peux le voir, quand je var_dump mon array "$_POST['tags']", il a bien 3 indexs qui valent chacun 1 entier (l'id de la catégorie, ex : 2 = php).
    Comme tu peux le voir dans mon code, je parcours bien mon tableau à l'aide du foreach, mais ça me sort toujours la même erreur.
    Vraiment, je comprend ne pas d'où ça vient, enfin si, mais je ne comprend pas pourquoi il y a une erreur.

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 415
    Par défaut
    Fais un var_dump sur les variables que tu passe dans ta méthode donc aussi le $getLastPostesID->fetch(), si c'est un tableau et que tu attends une string c'est pas bon.

    (faudra supprimer les var_dump en dehors du débugage)

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

Discussions similaires

  1. [PDO] Array to string conversion et calcule d'après un code promotion
    Par Valadone dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 27/06/2015, 18h30
  2. Array to string conversion
    Par deathart dans le forum CodeIgniter
    Réponses: 17
    Dernier message: 04/09/2012, 13h08
  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