Erreur !: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'id_type_

Résolu
drenfa Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, je cherche une solution à ce problème et je pense que le problème vient de là:


Les variables sont instancié par $_POST via un formulaire :


PS: id_type_cour est une clé étrangère

5 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Commence par nous poster ton code correctement ( en utilisant les balises de code)
Explications ( à lire ENTIEREMENT... ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Donnes nous également le message d'erreur complet.

0
drenfa Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
Le formulaire:
<form method="post" id="saisie" action="./?action=couter" onsubmit="return valider()">
        <br/>
        <div class="form-group">
            <label for="quotient"class="label">Cout</label>
            <input type="text" class="form-control" name="montant" id="montant" placeholder="0">
            </br>
            <label for="">Tranches: </label>
            <select name="tranchesC" id="tranchesC">
            <option value="">..Tranche..</option>
                <?php for ($i = 0; $i < count($getTranche); $i++) {?>
                    <option value="<?= $i; ?>">
                        <?= $getTranche[$i]["id"];?>
                    </option>
                <?php } ?>
            </select>
            <label for="">Type de Cours: </label>
            <select name="typeCour" id="typeCour">
            <option value="">..Type de cour..</option>
                <?php for ($i = 0; $i < count($getTypeCour); $i++) {?>
                    <option value="<?= $i; ?>">
                        <?=$getTypeCour[$i]["libelle"];?>
                    </option>
                <?php } ?>
            </select>
        </div>
        <button name="bouton" id="bouton" type="submit" class="btn btn-primary">Envoyer</button>
</form>

Les variables :
$couter = $_POST['montant'];
$tranche=$_POST['tranchesC'];
$typeCour=$_POST['typeCour'];


Et la fonction qui permet de mettre les donnée dans la bdd:
function InsertCouter($couter,$tranche,$typeCour){
    try {
        $cnx = connexionPDO();
        $req = $cnx->prepare("Insert into couter(montant,id_tranches,id_type_cour) Value(:montant,(Select id from tranches where id=:tranche),(Select id from type_cour where id=:typeCour))");
        $req->bindValue(':montant', $couter, PDO::PARAM_INT);
        $req->bindValue(':tranche', $tranche, PDO::PARAM_INT);
        $req->bindValue(':typeCour', $typeCour, PDO::PARAM_INT);

        $resultat = $req->execute();
    } catch (PDOException $e) {
        print "Erreur !: " . $e->getMessage();
        die();
    }
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Visiblement...... tu n'as pas lu le lien que je t'ai donné.
Donc.. merci de nous poster ton code correctement.
0
drenfa Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
j'étais en train de la faire
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Je remarque au passage quelques erreurs....
$req = $cnx->prepare("Insert into couter(montant,id_tranches,id_type_cour) Value(:montant,(Select id from tranches where id=:tranche),(Select id from type_cour where id=:typeCour))");

Sachant que tu fais :
Select id from type_cour where id=:typeCour

.... id=:typeCour ..... donc pourquoi faire une sous-requête ??

Idem pour Tranche....

Où vas tu chercher ta requête ??
Il suffit de faire
$sql = "Insert into couter(montant,id_tranches,id_type_cour)
             Value(:montant, :tranche, :typeCour )";
$req = $cnx->prepare($sql);

0
drenfa Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai essayé de le faire mais sa me fait exactement la même erreur sur un autre formulaire, donc j'ai due faire une sous requête vu comme c'est sur une table étrangère
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 

donc j'ai due faire une sous requête vu comme c'est sur une table étrangère

Ben... non... y'a aucun intérêt.

Par contre, tant que tu ne nous donneras pas le message d'erreur EXACT et COMPLET ... difficile de t'en dire plus....

La structure des tables pourrait également nous servir....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
drenfa Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
La structure de la table


J'ai modifié comme tu me l'a dis mais sa met maintenant ça comme erreur: Erreur !: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`stage`.`couter`, CONSTRAINT `couter_type_cour_FK` FOREIGN KEY (`id_type_cour`) REFERENCES `type_cour` (`id`))
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Est-ce que l'id_type_cour que tu essaies d'insérer dans ta table existe t'il dans la table type_cour ?
Quelle est la valeur de ta variable $typeCour ?
0
drenfa Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
La table type_cour existe bien, est la variable $typecour contient le contenu du select typeCour du formulaire
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > drenfa Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
Je ne t'ai pas demandé si la TABLE type_cour existe .... mais si elle contient des valeurs... et de surcroit.. l' ID que tu essaies d'utiliser dans ta variable $typeCour
Je ne t'ai, par ailleurs, pas demandé d'où venait la variable $typeCour ... mais quelle était sa valeur ( 1, 2 , 10 , 555 ???) que tu essaies d'insérer dans ta table .
0
drenfa Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
La valeur $typeCour contient soit 1 ou 2, et l'id que j'essaie d'insérer correspond à ses valeurs
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > drenfa Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
C'est marrant.... vu ton code... je pense que ça commence à 0 ..
<select name="typeCour" id="typeCour">
            <option value="">..Type de cour..</option>
                <?php for ($i = 0; $i < count($getTypeCour); $i++) {?>
                    <option value="<?= $i; ?>">
                        <?=$getTypeCour[$i]["libelle"];?>
                    </option>
                <?php } ?>
            </select>

Il serait préférable de le modifier comme ceci
<select name="typeCour" id="typeCour">
            <option value="">..Type de cour..</option>
                <?php 
                    foreach($getTypeCour as $T ) {
                 ?>
                    <option value="<?php echo  $T['id']; ?>">
                        <?php echo $T["libelle"]; ?>
                    </option>
                <?php
                    } 
                ?>
            </select>
0