Erreur SQL a l'insersion table relationnelles

Bonjour tous !

Voici l'erreur sql que je reçoit lors de l'insertion des données dans ma table.

Cannot add or update a child row: a foreign key constraint fails ('cybernet'.'site', CONSTRAINT 'fk_site_provider' FOREIGN KEY ('idprovider') REFERENCES 'provider' ('id') ON DELETE NO ACTION ON UPDATE NO ACTION)


2 réponses

  1. Salut,
    Une erreur dans tes clés étrangères de tes tables, mais sans requête et plus d'explication, j'peux pas t'en dire plus...
    1. Voici ma requête, j'insère dans la table site

      $sql = 'INSERT INTO 'site'  ('id' ,'idsiteinterne' ,'idsiteprovider','site_name' ,'dateactivation' ,'dateinstallation' ,'adressesite' ,'installerpar' ,'idclient' ,'adresseIP' ,'adresseIPmanage' ,'emailsite' ,'idprovider' ,'service' ,'idetatsite' ,'idpays' ,'province' ,'telephone' ,'observation' ,'datecreation') VALUES (NULL, "'.mysql_escape_string($_POST['idsiteinterne']).'", 
      "'.mysql_escape_string($_POST['idsiteprovider']).'","'.mysql_escape_string($_POST['site_name']).'",
      			 "'.mysql_escape_string($_POST['dateinstallation']('d-m-Y')).'" , "'.mysql_escape_string($_POST['dateactivation']('d-m-Y')).'", 
      			 "'.mysql_escape_string($_POST['adressesite']).'",  "'.mysql_escape_string($_POST['installerpar']).'",  "'.mysql_escape_string($_POST['idclient']).'",  
      			 "'.mysql_escape_string($_POST['adresseIP']).'", "'.mysql_escape_string($_POST['adresseIPmanage']).'", 
      			 "'.mysql_escape_string($_POST['emailsite']).'", "'.mysql_escape_string($_POST['idprovider']).'","'.mysql_escape_string($_POST['service']).'",
      			 "'.mysql_escape_string($_POST['province']).'", "'.mysql_escape_string($_POST['idetatsite']).'",
      			 "'.mysql_escape_string($_POST['province']).'", "'.mysql_escape_string($_POST['telephone']).'",
      			 "'.mysql_escape_string($_POST['observation']).'", "'.date('Y-m-d h:i:s').'")'; 
                      mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
    2. Les clés étrangères sont idsiteinterne et idsiteprovider ?
    3. Je viens de mettre de préciser les clés primaires. Merci !
  2. slt,
    si ton id est auto-incrément, tu n'as pas besoin de l'insérer.
    donc commence par enlever ton id et le null

    et ensuite précise nous tes clés primaires et étrangères
    1. Voici mes clés étrangères:

      KEY 'fk_site_provider' ('idprovider'),
        KEY 'fk_site_clients' ('idclient'),
        KEY 'fk_site_etat_site' ('idetatsite'),
        KEY 'fk_site_pays' ('idpays')


      -- Contraintes pour la table 'site'
      --
      ALTER TABLE 'site'
        ADD CONSTRAINT 'fk_site_clients' FOREIGN KEY ('idclient') REFERENCES 'client' ('id') ON DELETE NO ACTION ON UPDATE NO ACTION,
        ADD CONSTRAINT 'fk_site_etat_site' FOREIGN KEY ('idetatsite') REFERENCES 'etat_site' ('id') ON DELETE NO ACTION ON UPDATE NO ACTION,
        ADD CONSTRAINT 'fk_site_pays' FOREIGN KEY ('idpays') REFERENCES 'pays' ('id') ON DELETE NO ACTION ON UPDATE NO ACTION,
        ADD CONSTRAINT 'fk_site_provider' FOREIGN KEY ('idprovider') REFERENCES 'provider' ('id') ON DELETE NO ACTION ON UPDATE NO ACTION;
    2. ce que je vais te dire, c'est de bien vérifier l'ordre d'insertion des enregistrement et ensuite de faire les recherches sur la fonction last_insert_id() qui te permet de recupérer plus facilement tes clés primaires auto-increment