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

  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
    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

  6. #6
    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]

  7. #7
    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 : 2322
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 ?

  8. #8
    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 !

  9. #9
    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
    Le code était présent dans le premier message mais le revoici en clair:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	public function create(){
    		include "../include/connexion.php";
    		try{
    			$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."')";
    			echo($req);
    			$pdo->exec($req);
    		}
    		catch(Exception $e){
    			print "Erreur ! ".$e->getMessage(). "<br/>";
    		}
    	}

  10. #10
    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
    OK alors, d'après les messages d'erreur reçus, le souci vient de la tentative d'insertion d'une date invalide.

    C'est à cause du fait que les paramètres donnés à la requête ne sont pas préalablement contrôlés et probablement parce que les colonnes de date n'ont pas de valeur pas défaut.

    Pouvez-vous nous donner le script SQL de création de la table, à l'aide de la requête ci-dessous ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE salarie
    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 !

  11. #11
    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.

  12. #12
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 505
    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 505
    Par défaut
    Nom : Capture.JPG
Affichages : 2322
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

  13. #13
    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
    Traitons un problème à la fois. On va d'abord s’occuper de ton insertion et on verra le select et l'update ensuite.
    Pour l'insertion, je vois l'erreur "Incorrect date Value '' for column dateFIMO". En gros, tu essayes d'envoyer "" dans un champ de type DATE, ce qui n'est pas correct.
    A ta place, je remplacerai par une requête préparée, comme ça c'est PDO qui s'occupera des formats.
    Code : 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 (numSalarie, numNiveau, numPoste, nomSalarie, prenomSalarie, dateFIMO, dateFCO, dateValiditeCarteConducteur, dateValiditeQualificationConducteur, dateVisiteMedicale, AIPR, dateValiditeAIPR) VALUES (NULL,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
            $stmt = $pdo->prepare($req);
            $stmt->execute([$this->_niveauSalarie, $this->_posteSalarie, $this->_nomSalarie, $this->_prenomSalarie, $this->_dateFIMO, $this->_dateFCO, $this->_dateValiditeCarteConducteur, $this->_dateValiditeQualificationConducteur, $this->_dateVisiteMedicale, $this->_AIPR, $this->_dateValiditeAIPR]);
        }
        catch(Exception $e){
            print "Erreur ! ".$e->getMessage(). "<br/>";
        }
    }
    Et pense bien à initialiser les champs qui ne sont pas des VARCHAR avec null (ou tous les champs pour être tranquille )
    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]

  14. #14
    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
    Bien, j'ai pris le temps de lire vos réponses et de les mettre en pratique, voici ce que j'ai fait:

    Modification de 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
     
    <?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 indiquer un champ non renseigné
    	$dateVisiteMedicale = ( isset($_POST['$dateVisiteMedicale']) ) ? $_POST['dateVisiteMedicale'] : $vide; // (condition ternaire)
    	$unSalarie->setDateVisiteMedicale( $dateVisiteMedicale );
     
    	$fimo = ( isset($_POST['fimo']) ) ? $_POST['fimo'] : $vide;
    	$unSalarie->setDateFIMO($fimo);
     
    	$fco = ( isset($_POST['fco']) ) ? $_POST['fco'] : $vide;
    	$unSalarie->setDateFCO($fco);
     
    	$carte = ( isset($_POST['carte']) ) ? $_POST['carte'] : $vide;
    	$unSalarie->setDateValiditeCarteConducteur($carte);
     
    	$qualification = ( isset($_POST['qualification']) ) ? $_POST['qualification'] : $vide;
    	$unSalarie->setDateQualificationConducteur($qualification);
     
    	$aipr = ( isset($_POST['aipr']) ) ? $_POST['aipr'] : $vide;
    	$unSalarie->setAIPR($aipr);
     
    	$dateAIPR = ( isset($_POST['dateAIPR']) ) ? $_POST['dateAIPR'] : $vide;	
    	$unSalarie->setDateValiditeAIPR($dateAIPR);
     
    	//Enregistrement dans la BDD
    	$unSalarie->create();
    }
     
    //retour à la page salarie
    header("Location: ../page_salarie.php");
     
    ?>

    J'ai mis en place l'optimisation de jreaux62, qui est effectivement une belle optimisation, ainsi que le retour de $vide= "" . J'ai également retirer le "SELECT" pour repasser à l'ancien format: manipuler l'objet $unSalarie de manière à l'insérer dans la BDD sans avoir à l'update par la suite.

    Alors que j'allais écrire ma requête préparé, j'ai vu le message de Celira et j'ai donc directement copié son code (Tout en le comprenant)

    Pour CinePhil:

    Code SQL : 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
     
    CREATE TABLE `salarie` (
     `numSalarie` int(11) NOT NULL AUTO_INCREMENT,
     `numNiveau` int(11) NOT NULL,
     `numPoste` int(11) NOT NULL,
     `nomSalarie` char(32) NOT NULL,
     `prenomSalarie` varchar(128) NOT NULL,
     `dateFIMO` date DEFAULT NULL,
     `dateFCO` date DEFAULT NULL,
     `dateValiditeCarteConducteur` date DEFAULT NULL,
     `dateValiditeQualificationConducteur` date DEFAULT NULL,
     `dateVisiteMedicale` date DEFAULT NULL,
     `AIPR` varchar(32) DEFAULT NULL,
     `dateValiditeAIPR` date DEFAULT NULL,
     PRIMARY KEY (`numSalarie`),
     KEY `FK_salarie_niveauSalarie` (`numNiveau`),
     KEY `FK_salarie_posteSalarie` (`numPoste`)
    ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
    Tout ce bazar proviendrait-il de mon DEFAULT CHARSET=latin1 ?

    Résulat, je n'ai plus d'insertion possible (même lorsque tous les champs sont indiqués) et aucun message d'erreur visible.

  15. #15
    Invité
    Invité(e)
    Par défaut
    1-
    "Incorrect date Value '' for column dateFIMO"
    le format SQL pour DATE est : YYYY-MM-DD

    Du coup, essaie de remplacer (pour toutes les dates) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	$videDate = "0000-00-00"; // format DATE
     
    	$fimo = ( isset($_POST['fimo']) ) ? $_POST['fimo'] : $videDate;
    	$unSalarie->setDateFIMO($fimo);
    N.B. Perso, je n'utilise pas NULL (toutes mes colonnes sont en NOT NULL), car je trouve ça ch.... pénible à utiliser dans une requête préparée.

    2- Remets echo $req pour voir ce que ça donne.
    Affiche aussi toutes les variables.
    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
    public function create(){
        include "../include/connexion.php";
        try{
            $req = "INSERT INTO salarie (numSalarie, numNiveau, numPoste, nomSalarie, prenomSalarie, dateFIMO, dateFCO, dateValiditeCarteConducteur, dateValiditeQualificationConducteur, dateVisiteMedicale, AIPR, dateValiditeAIPR) VALUES (NULL,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
            $stmt = $pdo->prepare($req);
            $params = [$this->_niveauSalarie, $this->_posteSalarie, $this->_nomSalarie, $this->_prenomSalarie, $this->_dateFIMO, $this->_dateFCO, $this->_dateValiditeCarteConducteur, $this->_dateValiditeQualificationConducteur, $this->_dateVisiteMedicale, $this->_AIPR, $this->_dateValiditeAIPR];
     
    echo $req;
    var_dump($params);
     
            $stmt->execute( $params );
        }
        catch(Exception $e){
            print "Erreur ! ".$e->getMessage(). "<br/>";
        }
    }
    3- Concernant le CHARSET, rien à voir ici (à priori).
    Par contre, le charset standard pour l'ensemble du site/bdd devrait plutôt être UTF-8.


  16. #16
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 505
    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 505
    Par défaut
    Si je peux me permettre pour la date, il crée la table en mettant par default : null

    Donc il serait plus correcte de noter ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $videDate = null; // format DATE 
    	$fimo = ( isset($_POST['fimo']) ) ? $_POST['fimo'] : $videDate;
    	$unSalarie->setDateFIMO($fimo);

    Maintenant, si on veut mettre une date, le plus simple est de mettre une vraie date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $videDate = new DateTime(); // format DATE 
    	$fimo = ( isset($_POST['fimo']) ) ? $_POST['fimo'] : $videDate->format('Y-m-d');
    	$unSalarie->setDateFIMO($fimo);

  17. #17
    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 jreaux62 Voir le message
    3- Concernant le CHARSET, rien à voir ici (à priori).
    Par contre, le charset standard pour l'ensemble du site/bdd devrait plutôt être UTF-8.
    Oui, seul ma BDD était en latin 1, j'ai modifié le script SQL de manière à la passer en utf-8.

    Après avoir rajouté cette variable $videDate = "0000-00-00", de nouveau je n'ai plus d'insertion (même si tous les champs sont renseignés) mais le traitement s'effectue sans l'insertion et sans m'afficher de message d'erreur. J'ai donc glissé une erreur afin d'accéder à ces messages que voici:

    Nom : Capture.JPG
Affichages : 1558
Taille : 59,2 Ko

    On constate que seul la dateVisiteMedicale est correctement attribué ("0000-00-00") car j'ai en effet mal recopié ton code, j'ai ommis le "$" dans la condition...

    Après correction, je reste sur même résultat: le traitement s'effectue mais toujours aucune insertion (formulaire entièrement remplis ou non), voici l'echo et var_dump:

    Nom : Capture.JPG
Affichages : 1509
Taille : 65,2 Ko

    Ce que je constate:
    -J'en renseigné la dernière date (array 10) mais elle a pourtant al valeur de $videDate
    -Après un second test en spécifiant chaque date, le résultat reste le même pour les array() correspondant
    -array(9) est vide alors que la "value" que j'ai mise dans la balise <option> est "Aucune"

    Par acquis de conscience je met le code de la page salarie_create.php au cas où une erreur m'aurait échappé:

    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
     
    <?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é
    	$dateVide = "0000-00-00"; //Variable pour indiquer un champ non renseigné de type date
    	$vide = ""; //Variable pour indiquer un champ non renseigné
    	$dateVisiteMedicale = ( isset($_POST['$dateVisiteMedicale']) ) ? $_POST['dateVisiteMedicale'] : $dateVide; // (condition ternaire)
    	$unSalarie->setDateVisiteMedicale( $dateVisiteMedicale );
     
    	$fimo = ( isset($_POST['$fimo']) ) ? $_POST['fimo'] : $dateVide;
    	$unSalarie->setDateFIMO($fimo);
     
    	$fco = ( isset($_POST['$fco']) ) ? $_POST['fco'] : $dateVide;
    	$unSalarie->setDateFCO($fco);
     
    	$carte = ( isset($_POST['$carte']) ) ? $_POST['carte'] : $dateVide;
    	$unSalarie->setDateValiditeCarteConducteur($carte);
     
    	$qualification = ( isset($_POST['$qualification']) ) ? $_POST['qualification'] : $dateVide;
    	$unSalarie->setDateQualificationConducteur($qualification);
     
    	$aipr = ( isset($_POST['$aipr']) ) ? $_POST['aipr'] : $vide;
    	$unSalarie->setAIPR($aipr);
     
    	$dateAIPR = ( isset($_POST['$dateAIPR']) ) ? $_POST['dateAIPR'] : $dateVide;	
    	$unSalarie->setDateValiditeAIPR($dateAIPR);
     
    	//Enregistrement dans la BDD
    	$unSalarie->create();
    }
     
    //retour à la page salarie
    header("Location: ../page_salarie.php");
     
    ?>

    Et merci de toutes vos réponses!

  18. #18
    Invité
    Invité(e)
    Par défaut
    Il n'y a pas de $ ici ! (mea culpa : c'est moi qui avais fait l'erreur...)

    À modifier pour tous.

  19. #19
    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 jreaux62 Voir le message
    Il n'y a pas de $ ici ! (mea culpa : c'est moi qui avais fait l'erreur...)
    Cela me semblait bizarre tout de même! Enfin bref, après modification, je peux de nouveau faire une insertion SI, ET SEULEMENT SI, je renseigne tous les champs du formulaire. Je vaos donc reglisser mon erreur afin de voir la différence quand je renseigne chaque champ à quand certains champs sont restés vierges.

    Tous les champs renseignés:

    Nom : Capture.JPG
