Insérer des données dans une table intermédiaire
Buk01
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
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:
0) Page de connexion à ma BD
1) page d'enregistrement d'un membre: ajout_membre.php
2) Page de traitement de la page page "ajout_membres.php"
3) Page d'enregistrement d'une cotisation:" ajout_cotisation.php"
4) Page de traitement de la page d'enregistrement de la cotisation: "trait_cotisation.php"
5) Page permettant de faire les paiements: "faire_paiement.php"
6) Voici maintenet la page qui pose le problème, c'est la page qui doit traiter et enregsitrer le paiement: "trait_paiement.php"
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,
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.
3) De plus le champs "numcni" de la table 'Membres" m'affiche encore des contanus NULL lorsque je fais mes insertions à travers les champs de saisie de mon application, sauf si je procède
par phpmyadmin. Je ne sais également pas d'ou vient ses erreurs. Merci pour l'éclaircissement.
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:
-- 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 */;
Ensuite voici mes pages:
0) Page de connexion à ma BD
<?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()); } ?>
1) page d'enregistrement d'un membre: ajout_membre.php
<! 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>
2) Page de traitement de la page page "ajout_membres.php"
<?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>'; } ?>
3) Page d'enregistrement d'une cotisation:" ajout_cotisation.php"
<! 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>
4) Page de traitement de la page d'enregistrement de la cotisation: "trait_cotisation.php"
<?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>'; } ?>
5) Page permettant de faire les paiements: "faire_paiement.php"
<?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>
6) Voici maintenet la page qui pose le problème, c'est la page qui doit traiter et enregsitrer le paiement: "trait_paiement.php"
<?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>'; } ?>
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,
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.
3) De plus le champs "numcni" de la table 'Membres" m'affiche encore des contanus NULL lorsque je fais mes insertions à travers les champs de saisie de mon application, sauf si je procède
par phpmyadmin. Je ne sais également pas d'ou vient ses erreurs. Merci pour l'éclaircissement.
A voir également:
- Insérer des données dans une table intermédiaire
- Fuite données maif - Guide
- Insérer une vidéo dans powerpoint - Guide
- Table des matières word - Guide
- Table ascii - Guide
- Insérer signature word - Guide
5 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
que contient la ligne 53 de la page trait_paiement.php?
si tu veux comprendre la raison de la violation de la contrainte d'intégrité, tu dois commencer par déterminer les valeurs que tu essaies d'insérer dans la table. quelles sont ces valeurs?
que contient la ligne 53 de la page trait_paiement.php?
si tu veux comprendre la raison de la violation de la contrainte d'intégrité, tu dois commencer par déterminer les valeurs que tu essaies d'insérer dans la table. quelles sont ces valeurs?
Hello
Après un bref coup d’œil, peut être une piste :
Sur ta page "faire_paiement.php" , ton
Ensuite sur ta page "trait_paiement.php" , tu le récupère de cette manière :
Du coup il est égale maintenant à Membre numero: XXXXXXXX
Dans ta table je pense que seul le numéro XXXXXXXX est stocké mais avec le Membre numero: avant il ne le retrouve plus....
Sois tu vire le Membre numero: avant la recherche en base de l'iD soit tu vire le texte du select...
Tiens moi au courant sinon pour que je regarde plus en détail.
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
-> Essaye de donner une taille à ton input directement dans ton code et/ou dans phpmyadmin augmente sa valeur et/ou son type, par exemple au dessus de VARCHAR:
« VARCHAR » un texte cours de 0 à 65.535 caractères
« TEXT » pour du texte en grande quantité
« MEDIUMTEXT » un texte de 0 à 16.777.215 caractères
...
et pour le coup ne mets pas de "CHAR" ou "TINYTEXT"
(regarde ici : https://openclassrooms.com/fr/courses/1225826-choisir-les-bons-types-de-colonne-sql)
Pour ton numcni, sur ta page "ajout_membres.php" en fait tu ne le traite absolument pas.... Regarde tu ne l'ajoute pas dans ta base....
@+
Après un bref coup d’œil, peut être une piste :
Sur ta page "faire_paiement.php" , ton
<select name="id_membres">va avoir une valeur :
echo 'Membre numero: '.$donnees soit MEMBRE NUMERO: XXXXXXXX
Ensuite sur ta page "trait_paiement.php" , tu le récupère de cette manière :
$id_membres=htmlentities(trim($_POST['id_membres']));
Du coup il est égale maintenant à Membre numero: XXXXXXXX
Dans ta table je pense que seul le numéro XXXXXXXX est stocké mais avec le Membre numero: avant il ne le retrouve plus....
Sois tu vire le Membre numero: avant la recherche en base de l'iD soit tu vire le texte du select...
Tiens moi au courant sinon pour que je regarde plus en détail.
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
-> Essaye de donner une taille à ton input directement dans ton code et/ou dans phpmyadmin augmente sa valeur et/ou son type, par exemple au dessus de VARCHAR:
« VARCHAR » un texte cours de 0 à 65.535 caractères
« TEXT » pour du texte en grande quantité
« MEDIUMTEXT » un texte de 0 à 16.777.215 caractères
...
et pour le coup ne mets pas de "CHAR" ou "TINYTEXT"
(regarde ici : https://openclassrooms.com/fr/courses/1225826-choisir-les-bons-types-de-colonne-sql)
Pour ton numcni, sur ta page "ajout_membres.php" en fait tu ne le traite absolument pas.... Regarde tu ne l'ajoute pas dans ta base....
@+
Merci lugdanum pour l'intervention. La dernière préoccupation a été résolue, merci. Pour tes 2 premières réponses:
1)Sur ta page "faire_paiement.php" , ton <select name="id_membres"> va avoir une valeur :
echo 'Membre numero: '.$donnees soit MEMBRE NUMERO: XXXXXXXX
2)Ensuite sur ta page "trait_paiement.php" , tu le récupère de cette manière :
$id_membres=htmlentities(trim($_POST['id_membres']));
J'ai dejà fait tout ça dans le code, tu peux bien jeter un vrai bon coup d’œil pour voir ce qui ne va pas vraiment.
De plus, pour les types de données que tu me conseilles, j'ai tout essayé et tout est pareil, sauf si je colle les différents mots qui composent le texte de mon champs "objet" de la table "cotisation" sans espace.
1)Sur ta page "faire_paiement.php" , ton <select name="id_membres"> va avoir une valeur :
echo 'Membre numero: '.$donnees soit MEMBRE NUMERO: XXXXXXXX
2)Ensuite sur ta page "trait_paiement.php" , tu le récupère de cette manière :
$id_membres=htmlentities(trim($_POST['id_membres']));
J'ai dejà fait tout ça dans le code, tu peux bien jeter un vrai bon coup d’œil pour voir ce qui ne va pas vraiment.
De plus, pour les types de données que tu me conseilles, j'ai tout essayé et tout est pareil, sauf si je colle les différents mots qui composent le texte de mon champs "objet" de la table "cotisation" sans espace.
Bonjour
Tu peux très bien afficher "Membre numéro xxxx" sans que ceci perturbe la valeur de $_POST['id_menbres'], en utilisant l'attribut value de la balise OPTION
Sans attribut "value", le SELECT prend la valeur du texte complet de l'OPTION, sinon il prend la valeur donnée par value.
Au passage :
- le <br /> ne sert à rien sur une option.
- le name non plus, c'est celui du SELECT qui compte
- tu as mis la balise de fermeture </option> après l'accolade de fin du while, autrement dit tu as une seule </option> pour toutes tes <option>. déplace l'accolade de fin du while
Ensuite :
n'arrive pas à enregistrer la totalité des textes que j'insère
C'est parce que tu n'as pas mis de " " autour des value des champs "hidden" que tu récupères.
Regarde ce que tu as (mal) fait dans ta table cotisation :
et compare avec ce que tu as (bien) fait pour trai_ajout_membre :
Tu peux très bien afficher "Membre numéro xxxx" sans que ceci perturbe la valeur de $_POST['id_menbres'], en utilisant l'attribut value de la balise OPTION
Sans attribut "value", le SELECT prend la valeur du texte complet de l'OPTION, sinon il prend la valeur donnée par value.
<option value = '<?php echo $donnees['id_membres']; ?>'/> <?php echo 'Membre numero: '.$donnees['id_membres']; ?> </option>
Au passage :
- le <br /> ne sert à rien sur une option.
- le name non plus, c'est celui du SELECT qui compte
- tu as mis la balise de fermeture </option> après l'accolade de fin du while, autrement dit tu as une seule </option> pour toutes tes <option>. déplace l'accolade de fin du while
Ensuite :
n'arrive pas à enregistrer la totalité des textes que j'insère
C'est parce que tu n'as pas mis de " " autour des value des champs "hidden" que tu récupères.
Regarde ce que tu as (mal) fait dans ta table cotisation :
<input type="hidden" name="montant2" value='.$montant.' />
et compare avec ce que tu as (bien) fait pour trai_ajout_membre :
<input type="hidden" name="nom2" value="'.$nom.'">
Bonjour et merci bien à toi le père.
Pour la 1ère préoccupation concernant l'attribut "value" de <option>, j'avais eu la solution, mais tu viens de m'aider avec les " " autour des value des champs hidden. ça marche, merci.
Cependant peux-tu ma'aider à gérer les accents dans ma base de données? C'est à dire que lorsque j'enregistre un texte comportant des accents dans ma base de données, cela me donne une mauvaise lisibilité des données. Par exemple lorsque j'insère le texte "Mariage du père du Président, nommé Généviève" dans le champs "objet" de la table cotisation, cela me donne des erreurs d'encodages. Merci!
Pour la 1ère préoccupation concernant l'attribut "value" de <option>, j'avais eu la solution, mais tu viens de m'aider avec les " " autour des value des champs hidden. ça marche, merci.
Cependant peux-tu ma'aider à gérer les accents dans ma base de données? C'est à dire que lorsque j'enregistre un texte comportant des accents dans ma base de données, cela me donne une mauvaise lisibilité des données. Par exemple lorsque j'insère le texte "Mariage du père du Président, nommé Généviève" dans le champs "objet" de la table cotisation, cela me donne des erreurs d'encodages. Merci!
Bonjour,
rien à voir vraiment avec le souci actuel... mais j'en profite pour faire quelques rappels / recommandations.
- Les htmlentities, htmlspecialchar ... sont des fonctions qui ne doivent servir qu'à l'affichage et en aucun cas pour stocker les données dans la bdd.
- Voici comment faire correctement une connexion en PDO et écrire correctement ses requêtes (avec des blocs try/catch à CHAQUE REQUETE ... et non pas des DIE comme je peux le voir dans ce code ! )
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
- Et sans oublier quelques règles élémentaire de l'écriture d'un code propre et facilement maintenable :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
rien à voir vraiment avec le souci actuel... mais j'en profite pour faire quelques rappels / recommandations.
- Les htmlentities, htmlspecialchar ... sont des fonctions qui ne doivent servir qu'à l'affichage et en aucun cas pour stocker les données dans la bdd.
- Voici comment faire correctement une connexion en PDO et écrire correctement ses requêtes (avec des blocs try/catch à CHAQUE REQUETE ... et non pas des DIE comme je peux le voir dans ce code ! )
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
- Et sans oublier quelques règles élémentaire de l'écriture d'un code propre et facilement maintenable :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pour commencer, as-tu bien pris en compte les conseils de Jordane ?
En ce qui concerne les accents, puisque tu sembles travailler en utf8 d'après la description de ta base de données, il suffit de n'utiliser que de l'utf8 partout. En particulier :
- d'utiliser un éditeur de texte qui travaille en utf8 sans BOM. As-tu une idée de l'encodage que de ton éditeur de texte ?
- mettre une balise
- de préciser dans ta connexion à la base de données que tu travailles en utf-8 :
Au fait, pour déclarer un document html, c'est
En ce qui concerne les accents, puisque tu sembles travailler en utf8 d'après la description de ta base de données, il suffit de n'utiliser que de l'utf8 partout. En particulier :
- d'utiliser un éditeur de texte qui travaille en utf8 sans BOM. As-tu une idée de l'encodage que de ton éditeur de texte ?
- mettre une balise
<meta charset ="utf8"/>et non pas
<meta="utf8"/>dans le <head> de ta page
- de préciser dans ta connexion à la base de données que tu travailles en utf-8 :
$bdd = new PDO('mysql:host=localhost;dbname=assoc;charset=UTF8', 'root', '');
Au fait, pour déclarer un document html, c'est
<!DOCTYPE html>sans espace entre ! et DOCTYPE
Hello,
En complément de ta réponse :
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
.
En complément de ta réponse :
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
.
les valeurs que j’essaie d'insérer sont les identifiants des tables "Membres" et "Cotisation", car leurs clés primaires sont des clés étrangères ici dans la table "Paiement" à cause de la règle:
un Membre effectue 1,n paiements pour une Cotisation donnée,
Une Cotisation peut être l'objet d'1,n Paiement d'un même Membre.
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_Membres_Paiement` FOREIGN KEY (`id_membres`) REFERENCES `membres` (`id_membres`)) in C:\wamp\www\association\trait_paiement.php on line 53. Je remet le code en bas pour que tu visualise très bien, si possible teste chez toi pour voir si ça passe.