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 :

Script PHP - INSERT INTO [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Skunka
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 135
    Par défaut Script PHP - INSERT INTO
    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.

  2. #2
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Bonjour

    Une cause du probleme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = "INSERT INTO salarie (colonnes) VALUES (NULL,'".$this->_niveauSalarie."','".$this->_posteSalarie."','".$this->_nomSalarie."','".$this->_prenomSalarie."','".$this->_dateFIMO."','".$this->_dateFCO."','".$this->_dateValiditeCarteConducteur."','".$this->_dateValiditeQualificationConducteur."','".$this->_dateVisiteMedicale."','".$this->_AIPR."','".$this->_dateValiditeAIPR."')";
    mettre les colonnes désignées apres salarie

    Il y a un message d'erreur?

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Déjà, utilise plutôt une requête préparée, vu que tu insères des données extérieures.

    Quand tu dis "il manque un champ", je suppose que ça veut dire "quand un champ n'est pas rempli dans le formulaire". Le problème se pose avec n'importe quel champ ? Tu as un message d'erreur à nous montrer ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- que donne : echo $req; ?

    2- Pourquoi toute la gestion des $unSalarie->set...... n'est pas directement dans la fonction create (en passant le $_POST en paramètre) ?
    Je ne maitrise pas la POO, mais ça me semble étrange...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,


    1-
    ....J'ai renseigné les colonnes à remplir avec une syntaxe normalement correcte:...
    Non.
    Il faut imperativement une requête préparée

    2- "NULL" / 'NULL' est une chaîne de caractères. Ce n'est pas NULL.
    Remets $vide = "";.

    3- optimisation
    Remplace tous les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	if (isset($_POST['dateVisiteMedicale'])) {
    		$unSalarie->setDateVisiteMedicale($_POST['dateVisiteMedicale']);
    	} else {
    		$unSalarie->setDateVisiteMedicale($vide);
    	}
    Par des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$dateVisiteMedicale = ( isset($_POST['dateVisiteMedicale']) ) ? $_POST['dateVisiteMedicale'] : $vide; // (condition ternaire)
    	$unSalarie->setDateVisiteMedicale( $dateVisiteMedicale );
    4- Quant au message d'erreur, il indique la ligne 169.
    Quel est le code correspondant (cette ligne 169 et précédentes) ?
    Dernière modification par Invité ; 12/06/2018 à 14h40.

  6. #6
    Membre confirmé Avatar de Skunka
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 135
    Par défaut
    Citation Envoyé par bonjourajax Voir le message
    Bonjour

    Une cause du probleme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = "INSERT INTO salarie (colonnes) VALUES (NULL,'".$this->_niveauSalarie."','".$this->_posteSalarie."','".$this->_nomSalarie."','".$this->_prenomSalarie."','".$this->_dateFIMO."','".$this->_dateFCO."','".$this->_dateValiditeCarteConducteur."','".$this->_dateValiditeQualificationConducteur."','".$this->_dateVisiteMedicale."','".$this->_AIPR."','".$this->_dateValiditeAIPR."')";
    mettre les colonnes désignées apres salarie

    Il y a un message d'erreur?
    Il me semble inutile d'indiquer les colonnes puisque la requête les traite toutes dans l'ordre présent dans la BDD (c'est en tout cas ce que m'ont appris mes professeurs )
    C'est bien pour ça que je cherche de l'aide, je n'ai aucun message d'erreur qui s'affiche (il se peut que j'ai oublié de traiter cela dans le code...) et le script appelé me ramène bien sur ma page.
    Tu as vu juste Celira, je parlais bien d'un champ du formulaire non remplis.

    Si vous avez la solution me permettant d'afficher le message d'erreur, j'en serais ravis, cela m'aidera sûrement!
    Sinon, toutes autres propositions sont la bienvenue!

    Edit pour jreaux62 qui m'écris pendant que j'écrivais:
    où place tu ton echo $req? Dans la fonction create() j'imagine ?
    pour les "set" ton explication est légère mais je pense comprendre, j'essaye cela dès demain!

    Cordialement,
    Skunka.

    PS: ma journée se termine dans 5 minutes, je suis de retour demain matin ! :p

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Il n'est pas nécessaire d'écrire les colonnes dans une requête INSERT si on les alimente toutes, mais il est utile d'écrire les colonnes dans une requête INSERT. C'est comme le SELECT * : il vaut toujours mieux utiliser des requêtes explicites.Dans le cas d'une requête INSERT, ça permet d'être sûr de l'ordre dans lequel elles sont alimentées sans avoir à se référer à la base toutes les 3 minutes, ça évite (entre autres) d'avoir à repasser sur le code si tu ajoutes une colonne facultative à ta table et surtout ça évite les mauvaises surprises du genre "Hop ! On réinitialise la base et oh ! dans le nouveau script les colonnes sont par ordre alphabétique... Oups..."

    Si tu veux des messages d'erreur avec PDO, il faut penser à activer les exceptions au niveau de la connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $pdo = new PDO('...');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    @jreaux : Concernant la POO, le fait qu'il crée à partir de l'objet me parait valable : On construit un Salarie (comme on construit un tableau de données) et ensuite on le sauvegarde en base.
    En revanche, ce qui m'embête, c'est que la méthode create est apparemment dans la classe Salarie, alors que Salarie est visiblement un objet métier (la représentation d'un salarié). Pour moi, il faut 2 classes : Salarie qui représente le salarié, avec nom, prénom, etc...) et SalarieDao (ou SalarieManager ou quelque chose qui genre) qui s'occupe de la communication avec la base.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre confirmé Avatar de Skunka
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 135
    Par défaut
    J'ai renseigné les colonnes à remplir avec une syntaxe normalement correcte:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = "INSERT INTO salarie (numSalarie, numNiveau, numPoste, nomSalarie, prenomSalarie, dateFIMO, dateFCO, dateValiditeCarteConducteur, dateValiditeQualificationConducteur, dateVisiteMedicale, AIPR, dateValiditeAIPR) VALUES (NULL,'".$this->_niveauSalarie."','".$this->_posteSalarie."','".$this->_nomSalarie."','".$this->_prenomSalarie."','".$this->_dateFIMO."','".$this->_dateFCO."','".$this->_dateValiditeCarteConducteur."','".$this->_dateValiditeQualificationConducteur."','".$this->_dateVisiteMedicale."','".$this->_AIPR."','".$this->_dateValiditeAIPR."')";

    Egalement modifié un peu le code au niveau de la connexion pour activer les exceptions:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    try{
    	$pdo = new PDO('mysql:host=localhost;dbname=ttpm;charset=utf8', 'root', '');
    	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } 
    catch(Exception $e){
    	die('Erreur :'.$e->getMessage());
    }
    ?>

    J'avais déjà un catch(Exception), j'ai ensuite ré effectué plusieurs essaies d'insertion et le résultat reste le même: l'insertion fonctionne quand tous les champs du formulaire sont renseignés mais ne fonctionne pas quand au moins un champ du formulaire n'est pas renseigné. J'ai même essayé de laisser un champ obligatoire en blanc mais je ne récupère toujours pas de message d'erreur ...
    Dans mon script salarie_create.php , j'en suis venu à modifier le contenu de ma variable $vide par $vide = "NULL" pour que, lors de l'insertion, mon SGBD reçoivent une valeur NULL plutôt que vide mais cela n'a pas aidé :/

    Ensuite j'ai entrepris cette modification du script salarie_create.php :

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    <?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);
    	//Enregistrement dans la BDD
    	$unSalarie->create();
     
    	//On récupère le numéro du salarié créer pour le mettre à jour
    	$req = "SELECT numSalarie FROM salarie WHERE nomSalarie = ".$nom." AND prenomSalarie = ".$prenom;
    	try{
    		$stmt = $pdo->prepare($req);
    		$stmt->execute();
    	}
    	catch(Exception $e){
    		print "Erreur ! ".$e->getMessage(). "<br/>";
    	}	
     
    	//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 indiquer un champ non renseigné
    	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);
    	}
     
    	$unSalarie->update($stmt);
    }
     
    //retour à la page salarie
    header("Location: ../page_salarie.php");
     
    ?>

    Je créer plus tôt le salarié puis je fait appelle à sa méthode Update pour mettre à jour le salarié fraîchement crée pour obtenir ce message d'erreur:

    Nom : Capture.JPG
