IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Insertion de données dans une table intermédiaire


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 112
    Points : 49
    Points
    49
    Par défaut Insertion de données dans une table intermédiaire
    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:

    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 */;
    Ensuite voici mes pages:

    0) Page de connexion à ma BD
    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());
    				}
    ?>
    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
    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>
    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
    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>';
    			}							
        ?>
    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
     
    <! 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"
    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>';
    	}
    ?>
    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
    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>
    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
     
    <?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.

    Merci pour votre aide!

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <option name="id_membres"/>
    											<?php
    												echo 'Membre numero: '.$donnees
     
    ['id_membres'].'</br>';
    											}
    										?> 
    									</option>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value="<?php echo $donnees['id_membres'];?> "><?php echo $donnees['nom'].' '.$donnees['prenom'] ; ?></option>
    Pareil pour cotisation.

    A+.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 112
    Points : 49
    Points
    49
    Par défaut
    andry.aimé, merci pour l'intervention mais ce n'est pas une question d'affichage de tous les champs de saisie. La question est de savoir comment gérer les clés étrangères (id_membres et id_cotisation) et leurs contraintes d'intégrités pour pouvoir les enregistrer dans la table "Paiement". Il faut bien relire le sujet stp. Je traîne dessus depuis un bon moment.

    Cependant lorsque je fais tes modifications demandées, voici le message d'erreur qui s'affiche encore:
    Parse error: syntax error, unexpected end of file in C:\wamp\www\association\faire_paiement.php on line 63

    Voici le code de la page en question:

    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');?>
    <! 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 value="<?php echo $donnees['id_membres'];?> "><?php echo $donnees['nom'].' '.$donnees['prenom']; 
    											}
    											?>
    												</option>
    								</select> &nbsp;&nbsp;&nbsp;
     
    								<select name="id_cotisation">
    										<?php 
    										    $req = $bdd->query('SELECT * FROM membres');
    											//$req = execute();
    											while($donnees=$req->fetch())
    											{
    											?>
    											<option value="<?php echo $donnees['id_cotisation'];}?>"></option> 
    								</select> &nbsp;&nbsp;&nbsp;
     
    								<select name="montant">
    									    <?php 
    										    $req = $bdd->query('SELECT * FROM cotisation');
    											while($donnees=$req->fetch())
    											{
    											?>
    											<option value="<?php echo $donnees['montant'];?>}"> </option> 
    								</select> &nbsp;&nbsp;&nbsp;
     
    								<select name="type_paiement">
    									<option> une partie</option>
    									<option> Totalité </option>	
    								</select> &nbsp;&nbsp;&nbsp;
    								<label>Paie:</label>
    								<input type="text" name="paie" /> &nbsp;&nbsp;&nbsp;
    								<label>Reste:</label>
    								<input type="text" name="reste" /> &nbsp;&nbsp;&nbsp;
    								<input type="submit" name="enregistrer" value="Enregistrer"/>
    							</form>
    						</legend>
    					</div>
    				</center>
    			</div>
    		</body>
    </html>
    Je pense que ce message d'erreur est dû à la position des accolades dans la boucle while...

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par Busima Voir le message
    andry.aimé, merci pour l'intervention mais ce n'est pas une question d'affichage de tous les champs de saisie. La question est de savoir comment gérer les clés étrangères (id_membres et id_cotisation) et leurs contraintes d'intégrités pour pouvoir les enregistrer dans la table "Paiement". Il faut bien relire le sujet stp. Je traîne dessus depuis un bon moment.
    Ton code HTML généré par le PHP était mal structuré. Il ne faut pas mettre des balises br dans les options, quand les options n'ont pas d'attribut value, c'est le text qui est envoyé or que ce ne sont pas les id qui étaient là.

    Citation Envoyé par Busima Voir le message
    Je pense que ce message d'erreur est dû à la position des accolades dans la boucle while...
    Oui, mais pourquoi ne l'as tu pas essayé de les corriger?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    											while($donnees=$req->fetch())
    											{	
    											?>
    											    <option value="<?php echo $donnees['id_membres'];?> "><?php echo $donnees['nom'].' '.$donnees['prenom']; 
     
    											?>
    											</option>
    <?php }?>
    Vérifie aussi la requête pour le select id_cotisation.

    A+.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 112
    Points : 49
    Points
    49
    Par défaut
    Merci bien andry.aime, je te tire mon chapeau. ça marche... Je me suis promené sur 3 forums différents et tu es le seul qui ait pu me donner la solution, chapeau et merci.
    Cependant je songeais à enregistrer aussi le montant de la cotisation dans la table "Paiement", tant bien même que ce champs est déjà enregistré dans la table "Cotisation". Je souhaite juste faire une répétition d'enregistrement dans les 2 tables, de telle sorte qu'au cours du paiement d'un membre, on voit directement le montant qu'il doit normalement payé, même s'il paye la moitié.

    Ci-dessous le code "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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    <?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 value="<?php echo $donnees['id_membres'];?> "><?php echo $donnees['nom'].' '.$donnees['prenom']; ?>
    													</option>
    											<?php }?>
    								</select> &nbsp;&nbsp;&nbsp;
     
    								<select name="id_cotisation">
     
    									    <?php 
    										    $req = $bdd->query('SELECT * FROM cotisation');
    											//$req = execute();
    											while($donnees=$req->fetch())
    												{	
    													?>
    														<option value="<?php echo $donnees['id_cotisation'];?> "><?php echo $donnees['objet']; 
    													?>
    														</option>
    											<?php }?> 
    								</select> &nbsp;&nbsp;&nbsp;
     
    								<select>
     
    									    <?php 
    										    $req = $bdd->query('SELECT * FROM cotisation');
    											while($donnees=$req->fetch())
    												{	
    													?>
    														<option value="<?php echo $donnees['id_cotisation'];?> "><?php echo $donnees['montant']; 
    													?>
    														</option>
    											<?php }?> 
    								</select> &nbsp;&nbsp;&nbsp;
     
    								<select name="type_paiement">
    									<option> une partie</option>
    									<option> Totalite </option>	
    								</select> &nbsp;&nbsp;&nbsp;
    								<label>Paie:</label>
    								<input type="text" name="paie" /> &nbsp;&nbsp;&nbsp;
    								<label>Reste:</label>
    								<input type="text" name="reste" /> &nbsp;&nbsp;&nbsp;
    								<input type="submit" name="enregistrer" value="Enregistrer"/>
    							</form>
    						</legend>
    					</div>
    				</center>
    			</div>
    		</body>
    </html>
    Mais lorsque j'éssaie de faire l'enregistrement, on me dit: Undefined index: montant in C:\wamp\www\association\trait_paiement.php on line 7

    Et voici le code de la page de traitement c-dessous que j'appelle "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']));
     
    			echo " <h2> VERIFICATION AVANT ENREGISTREMENT </h2></br>";
    			echo ''.$id_membres.'</br> '.$id_cotisation.'</br>Donne: '.$type_paiement.'</br>Paie: '.$paie.'</br> Reste: '.$reste.'</br>
    			</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.'">							
    			   <input type="submit" name="annuler" value="Annuler"> &nbsp; &nbsp
    			   <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, :montant, :type_paiement2, :paie2, :reste2, NOW())');
    				$param = array(
    				':id_membres2'=>$id_membres2, 
    				':id_cotisation2'=>$id_cotisation2, 
    				':montant2'=>$montant2, 
    				':type_paiement2'=>$type_paiement2, 
    				':paie2'=>$paie2,	
    				':reste2'=>$reste2);
    				//':date_paiement2' => NOW());
    				//':date_paiement2' =>  date('y-m-d' );
    				//print_r($param);
                    $req->execute($param) or die (print_r($req->errorInfo()) );
     
    				   $req->closeCursor();
    					echo ' <h4>Paiement enregistré!</h4></br><a href="faire_paiement.php">Faire un paiement!</a>';
    			}							
        ?>

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par Busima Voir le message
    Mais lorsque j'éssaie de faire l'enregistrement, on me dit: Undefined index: montant in C:\wamp\www\association\trait_paiement.php on line 7
    Cela veut dire qu'il n'y a pas de champ (input, select, ...) avec l'attribut name="montant" dans ton formulaire.

    A+.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 112
    Points : 49
    Points
    49
    Par défaut
    andry.aime, encore merci pour ton aide. Cela me va trop droit au cœur. ça marche nickel. Si je te laisse partir comme ça c'est comme si je me fesais du mal, donc mieux vaut que j'en profite pour ne pas venir traîner encore sur la même application qui pourra me servir de source pour éviter plusieurs autres questions prochainement.
    Au fait, j'ai des champs de sélection dans ma table "Paiement" comme tu le vois avec des <select>...

    Titre1
    <select>
    <option>Id_cotisation</option>
    </select>

    Titre2
    <select>
    <option>Objet</option>
    </select>

    Titre3
    <select>
    <option>montant</option>
    </select>

    Je veux que lorsque je selectionne la 1ère option du select, tous les autres options des autres select reçoivent automatiquement tous ce qui est en relation avec le 1er select qui peut être par exemple le ID de ma table.
    Par exemple, lorsque je selectionne "5" comme "id_cotisation", le champs "objet_cotisation" dont le id=5 doit se placer automatiquement dans le suivant "option" et le champs "montant_cotisation" dont le id=5 doit aussi se placer automatiquement dans la 3ème option pour ne pas que j'ai à les chercher manuellement.

    Je replace le code ci-dessous:

    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
     
    <?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_paiement1.php">
    								<select name="id_membres">
    								    <option>Membres</option>
    										<option></option>
    										<?php 
    										    $req = $bdd->query('SELECT * FROM membres');
    											//$req = execute();
    											while($donnees=$req->fetch())
    											{	
    												?>
    													<option value="<?php echo $donnees['id_membres'];?> "><?php echo $donnees['nom'].' '.$donnees['prenom']; ?>
    													</option>
    											<?php }?>
    								</select> &nbsp;&nbsp;
     
    								<select name="id_cotisation">
    								    <option>ID - Objet cotisation</option>
    										<option></option>
    									    <?php 
    										    $req = $bdd->query('SELECT * FROM cotisation');
    											//$req = execute();
    											while($donnees=$req->fetch())
    												{	
    													?>
    														<option value="<?php echo $donnees['id_cotisation'];?> "><?php echo $donnees['id_cotisation']." - ". $donnees['objet']; 
    													?>
    														</option>
    											<?php }?> 
    								</select> &nbsp;&nbsp;
     
    								<select name="montant">
    								        <option>Montant</option>
    										<option></option>
    									    <?php 
    										    $req = $bdd->query('SELECT * FROM cotisation');
    											while($donnees=$req->fetch())
    												{	
    													?>
    														<option value="<?php echo $donnees['montant'];?> "> <?php echo $donnees['id_cotisation']." - ".$donnees['montant']; 
    													?>
    														</option>
    											<?php }?> 
    								</select> &nbsp;&nbsp;
     
    								<select name="type_paiement">
    								    <option>Type de paiement</option>
    									<option></option>
    									<option> une partie</option>
    									<option> Totalite </option>	
    								</select> &nbsp;&nbsp;
    								<label>Paie:</label>
    								<input type="text" name="paie" /> &nbsp;&nbsp;&nbsp;
    								<label>Reste:</label>
    								<input type="text" name="reste" /> &nbsp;&nbsp;&nbsp;
    								<input type="submit" name="enregistrer" value="Enregistrer"/>
    							</form>
    						</legend>
    					</div>
    				</center>
    			</div>
    		</body>
    </html>

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Il y a un tutoriel pour ça: https://siddh.developpez.com/articles/ajax/ . L'article est assez vieux et utilise encore des fonctions mysql, tu dois l'adapter pour utiliser PDO. Fais aussi une recherche sur le forum jQuery avec "Listes liées", tu trouveras pas mal de discussions résolues pour le côté javascript.

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 112
    Points : 49
    Points
    49
    Par défaut
    Merci infiniment andry.aimé, soit béni par le Tout Puissant! Encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Oracle] problème d'insertion de données dans une table sous oracle
    Par Zombiman dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/05/2009, 14h58
  2. [MySQL] Insertion de donnée dans une table
    Par cheik_koita dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/04/2009, 00h16
  3. [MySQL] PHP-MySQL: Insertion de donnée dans une table vide
    Par jrosenzw dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 07/03/2009, 02h11
  4. insertion de donnée dans une table (2 bd)
    Par robert_trudel dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/01/2007, 17h41
  5. Réponses: 5
    Dernier message: 26/01/2007, 08h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo