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 :

Insert ou update des données dans une table mysql, champ de type json


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 92
    Par défaut Insert ou update des données dans une table mysql, champ de type json
    Bonjour tout le monde,
    je souhaite inserer ce format json : ["ROLE_USER","ROLE_EDITOR","ROLE_ADMIN"] dans une colum de type json dans ma table mysql.
    ma table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE roles(
    id int NOT NULL AUTO_INCREMENT,
    email varchar(60) NOT NULL,
    roles  json NOT NULL
    );
    Dans mon html, j'ai utilisé des checkbox :
    - user => value : ["ROLE_USER"]
    - editor => value : ["ROLE_EDITOR"]
    - admin => value :["ROLE_ADMIN"]

    mon code php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(isset($_POST['roles'])) $roles = $_POST['roles'];
    $mesRoles = '';
    if (!empty($roles)) {
      foreach ($roles as $role) {
         $mesRoles .= '"' . $role . '"' . ',';
      }
    }
    $roles = '[' . trim($mesRoles, ',') . ']';
    echo $roles;
    resultat => ["ROLE_USER","ROLE_EDITOR","ROLE_ADMIN"]

    Pour l'insertion j'ai le code erreur
    code erreur :
    Fatal error: Uncaught PDOException: SQLSTATE[22032]: <<Unknown error>>: 3140 Invalid JSON text: "Invalid value."
    at position 0 in value for column 'users.roles'.
    Nom : discorde1.JPG
Affichages : 460
Taille : 221,8 Ko

    je veux ce resultat dans ma base:
    Nom : roles_rows.JPG
Affichages : 434
Taille : 25,3 Ko
    j'utilise
    php vsersion: 7.4.26
    mysql : 5.7.36
    Wamp
    apache 2.4.51

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Tu ne montres pas le code de ta requête, et le message d'erreur laisse penser que tu transmets le tableau PHP.

    On code une variable PHP en JSON à l'aide de json_encode(), et on ne fait pas de traitements manuels pour cela.

    Par ailleurs, je ne comprends pas ton script avec empty() et tout le reste.

    Ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(isset($_POST['roles'])) $roles = $_POST['roles'];
    $mesRoles = '';
    if (!empty($roles)) {
      foreach ($roles as $role) {
         $mesRoles .= '"' . $role . '"' . ',';
      }
    }
    $roles = '[' . trim($mesRoles, ',') . ']';
    echo $roles;
    Devrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $roles = $_POST['roles'] ?? []; // Par défaut tableau vide
    // Ici on pourrait aussi vérifier si $roles est bien un tableau => is_array()
    $roles = json_encode($roles);
    echo $roles; // Affichage du JSON

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 92
    Par défaut
    Merci Séb. pour votre réponse rapide

    merci pour cette réécriture
    $roles = $_POST['roles'] ?? []; // Par défaut tableau vide
    // Ici on pourrait aussi vérifier si $roles est bien un tableau => is_array()
    $roles = json_encode($roles);
    echo $roles; // Affichage du JSON
    En fait je fais du MVC avec les setters et les getters.
    php
    mon getter doit retourner un array
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function getRoles(): array
        {
            $roles = $this->roles;
            $roles[] = 'ROLE_USER';
            return array_unique($roles);
            return $roles;
        }
    dans mon setter lorque je met json_encode, il met erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public function setRoles($roles)
        {
            $this->roles = json_decode($roles);
            return $this;
        }
    lorque je met json_encode, il dit que mon getter doit retourner un string ou null. Du coup il m'est impossible d'inserrer ma valeur $roles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $roles = $_POST['roles'] ?? []; // Par défaut tableau vide
    // Ici on pourrait aussi vérifier si $roles est bien un tableau => is_array()
    $roles = json_encode($roles);
    echo $roles; // Affichage du JSON
    mon code d'insertion
    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
     // On nettoie l'e-mail et on chiffre le mot de passe
                $email = strip_tags($_POST['email']);
                $pass = password_hash($_POST['password'], PASSWORD_ARGON2I);
     
                $roles = $_POST['roles'] ?? []; // Par défaut tableau vide
                // Ici on pourrait aussi vérifier si $roles est bien un tableau => is_array()
                $roles = json_encode($roles);
                echo $roles;
                //die; // Affichage du JSON
     
                // ON HYDRATE L'UTILISATEUR
                $user = new UsersModel;
                $user->setEmail($email)
                    ->setPassword($pass)
                    ->setRoles($roles);
     
                // ON STOCK L'UTILISATEUR DANS LE BASE DE DONNEES
                //echo ($user->getRoles);
                //die;
                $reponse = $user->create();

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/03/2021, 16h54
  2. Insérer des données dans une table MySQL avec PHP et PDO
    Par notebleue dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/09/2020, 11h12
  3. Insertion des données dans une table mysql
    Par joulive dans le forum ASP
    Réponses: 6
    Dernier message: 15/04/2010, 20h55
  4. Réponses: 2
    Dernier message: 28/09/2009, 13h46
  5. [MySQL] Ajouter des données dans une table avec la cmd update
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/09/2007, 19h54

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