Affichages : 2333
Taille : 102,8 Ko

    Je constate que le problème initial est donc la syntaxe de la requête INSERT. Ferais-je mieux de partir sur deux méthodes "create()"? Car, dans mon contexte, il existe deux types de salariés: les chauffeurs qui possède les propriétés de date et les autres. Avoir un createChauffeur() qui prend en compte une syntaxe approprié pour les dates et un create() qui renseigne uniquement les propriétés non daté, valables pour tous les salariés ?

    Pour moi, il faut 2 classes : Salarie qui représente le salarié, avec nom, prénom, etc...) et SalarieDao (ou SalarieManager ou quelque chose qui genre) qui s'occupe de la communication avec la base.
    Je ne vois pas très bien l'utilité de cette seconde classe ? SalarieDao serait la classe qui permet l’interaction avec la BDD de la classe salarie ?

  9. #9
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Dans votre dernier code, il n'y a qu'une requête SELECT alors que l'erreur intervient sur une requête INSERT.

    Donnez-nous le code de $unSalarie->create(); SVP.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Nom : Capture.JPG
Affichages : 2333
Taille : 102,8 Ko

    En 6ième position il attend une date, hors vous lui passez un champ vide !
    Le message dit : Invalid Datetime format

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

Discussions similaires

  1. [MySQL] Script PHP - INSERT INTO #2
    Par Skunka dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/06/2018, 08h46
  2. [MySQL] PHP insert into ($variable1)value($variable2)
    Par biobabar dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/12/2008, 17h20
  3. Insertion multiples via script php
    Par furtif1 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 09/04/2007, 17h03
  4. [MySQL] Php et INSERT INTO, avec variables
    Par Djwaves dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 20/02/2006, 13h53
  5. insert à partir d'un script php
    Par illegalsene dans le forum Oracle
    Réponses: 2
    Dernier message: 05/10/2005, 17h01

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