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 :

ERROR MESSAGE SQLSTATE[23000]: Integrity constraint violation [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 2
    Par défaut ERROR MESSAGE SQLSTATE[23000]: Integrity constraint violation
    Bonjour à tous je suis étudiant en informatique et pour l'un de mes cours je dois développer un site en modèle MVC avec une framework imposé.
    Ce site doit être capable d'afficher une liste de produit ,de s'y connecter en mode admin et via le contrôleur ADMIN de rajouter des produits directement dans ma base de donnée.
    Le soucie est que lorsque je tente de faire un INSERT ,j'ai un message d'erreur "SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`pcitech`.`produit`, CONSTRAINT `fk_prod_cat` FOREIGN KEY (`CAT_ID`) REFERENCES `categorie` (`CAT_ID`))"

    voici ma classe qui rajoute un produit
    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
    <?php
     
    require_once 'framework/Model.php';
     
    /**
     * Affiche la page de Contact
     *
     * @author Admin
     */
    class Admin extends Model {
     
     
     
     
     
       public function Addproduct($PROD_NOM, $CAT_ID, $MQ_ID) {
            $sql ='INSERT INTO `PRODUIT` (`PROD_ID`,`PROD_NOM`,`CAT_ID`, `MQ_ID`) VALUES (NULL, "$PROD_NOM", "$CAT_ID", "$MQ_ID")';
            $this->executeRequest($sql);
     
        }
     
    }
    Et voici la page ControllerAdmin qui instancie mon objet admin

    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
    <?php
    require_once 'framework/Controller.php';
    require_once 'model/Admin.php';
     
     
    /**
     * Description of ControllerContact
     *
     * @author El Messaoudi abdelhakim
     */
    class ControllerAdmin extends Controller {
     
     
        private $Admin;
     
        public function __construct() {
            $this->Admin = new Admin();
     
        }
     
         public function index()
        {
            $this->generateView();
        }
     
     
        //ajoute un produit dans la table en utilisant la fonction du modèle admin Addproduct
       public function Newprodut() {
           if ($this->request->existingParameter("ProdName") && $this->request->existingParameter("CatID")&& $this->request->existingParameter("MqID")) {
                $PROD_NOM = $this->request->getParameter("ProdName");
                $CAT_ID = $this->request->getParameter("CatID");
                $MQ_ID = $this->request->getParameter("MqID");
                $this->Admin->Addproduct($PROD_NOM, $CAT_ID, $MQ_ID);
     
     
           }
     
     
        }
     
    }
    Voici Ma BD

    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
    51
    52
     
    /* Testé sous MySQL 5.x */
     
    CREATE DATABASE IF NOT EXISTS `pcitech` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
     
     
    drop table if exists ADMINISTRATEUR;
    drop table if exists REPARATION;
    drop table if exists PRODUIT;
    drop table if exists CATEGORIE;
    drop table if exists TYPE_REPARATION;
    drop table if exists MARQUE;
     
    create table ADMINISTRATEUR (
      ADMIN_ID integer primary key auto_increment,
      ADMIN_LOGIN varchar(100) not null,
      ADMIN_MDP varchar(100) not null
    ) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
     
    create table MARQUE (
      MQ_ID integer primary key auto_increment,
      MQ_NAME varchar(100) not null
    ) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
     
    create table CATEGORIE (
      CAT_ID integer primary key auto_increment,
      CAT_NAME varchar(100) not null
    ) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
     
    create table TYPE_REPARATION (
      TYPE_ID integer primary key auto_increment,
      TYPE_NAME varchar(100) not null
    ) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
     
    create table PRODUIT (
      PROD_ID integer primary key auto_increment,
      PROD_NOM varchar(100) not null,
      CAT_ID integer not null,
      MQ_ID integer not null,
      constraint fk_prod_cat foreign key(CAT_ID) references CATEGORIE(CAT_ID),
      constraint fk_prod_marq foreign key(MQ_ID) references MARQUE(MQ_ID)
    ) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
     
    create table REPARATION (
      REP_ID integer primary key auto_increment,
      REP_PRIX integer not null,
      PROD_ID integer not null,
      TYP_ID integer not null,
      constraint fk_rep_prod foreign key(PROD_ID) references PRODUIT (PROD_ID),
      constraint fk_rep_typ foreign key(TYP_ID) references TYPE_REPARATION (TYPE_ID)
     
    ) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
    PS: je suis nouveau dans ce site donc dite moi si il vous faut plus d’éléments merci pour votre aide.

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 988
    Par défaut
    Si tu obtiens ce message c'est que l'id de ta catégorie (CAT_ID) n'existe pas au moment où tu fais ta requête INSERT. Il faut donc soit créer la catégorie au préalable, soit en utiliser une qui existe déjà.

    Ce qui n'a rien d'étonnant puisque tes variables $CAT_ID et $MQ_ID ne sont pas extrapolées entre simple quotes. De toute manière, on ne met pas des variables comme ça dans une requête pour des raisons de sécurité notamment, mais on utilise une requête préparée.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 2
    Par défaut Merci
    Merci pour votre aide ca marche !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/08/2011, 14h25
  2. [MySQL] SQLSTATE[23000]: Integrity constraint violation
    Par okoweb dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 17/05/2011, 09h57
  3. Réponses: 9
    Dernier message: 24/04/2011, 17h03
  4. Réponses: 3
    Dernier message: 04/03/2011, 09h30
  5. Réponses: 7
    Dernier message: 29/11/2010, 17h34

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