Salut, j'ai quelques préoccupations à vous soumettre... Je cherche à développer une application de gestion d'une association. Mes entités sont : Membres, Cotisation,
Paiement. Dans ma base, mes règles de gestion sont les suivantes:
Règle1) 1 Membre peut effectuer 1,n Paiement pour 1,1 Cotisation donnée.
Règle2) 1 Cotisation peut être l'objet de 1,n paiement par 1,1 Membre donnée.
Il apparaît donc une table intermédiaire que j'appelle" Paiement".
Mes insertions se passent bien dans les tables "Membres" et "Cotisation", mais lorsque je veux faire l'insertion dans la table intermédiaire "Paiement", il se pose un problème de
contrainte d'intégrité du genre "Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or
update a child row: a foreign key constraint fails (`assoc`.`paiement`, CONSTRAINT `fk_identifiant_du_membre` FOREIGN KEY (`id_membres`) REFERENCES `membres`
(`id_membres`)) in C:\wamp\www\association\trait_paiement.php on line 53".
Je vous donne l'aperçu de ma bd:
Ensuite voici mes pages:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2-- phpMyAdmin SQL Dump -- version 4.1.14 -- http://www.phpmyadmin.net -- -- Client : 127.0.0.1 -- Généré le : Mar 11 Septembre 2018 à 18:55 -- Version du serveur : 5.6.17 -- Version de PHP : 5.5.12 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Base de données : `assoc` -- -- -------------------------------------------------------- -- -- Structure de la table `cotisation` -- CREATE TABLE IF NOT EXISTS `cotisation` ( `id_cotisation` int(10) unsigned NOT NULL AUTO_INCREMENT, `objet` varchar(100) NOT NULL, `montant` varchar(30) NOT NULL, `datedebut` date DEFAULT NULL, `datefin` date DEFAULT NULL, `date_enregistrement` datetime NOT NULL, PRIMARY KEY (`id_cotisation`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; -- -- Contenu de la table `cotisation` -- INSERT INTO `cotisation` (`id_cotisation`, `objet`, `montant`, `datedebut`, `datefin`, `date_enregistrement`) VALUES (1, 'mariage', '10000', '0000-00-00', '0000-00-00', '2018-09-05 00:00:00'), (2, 'anniversaire', '5000FCFA', '0000-00-00', '0000-00-00', '2018-09-05 00:00:00'); -- -------------------------------------------------------- -- -- Structure de la table `membres` -- CREATE TABLE IF NOT EXISTS `membres` ( `id_membres` int(10) unsigned NOT NULL AUTO_INCREMENT, `nom` varchar(40) DEFAULT NULL, `prenom` varchar(40) NOT NULL, `datenais` varchar(20) DEFAULT NULL, `lieunais` varchar(30) DEFAULT NULL, `numcni` varchar(30) DEFAULT NULL, `fonction` varchar(30) DEFAULT NULL, `type_membre` varchar(30) DEFAULT NULL, `date_enregistrement_membre` datetime NOT NULL, PRIMARY KEY (`id_membres`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ; -- -- Contenu de la table `membres` -- INSERT INTO `membres` (`id_membres`, `nom`, `prenom`, `datenais`, `lieunais`, `numcni`, `fonction`, `type_membre`, `date_enregistrement_membre`) VALUES (1, 'Madesk', 'De Londres', '06/07/2000', 'Californie', NULL, 'Enseignant', 'membre', '2018-09-05 00:00:00'), (2, 'Madesk', 'De Londres', '06/07/2000', 'Californie', NULL, 'Enseignant', 'membre', '2018-09-05 00:00:00'), (3, 'Cheick', 'Boubakar', '02/09/1985', 'Daloa', 'CNI025167252GSBDQ', 'Conducteur', 'membre', '2018-09-05 12:42:18'), (4, 'Cheikinael', 'Ben', '07/02/1972', 'Séguéla', 'CNI025167HDNDJ', 'Couturier', 'membre', '2018-09-05 13:42:18'), (5, 'Ira', 'Allassane', '13/06/1940', 'Azaguié', NULL, 'Informaticien', 'Informaticien', '2018-09-05 00:00:00'); -- -------------------------------------------------------- -- -- Structure de la table `paiement` -- CREATE TABLE IF NOT EXISTS `paiement` ( `id_membres` int(10) unsigned NOT NULL, `id_cotisation` int(10) unsigned NOT NULL, `montant` varchar(20) DEFAULT NULL, `type_paiement` varchar(20) NOT NULL, `paie` varchar(30) DEFAULT NULL, `reste` varchar(30) DEFAULT NULL, `date_paiement` datetime NOT NULL, PRIMARY KEY (`id_membres`,`id_cotisation`), KEY `fk_identifiant_de_la_cotisation` (`id_cotisation`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Contenu de la table `paiement` -- INSERT INTO `paiement` (`id_membres`, `id_cotisation`, `montant`, `type_paiement`, `paie`, `reste`, `date_paiement`) VALUES (3, 1, '10000 FCFA', 'Une partie', '5000 FCFA', '5000 FCFA', '2018-09-05 17:37:00'); -- -- Contraintes pour les tables exportées -- -- -- Contraintes pour la table `paiement` -- ALTER TABLE `paiement` ADD CONSTRAINT `fk_identifiant_de_la_cotisation` FOREIGN KEY (`id_cotisation`) REFERENCES `cotisation` (`id_cotisation`), ADD CONSTRAINT `fk_identifiant_du_membre` FOREIGN KEY (`id_membres`) REFERENCES `membres` (`id_membres`); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
0) Page de connexion à ma BD
1) page d'enregistrement d'un membre: ajout_membre.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?php try { $bdd = new PDO('mysql:host=localhost;dbname=assoc', 'root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); } catch(Exception $e) { $bdd->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); die('Erreur:'.$e->get_Message()); } ?>
2) Page de traitement de la page page "ajout_membres.php"
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 <! DOCTYPE html> <html> <head> <title>enregistrer un membre</title> <meta="utf8"/> </head> <body> <div class="row"> <center> <div class="col-md-12 col-sm-12 col-xm-12"> <legend> <form method="POST" action="trait_ajout_membres.php"> <label>Nom:</label> <input type="text" name="nom"/> </br></br> <label>Prénom</label> <input type="text" name="prenom"/> </br></br> <label>Date de naissance:</label> <input type="text" name="datenais"/> </br></br> <label>Lieu de naissance</label> <input type="text" name="lieunais"/> </br></br> <label>Numéro CNI:</label> <input type="text" name="numcni"/> </br></br> <label>Fonction</label> <input type="text" name="fonction"/> </br></br> <label>Type membre</label> <input type="text" name="type_membre"/> </br></br> <input type="submit" name="enregistrer" value="Enregistrer"/> </form> </legend> </div> <center> </div> </body> </html>
3) Page d'enregistrement d'une cotisation:" ajout_cotisation.php"
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
53
54
55
56
57
58
59
60
61
62
63
64 <?php include('config_bd.php');?> <?php if(isset($_POST['enregistrer'])) { $nom=htmlentities(trim($_POST['nom'])); $prenom=htmlentities(trim($_POST['prenom'])); $datenais=htmlentities(trim($_POST['datenais'])); $lieunais=htmlentities(trim($_POST['lieunais'])); $numcni=htmlentities(trim($_POST['numcni'])); $fonction=htmlentities(trim($_POST['fonction'])); $type_membre=htmlentities(trim($_POST['type_membre'])); //$date_enregistrement_membre=$_POST['date_enregistrement_membre']; echo " <h2> VERIFICATION AVANT ENREGISTREMENT </h2></br>"; echo 'Nom:'.$nom.'</br> Prénom: '.$prenom.' </br> Date de naissance : '.$datenais.'</br> Lieu de naissance : '.$lieunais.'</br> Numéro CNI: '.$numcni.'</br> Fonction: '.$fonction. '</br> Type du membre: ' .$type_membre.'</br> <form method="POST" action="trait_ajout_membres.php" > <input type="hidden" name="nom2" value="'.$nom.'"> <input type="hidden" name="prenom2" value="'.$prenom.'"> <input type="hidden" name="datenais2" value="'.$datenais.'"> <input type="hidden" name="lieunais2" value="'.$lieunais.'"> <input type="hidden" name="numcni2" value="'.$numcni.'"> <input type="hidden" name="fonction2" value="'.$fonction.'"> <input type="hidden" name="type_membre2" value="'.$type_membre.'"> '.'date d\'enregistrement du membre : '. date("y-m-d").'<br> <input type="submit" name="annuler" value="Annuler"> <input type="submit" name="confirmer" value="Confirmer"> </form>'; } ?> <?php if(isset($_POST['confirmer'])) { //récupération des variables issues de la confirmation $nom2=isset($_POST['nom2']) ? $_POST['nom2'] : '' ; $prenom2 = isset($_POST['prenom2']) ? $_POST['prenom2'] : '' ; $datenais2 = isset($_POST['datenais2']) ? $_POST['datenais2'] : '' ; $lieunais2 = isset($_POST['lieunais2']) ? $_POST['lieunais2'] : '' ; $numcni2= isset($_POST['numcni2']) ? $_POST['numcni2'] : ''; $fonction2= isset($_POST['fonction2']) ? $_POST['fonction2'] : ''; $type_membre2= isset($_POST['type_membre2']) ? $_POST['type_membre2'] : ''; $date_enregistrement_membre2 = date('y-m-d'); $req = $bdd->prepare('INSERT INTO membres(nom, prenom, datenais, lieunais, fonction, type_membre , date_enregistrement_membre) VALUES(:nom2, :prenom2, :datenais2, :lieunais2, :fonction2, :type_membre2, :date_enregistrement_membre2)'); $req->execute(array( ':nom2'=>$_POST['nom2'], ':prenom2'=>$prenom2, ':datenais2'=>$datenais2, ':lieunais2'=>$lieunais2, ':fonction2'=>$fonction2, ':type_membre2'=>$type_membre2, ':date_enregistrement_membre2' => date('y-m-d' ))) or die (print_r($req->errorInfo())); $req->closeCursor(); echo ' <h4>Membre enregistré!</h4></br><a href="ajout_membres.php">Ajouter un autre membre!</a>'; } ?>
4) Page de traitement de la page d'enregistrement de la cotisation: "trait_cotisation.php"
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 <! DOCTYPE html> <html> <head> <title> enregistrer une cotisation </title> <meta="utf8"/> </head> <body> <div class="row"> <center> <div class="col-md-12 col-sm-12 col-xm-12"> <legend> <form method="POST" action="trait_ajout_cotisation.php"> <label>Objet: </label> <input type="text" name="objet" maxlength="255"/> </br></br> <label>Montant: </label> <input type="text" name="montant" maxlength="255"/> </br></br> <label>Date de début: </label> <input type="text" name="datedebut"/> </br></br> <label>Date de fin: </label> <input type="text" name="datefin"/> </br></br> <input type="submit" name="enregistrer" value="Enregistrer"/> </form> </legend> </div> </center> </div> </body> </html>
5) Page permettant de faire les paiements: "faire_paiement.php"
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 <?php include('config_bd.php');?> <?php if(isset($_POST['enregistrer'])) { $objet=htmlentities(trim($_POST['objet'])); $montant=htmlentities(trim($_POST['montant'])); $datedebut=htmlentities(trim($_POST['datedebut'])); $datefin=htmlentities(trim($_POST['datefin'])); //$numcni=htmlentities(trim($_POST['numcni'])); $date_enregistrement=date('y-m-d'); echo "VERIFICATION AVANT ENREGISTREMENT </br>"; echo 'L\'objet de la cotisation est:'.$objet.',</br> le montant à payer est: '.$montant.', </br> la date de début des paiements est le : '.$datedebut.' </br> et la date prévue pour la fin des paiements est le : '.$datefin.'</br></br></br> Cotisation enregistrée le: '.$date_enregistrement.'</br></br> <form method="POST" action="trait_ajout_cotisation.php"> <input type="hidden" name="objet2" value='.$objet.' /> <input type="hidden" name="montant2" value='.$montant.' /> <input type="hidden" name="datedebut2" value='.$datedebut.'/> <input type="hidden" name="datefin2" value='.$datefin.' /> '.'date d\'enregistrement de la cotisation : '. date("y-m-d").'<br> <input type="submit" name="annuler" value="Annuler" /> <input type="submit" name="confirmer" value="Confirmer" /> </form>'; } ?> <?php if(isset($_POST['confirmer'])) { $objet2=isset($_POST['objet2']) ? $_POST['objet2'] : '' ; $montant2=isset($_POST['montant2']) ? $_POST['montant2'] : ''; $datedebut2=isset($_POST['datedebut2']) ? $_POST['datedebut2'] : ''; $datefin2=isset($_POST['datefin2']) ? $_POST['datefin2'] : ''; //$numcni2=htmlentities(trim($_POST['numcni2'])); $date_enregistrement2= date('y-m-d'); $req=$bdd->prepare('INSERT INTO cotisation(objet, montant, datedebut, datefin, date_enregistrement) VALUES(:objet2, :montant2, :datedebut2, :datefin2, :date_enregistrement2)'); $req->execute(array(':objet2'=>$_POST['objet2'], ':montant2'=>$_POST['montant2'], ':datedebut2'=>$_POST['datedebut2'], ':datefin2'=>$_POST['datefin2'], //':numcni2'=>$_POST['numcni2'], ':date_enregistrement2'=>date('y-m-d'))) or die (print_r($req->errorInfo())); $req->closeCursor(); echo'<h4> Cotisation enregistrée avec succès! </h4> </br><a href="ajout_cotisation.php">Ajouter une autre cotisation!</a>'; } ?>
6) Voici maintenet la page qui pose le problème, c'est la page qui doit traiter et enregsitrer le paiement: "trait_paiement.php"
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 <?php include ('config_bd.php');?> <! DOCTYPE html> <html> <head> <title>faire un paiement</title> <meta="utf8"/> </head> <body> <div class="row"> <center> <div class="col-md-12 col-sm-12 col-xm-12"> <h2>FAIRE UN PAIEMENT</h2> <legend> <form method="POST" action="trait_paiement.php"> <select name="id_membres"> <?php $req = $bdd->query('SELECT * FROM membres'); //$req = execute(); while($donnees=$req->fetch()) { ?> <option name="id_membres"/> <?php echo 'Membre numero: '.$donnees ['id_membres'].'</br>'; } ?> </option> </select> <select name="id_cotisation"> <?php $req = $bdd->query('SELECT * FROM cotisation'); //$req = execute(); while($donnees=$req->fetch()) { ?> <option name="id_cotisation"> <?php echo 'Cotisation numero: '.$donnees ['id_cotisation'].'</br>'; } ?> </option> </select> <select name="montant"> <?php $req = $bdd->query('SELECT * FROM cotisation'); //$req = execute(); while($donnees=$req->fetch()) { ?> <option name="montant"> <?php echo 'Montant: '.$donnees['montant'].'</br>'; } ?> </option> </select> <select name="type_paiement"> <option> Une partie</option> <option> Totalité </option> </select> <label>Paie:</label> <input type="text" name="paie" /> <label>Reste:</label> <input type="text" name="reste" /> <input type="submit" name="enregistrer" value="Enregistrer"/> </form> </legend> </div> </center> </div> </body> </html>
1) En effet, lorsque j'essaie de faire un paiement, il y'a un message d'erreur qui s'affiche me disant qu'il ya une violation de contrainte d'intégrité à la ligne 53 de la page trait_paiement.php,
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
53
54
55
56
57
58
59 <?php include('config_bd.php');?> <?php if(isset($_POST['enregistrer'])) { $id_membres=htmlentities(trim($_POST['id_membres'])); $id_cotisation=htmlentities(trim($_POST['id_cotisation'])); $montant=htmlentities(trim($_POST['montant'])); $type_paiement=htmlentities(trim($_POST['type_paiement'])); $paie=htmlentities(trim($_POST['paie'])); $reste=htmlentities(trim($_POST['reste'])); $date_paiement=date('y-m-d'); echo " <h2> VERIFICATION AVANT ENREGISTREMENT </h2></br>"; echo ''.$id_membres.'</br> '.$id_cotisation.' </br> : '.$montant.'</br> '.$type_paiement.'</br>'.$paie.'</br> '.$reste.'</br> '.$date_paiement. '</br> <form method="POST" action="trait_paiement.php" > <input type="hidden" name="id_membres2" value="'.$id_membres.'"> <input type="hidden" name="id_cotisation2" value="'.$id_cotisation.'"> <input type="hidden" name="montant2" value="'.$montant.'"> <input type="hidden" name="type_paiement2" value="'.$type_paiement.'"> <input type="hidden" name="paie2" value="'.$paie.'"> <input type="hidden" name="reste2" value="'.$reste.'"> '.'date du paiement : '. date("y-m-d").'<br> <input type="submit" name="annuler" value="Annuler"> <input type="submit" name="confirmer" value="Confirmer"> </form>'; } ?> <?php if(isset($_POST['confirmer'])) { //récupération des variables issues de la confirmation $id_membres2=isset($_POST['id_membres2']) ? $_POST['id_membres2'] : '' ; $id_cotisation2 = isset($_POST['id_cotisation2']) ? $_POST['id_cotisation2'] : '' ; $montant2 = isset($_POST['montant2']) ? $_POST['montant2'] : '' ; $type_paiement2 = isset($_POST['type_paiement2']) ? $_POST['type_paiement2'] : '' ; $paie2= isset($_POST['paie2']) ? $_POST['paie2'] : ''; $reste2= isset($_POST['reste2']) ? $_POST['reste2'] : ''; //$date_paiement2 = date('y-m-d'); $req = $bdd->prepare('INSERT INTO paiement(id_membres, id_cotisation, montant, type_paiement, paie, reste , date_paiement) VALUES(:id_membres2, :id_cotisation2, :montant2, :type_paiement2, :paie2, :reste2, :date_paiement2)'); $req->execute(array( ':id_membres2'=>$_POST['id_membres2'], ':id_cotisation2'=>$id_cotisation2, ':montant2'=>$montant2, ':type_paiement2'=>$type_paiement2, ':paie2'=>$paie2, ':reste2'=>$reste2, ':date_paiement2' => date('y-m-d' ))) or die (print_r($req->errorInfo())); $req->closeCursor(); echo ' <h4>Paiement enregistré!</h4></br><a href="trait_paiement.php">Faire un paiement!</a>'; } ?>
chose que je ne comprends pas...
Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`assoc`.`paiement`,
CONSTRAINT `fk_identifiant_du_membre` FOREIGN KEY (`id_membres`) REFERENCES `membres` (`id_membres`)) in C:\wamp\www\association\trait_paiement.php on line 53.
2) Ensuite lorsque je fais mes insertions dans la table "cotisation", le champ "objet" de la table "cotisation" n'arrive pas à enregistrer la totalité des textes que j'insère, il pren une partie et
laisse une partie. Par exemple lorsque j'essaie de mettre le texte suivant "Mariage du Président prévu pour bientôt" dans le champs "objet", il n'enregistre que "Mariage" et laisse le reste du
texte, sauf si je vais dans phpmyadmin pour faire l'insertion.
Merci pour votre aide!
Partager