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 :

Warning: Illegal string offset 'type'


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2011
    Messages : 131
    Points : 49
    Points
    49
    Par défaut Warning: Illegal string offset 'type'
    Bonjour,

    Avez vous une idée comment résoudre cette erreur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Illegal string offset 'type'
    Cette erreur apparait quand je sauve des données. En résumé je peux mettre dans ma feuille produits des options qui vont s'afficher sous forme de select, radio ...textarea or file à télécharger dans le catalogue

    Si j'utilise uniquement ces éléments comme option : select, checkbox, radio, je n'ai pas de problèmes, tout se passe correctement.

    Mais à partir du moment ou je mets un textarea ou un file, j'ai l'erreur qui aparait.

    Avez vous une idée de ce qui peut se passer et comment le résoudre ?

    Merci.

    code :

    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
        if (isset($_POST['product_option'])) {
            foreach ($_POST['product_option'] as $product_option) {
     
              $type = $product_option['type'];  ===> pb de l'erreur ici
              $option_id = $product_option['option_id'];
     
              if ($option_id != 0) {
                if ($type == 'select' || $type == 'radio' || $type == 'checkbox' || $type == 'image') {
                  if (isset($product_option['product_option_value'])) {
                    $sql_array_option = ['value' => null,
                                         'products_id' => (int)$products_id,
                                         'option_id' => (int)$option_id,
                                         'required' => (int)$product_option['required']
                                        ];
     
                    $this->app->db->save('products_option', $sql_array_option);
     
                    $products_option_id = $this->app->db->lastInsertId();
     
                    foreach ($product_option['product_option_value'] as $product_option_value) {
                       ......
                      }
                    }
                  }
     
                } else {
                  if ($type != 'file') {
                      $sql_array_option = ['products_id' => (int)$products_id,
                                           'option_id' => (int)$option_id,
                                           'required' => (int)$product_option['required'],
                                           'value' => $type
                                          ];
                      $this->app->db->save('products_option', $sql_array_option);
     
                    } else {
                      if (!empty($_FILES['products_download_filename']['name'])) {
                        $sql_array_option = ['products_id' => (int)$products_id,
                                             'option_id' => (int)$option_id,
                                             'required' => (int)$product_option['required'],
                                             'value' => $type
                                            ];
                        $this->app->db->save('products_option', $sql_array_option);
                         .......
                      }
                    }
                  }
               }
              }
            }
          }
    Résultat de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($_POST['product_option']);
    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
    array (size=7)
      0 => 
        array (size=3)
          'option_id' => string '43' (length=2)
          'type' => string 'radio' (length=5)
          'product_option_value' => 
            array (size=1)
              0 => 
                array (size=12)
                  ...
      1 => 
        array (size=2)
          'option_id' => string '44' (length=2)
          'type' => string 'select' (length=6)
      2 => 
        array (size=2)
          'option_id' => string '47' (length=2)
          'type' => string 'checkbox' (length=8)
      3 => 
        array (size=2)
          'option_id' => string '58' (length=2)
          'type' => string 'file' (length=4)
      'products_option_maxdays' => string '7' (length=1)
      'products_option_maxcount' => string '' (length=0)
      'download_customers_group_id' => string '0' (length=1)


    résultat de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($product_option['type'])
    :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Save.php:61:string 'radio' (length=5)
    Save.php:61:string 'select' (length=6)
    Save.php:61:string 'checkbox' (length=8)
    Save.php:61:string 'textarea' (length=8)
    résultat de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($product_option)
    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
    array (size=3)
              'option_id' => string '43' (length=2)
              'type' => string 'radio' (length=5)
     
     
        Save.php:60:
            array (size=2)
              'option_id' => string '44' (length=2)
              'type' => string 'select' (length=6)
        Save.php:60:
            array (size=2)
              'option_id' => string '47' (length=2)
              'type' => string 'checkbox' (length=8)
     
        Save.php:60:
            array (size=2)
              'option_id' => string '55' (length=2)
              'type' => string 'file' (length=4)

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    le soucis vient des 3 dernières valeurs "products_option_maxdays", etc... qui ne sont pas de tableaux
    donc avant de lire $product_option['type'] vous devez tester si $product_option contient un tableau avec https://secure.php.net/manual/fr/function.is-array.php

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2011
    Messages : 131
    Points : 49
    Points
    49
    Par défaut
    php 7.2
    je vais regarder les points que tu mentionnes mais l'erreur se produit au début de la boucle ici

    $type = $product_option['type']

    cela ne va pas plus loin

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2011
    Messages : 131
    Points : 49
    Points
    49
    Par défaut
    @mathieu

    J'ai mis ceci, cela semble fonctionner correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            if (is_array($product_option)) {
                $type = $product_option['type'];
                $option_id = $product_option['option_id'];
              }

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/10/2017, 17h07
  2. [PHP 7] Trouver la valeur dans un tableau (array) : Illegal string offset
    Par tonton.odilon dans le forum Langage
    Réponses: 2
    Dernier message: 06/07/2017, 19h55
  3. [MySQL] Warning: Illegal string offset
    Par neomega0304 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/09/2016, 11h11
  4. [Tableaux] Illegal offset type
    Par Anduriel dans le forum Langage
    Réponses: 9
    Dernier message: 27/02/2006, 16h10
  5. Aide sur Warning: Illegal offset type in ...
    Par pounie dans le forum Langage
    Réponses: 5
    Dernier message: 03/01/2006, 13h13

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