SQLSTATE[23000] Integrity constraint violation: 1452 [Résolu]

Signaler
Messages postés
22
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
17 juin 2020
-
Messages postés
22
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
17 juin 2020
-
Bonjour j'ai un problème lors d'un update d'une base de donnée avec celle-ci:

Erreur !: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`stage`.`cours`, CONSTRAINT `cours_instruments_FK` FOREIGN KEY (`id_instruments`) REFERENCES `instruments` (`id`))

Voilà ou se ma requête SQL avec les donnée du formulaire:
function updateCours($idCours,$nom,$agemini,$agemaxi,$nbplaces,$instruments,$type_cour) {
    try {
        $cnx = connexionPDO();
        $req = $cnx->prepare("update cours set libelleCour=:libelleCour, agemini=:agemini, agemaxi=:agemaxi, nbplaces=:nbplaces, id_instruments=(Select id from instruments where id=:id_instruments), id_type_cour=(Select id from type_cour where id=:id_type_cour) where cours.id=:idCours");
        $req->bindValue(':libelleCour', $nom, PDO::PARAM_STR);
        $req->bindValue(':agemini', $agemini, PDO::PARAM_INT);
        $req->bindValue(':agemaxi', $agemaxi, PDO::PARAM_INT);
        $req->bindValue(':nbplaces', $nbplaces, PDO::PARAM_INT);
        $req->bindValue(':id_instruments', $instruments, PDO::PARAM_INT);
        $req->bindValue(':id_type_cour', $type_cour, PDO::PARAM_INT);
        $req->bindValue(':idCours', $idCours, PDO::PARAM_INT);
        
        $resultat = $req->execute();

    } catch (PDOException $e) {
        print "Erreur !: " . $e->getMessage();
        die();
    }
    return $resultat;
}


Extrait du formulaire d'où vient l'erreur :
        <label for="libelleInstru">Nom Instrument: </label>
            <span class="error-message"></span>
            <select name="libelleInstru" id="libelleInstru">
                <?php for ($i = 0; $i < count($getInstrument); $i++){?>
                    <option value="libelleInstru">
                        <?=$getInstrument[$i]["libelleIns"];}?>
                    </option>
            </select>
avec
$instruments = $nomInstru;
et
$nomInstru = $_POST['libelleInstru'];
pour envoyer à la fonction

3 réponses

Messages postés
28778
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 juin 2020
2 570
je te rappelle que tu as déjà ouvert eu de discussion pour le même problème est que le souci se situe au niveau de ta boucle for...
C'est le value de tes option qui n'est pas bon....
tu ne renvoie donc pas les bonnes valeurs dans ta requête...
Messages postés
22
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
17 juin 2020

C'est vrai je n'ai pas eu le réflexe d'utiliser la boucle foreach
Messages postés
28983
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 juin 2020
6 439
Bonjour,

Je n'ai pas essayé de tout décoder mais une observation :
id_instruments=(Select id from instruments where id=:id_instruments)

pourquoi chercher l'id si on l'a ;-)
pareil pour typ_cours
Messages postés
22
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
17 juin 2020

Parce que j'ai exactement la même erreur, je pensais que sa résoudrais le problème
Messages postés
28983
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 juin 2020
6 439
soit tu as le nom et il faut trouver l'id, soit tu as l'id et pas besoin de sous-select

affiche tes variables pour voir ce qu'elles contiennent
Messages postés
22
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
17 juin 2020
>
Messages postés
28983
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 juin 2020

J'ai l'id mais pas le bon vu comme c'est en clé étrangère
Messages postés
28778
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 juin 2020
2 570 >
Messages postés
22
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
17 juin 2020

Clé étrangère ou pas... tu fais une sous-requête pour récupérer l'id alors que tu connais la valeur de la I'id...
C'est comme demander de quelle couleur est le cheval blanc d'Henri IV...