Bonjour,

je fais face à un problème assez particulier aujourd'hui, je m'explique: sur une page permettant la gestion des salariés de mon entreprise, un bouton "Nouveau" ouvre une modale contenant un formulaire à remplir. Quand tous les champs sont remplis, l'insertion réussie. Mais quand il manque un seul champ, l'insertion ne réussie pas et qu'importe le champ non remplis. Je remplis evidemment les champs obligatoires.

Voici la table:

Code MySQL : 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
 
CREATE TABLE IF NOT EXISTS salarie
 (
   numSalarie INTEGER NOT NULL AUTO_INCREMENT ,
   numNiveau INTEGER NOT NULL  ,
   numPoste INTEGER NOT NULL  ,
   nomSalarie CHAR(32) NOT NULL  ,
   prenomSalarie VARCHAR(128) NOT NULL  ,
   dateFIMO DATE NULL  ,
   dateFCO DATE NULL  ,
   dateValiditeCarteConducteur DATE NULL  ,
   dateValiditeQualificationConducteur DATE NULL  ,
   dateVisiteMedicale DATE NULL  ,
   AIPR VARCHAR(32) NULL  ,
   dateValiditeAIPR DATE NULL  
   , PRIMARY KEY (numSalarie) 
 )

Le formulaire :

Code PHP : 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
 
<FORM method="POST" action="Scripts/salarie_create.php">
							Nom: <input type="text" name="nomSalarie"> <br>
							Prénom: <input type="te" name="prenomSalarie"> <br>
							* Format des dates: aaaa-mm-jj * <br>
							Prochaine visite médicale: <input type="text" name="dateVisiteMedicale"> <br>
 
							<!--Liste déroulante -->
							Niveau de droit:<select name="droit" style="width: 230px">
												<option value="0"> - - - - - - - - </option>
												<?php
												$req = "SELECT * FROM niveauSalarie ORDER BY numNiveau";
												try{
													$stmt = $pdo->prepare($req);
													$stmt->execute();
													while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
														echo "<option value='".$row["numNiveau"]."'>".$row["nomNiveau"]."</option>";
													}
												}
												catch(Exception $e){
													print "Erreur ! ".$e->getMessage(). "<br>";
												}
												?>
												</select> <br>
 
							<!-- Liste déroulante -->					
							Poste :	<select name="poste" style="width: 230px">
										<option value="0"> - - - - - - - - </option>
										<?php
										$req = "SELECT * FROM posteSalarie ORDER BY nomPoste";
										try{
											$stmt = $pdo->prepare($req);
											$stmt->execute();
											while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
												echo "<option value='".$row["numPoste"]."'>".$row["nomPoste"]."</option>";
											}
										}
										catch(Exception $e){
											print "Erreur !".$e->getMessage()."<br>";										}
										?>
									</select> <br> <br>
							< - - - Zone conducteur / chauffeur - - - > <br>
							Date précédente FCO: <input type="text" name="fimo"> <br>
							Date prochaine FCO: <input type="tex" name="fco"> <br>
							Date fin de validité de <br> la carte conducteur: <input type="text" name="carte"> <br>
							Date fin de validité de <br> la qualification conducteur: <input type="text" name="qualification"> <br>
							AIPR: 	<select name="aipr">
										<option value="0"> - - - - - - - - </option>
										<option value="Concepteur">Concepteur</option>
										<option value="Encadrant">Encadrant</option>
										<option value="Operateur">Opérateur</option>
									</select> <br>
							Date fin de validité AIPR: <input type="text" name="dateAIPR"> <br>
							<input type="submit" value="Confirmer">
						</FORM>

Le script PHP appelé:

Code PHP : 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 "../include/connexion.php";
//Si le nom du salarié est bien indiqué, ainsi que son prénom, son poste et son niveau de droit sur l'application
if (isset($_POST['nomSalarie']) && !empty($_POST['prenomSalarie']) && !empty($_POST['poste']) && !empty($_POST['droit'])) {
	$nom = $_POST['nomSalarie'];
	$prenom = $_POST['prenomSalarie'];
	$poste = $_POST['poste'];
	$niveau = $_POST['droit'];
	//On crée un nouveau salarié
	include "../Classe/salarie.php";
	$unSalarie = new Salarie ($nom, $prenom, $poste, $niveau);
 
	//On le met à jour en fonction des informations rentrées avant de l'enregistrer dans la BDD
	//SI *propriété* est mise, alors appelle de la fonction Setter avec param, SINON on vide l'attribut pour éviter que le nouveau salarié récupère la propriété d'un précédent salarié
	$vide = ""; //Variable pour vider
	if (isset($_POST['dateVisiteMedicale'])) {
		$unSalarie->setDateVisiteMedicale($_POST['dateVisiteMedicale']);
	} else {
		$unSalarie->setDateVisiteMedicale($vide);
	}
	if (isset($_POST['fimo'])) {
		$unSalarie->setDateFIMO($_POST['fimo']);
	} else {
		$unSalarie->setDateFIMO($vide);
	}
	if (isset($_POST['fco'])) {
		$unSalarie->setDateFCO($_POST['fco']);
	} else{
		$unSalarie->setDateFCO($vide);
	}
	if (isset($_POST['carte'])) {
		$unSalarie->setDateValiditeCarteConducteur($_POST['carte']);
	} else {
		$unSalarie->setDateValiditeCarteConducteur($vide);
	}
	if (isset($_POST['qualification'])) {
		$unSalarie->setDateQualificationConducteur($_POST['qualification']);
	} else {
		$unSalarie->setDateQualificationConducteur($vide);
	}
	if (isset($_POST['aipr'])) {
		$unSalarie->setAIPR($_POST['aipr']);
	} else {
		$unSalarie->setAIPR($vide);
	}
	if (isset($_POST['dateAIPR'])) {
		$unSalarie->setDateValiditeAIPR($_POST['dateAIPR']);
	} else {
		$unSalarie->setDateValiditeAIPR($vide);
	}
 
	//Enregistrement dans la BDD
	$unSalarie->create();
 
	//retour à la page salarie
	header("Location: ../page_salarie.php");
} 
?>

ainsi que ma fonction create():

Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
	public function create(){
		include "../include/connexion.php";
		try{
			$req = "INSERT INTO salarie VALUES (NULL,'".$this->_niveauSalarie."','".$this->_posteSalarie."','".$this->_nomSalarie."','".$this->_prenomSalarie."','".$this->_dateFIMO."','".$this->_dateFCO."','".$this->_dateValiditeCarteConducteur."','".$this->_dateValiditeQualificationConducteur."','".$this->_dateVisiteMedicale."','".$this->_AIPR."','".$this->_dateValiditeAIPR."')";
			$pdo->exec($req);
		}
		catch(Exception $e){
			print "Erreur ! ".$e->getMessage(). "<br/>";
		}
	}

Je n'arrive pas à définir ce qui cause l'empêchement de l'insertion dans ma bdd puisque celle ci fonctionne lorsque tous les champs sont remplis et non quand il en manque des non obligatoires...

Merci d'avance pour toutes aides apportées !
Cordialement,
Skunka.