Affichages : 1513
Taille : 64,0 Ko

    Plusieurs champs vierges:

    Nom : Capture.JPG
Affichages : 1494
Taille : 60,7 Ko

    Bon, là ça devient du n'importe quoi non? Les attributs de mon salariés ne sont pas mis à "0000-00-00" alors que j'ai justement retiré les $ qui est normalement une erreur ?
    Je me demande ce qu'il se passerait si je modifie les condition ( isset($_POST['champ'])) par ($_POST['champ'] == "") ? $dateVide : $_POST['champ'] ? C'est à dire contrôler le contenu et non si la variable est remplie.

    Nom : Capture.JPG
Affichages : 1599
Taille : 62,7 Ko

    On remarque que array(4) prend bien la valeur "0000-00-00", c'est donc la condition ternaire qui posait problème !
    J'applique mes modifications au reste:

    Nom : Capture.JPG
Affichages : 1497
Taille : 64,6 Ko

    Après un essaie, l'insertion sans renseigner tous les champs ne fonctionne toujours pas, la raison vient sûrement du fait que les dates sont en string (lenght 10)alors quand dans la BDD ce sont des attributs DATE (lenght 8).

    EDIT: je viens de lire un message de MaitrePylos me parlant de mes dates. Il a senti le problème arriver il faut croire! Cependant, les dates non renseignés seront passé en format date de part ce qu'il à montré mais pour les dates qui sont déjà renseignés ?

  20. #20
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 505
    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 505
    Par défaut
    Au risque de me répéter.
    La date 0000-00-00 est incorecte : https://dev.mysql.com/doc/refman/5.7...o_zero_in_date
    Il vaut mieux mettre null .

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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