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 :

Requête Update Date [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Points : 30
    Points
    30
    Par défaut Requête Update Date
    Salut

    J'ai un formulaire (php) avec différents champs dont notamment 5 champs date dont 2 sont obligatoires et donc les 3 autres seront remplis plus tard (par un update) :on peut remplir 1 ou 2 ou 3 de ces champs (en fonction des demandes de personnes)
    J'ai donc ma base de donnée mysql et les champs date sont de type date (YYYY-mm-jj) et par defaut à NULL
    Pour la gestion des dates ( les mettre en français : jj-mm-YYYY et en anglais : YYYY-mm-jj) j'utilise donc un new DateTime et un donnee->format('')
    Pour l'insertion et l'affichage pas de problème j'insère et affiche mes date dans le bon format (celles obligatoires évidemment mais aussi les optionnelles)
    Mon problème c'est le update : quand je fais une modification d'un enregistrement et que je ne mets rien dans l'un des champs date optionnel, celui-ci est enregistré dans la base dans la format '0000-00-00' et donc quand j'affiche cela me remonte des données bizarres genre '30-11--0001' (ce qui est normal puisque dans ma base après le update les champs date (optionnel) sont passés de NULL à '0000-00-00'
    J'ai tout essayer et j'ai cherché : JE NE SAIS PAS METTRE A NULL MA VARIABLE DATE AVANT DE FAIRE MON UPDATE (j'ai testé en 'dur' mettre null en lieu et place de ma variable date dans ma requête et là ca envoie bien null)

    En espérant avoir été clair et sans être trop long
    Si quelqu'un a un tuyau ou même la solution je suis preneur car j'ai la tête qui chauffe !!!!

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Montrez nous le code qui prépare et fait la requête UPDATE.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Points : 30
    Points
    30
    Par défaut Voici le code
    Bonjour

    Merci tout d'abord d'avoir répondu

    Voici donc le code

    Je récupère mes données par des posts (en format (jj-mm-yyyy)
    Mes echos renvoient bien les bonnes valeurs


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $adherentDateDemande1=$_POST['datedemande1'];
    echo " adherentDateDemande1= ".$ adherentDateDemande1."<br>";
     
    $adherentDateDemande2=$_POST['datedemande2'];
    echo " adherentDateDemande2= ".$ adherentDateDemande2."<br>";
     
    $adherentDateDemande3=$_POST['datedemande3'];
    echo " adherentDateDemande3= ".$ adherentDateDemande3."<br>";
    je mets mes date en format yyyy-mm-jj pour les inserer dans ma table
    La aussi quand je fais des echos les valeurs sont bonnes et au bon format (quand une valeur existe par exemple 2017-02-15) sinon j'ai par exemple ( datedemande1eng = ) quand je ne rentre rien !!!


    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
    if($adherentDateDemande1){
    		$datecertificatdemande1 = new DateTime($adherentDateDemande1);
    		$datedemande1eng=$datecertificatdemande1->format('Y-m-d');
    		echo " datedemande1eng = ".$ datedemande1eng."<br>";
    		}
     
    if($adherentDateDemande2){
    		$datecertificatdemande2 = new DateTime($adherentDateDemande2);
    		$datedemande2eng=$datecertificatdemande2->format('Y-m-d');
    		echo " datedemande2eng = ".$ datedemande2eng."<br>";
    		}
    if($adherentDateDemande3){
    		$datecertificatdemande3 = new DateTime($adherentDateDemande3);
    		$datedemande3eng=$datecertificatdemande3->format('Y-m-d');
    		echo " datedemande3eng = ".$ datedemande3eng."<br>";
    		}
    Et voici ma requete update :

    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
    $sql = "UPDATE gr_adherents_test SET 
    	adherentCivilite = '$adherentCivilite',
    	adherentNom = '$adherentNom',	
    	adherentPrenom = '$adherentPrenom',
    	adherentLicence = '$adherentLicence',
    	adherentDateNaissance ='$datenaisanceeng',
    	adherentAdresse = '$adherentAdresse',
    	adherentVille = '$adherentVille',
    	adherentCodePostal = '$adherentCodePostal',	
    	adherentTelephone = '$adherentTelephone',
    	adherentPortable = '$adherentPortable',
    	adherentEmail ='$adherentEmail',
    	adherentDateDemande1 = '$datedemande1eng',
    	adherentDateDemande2 = '$datedemande2eng',
    	adherentDateDemande3 = '$datedemande3eng',
    	adherentDateAdhesion = '$adherentDateAdhesion,
    	adherentNotes = '$adherentNotes',
    	adherentFlag = '$adherentFlag' 
    	WHERE adherentId = '$adherentId'";
    Pour moi je pense que celà vient du fait que quand il n'y a rien au lieu de mettre NULL je ne mets rien : alors dans la base il met d'office '0000-00-00' (enfin c'est une de mes suggestion) mais à force de faire des essais je perd un peu de lucidité

    Merci d'avance pour vos réponses

    Cordialement

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Vous ne devez pas mettre d'apostrophes quand vous passez une valeur NULL

    Donc la construction de la requête donne quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!isset($datedemande3eng)) {
        $sql .= "adherentDateDemande3 = NULL,";
    } else {
        $sql .= "adherentDateDemande3 = '$datedemande3eng',";
    }
    Pour les autres valeurs, nom, prénom, etc, est ce que vous protégez bien ces valeurs contre les injections SQL ?
    Pour éviter cela, il vaut mieux utiliser une requête préparée par exemple :
    http://php.net/pdo.prepare

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Points : 30
    Points
    30
    Par défaut construction requete
    Salut

    Merci de ta réponse
    Quand tu dis "Donc la construction de la requête donne quelque chose comme cela : " tu le met ou ton if(......) ?? Dans la requête proprement dite ou avant ??? Ou bien il faut que je construise ma requête autrement pour pouvoir utiliser les .sql ???

    Ma requête est ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE matable SET 
    champ1 = '$nom' 
    .......
    .......
    WHERE adherentId = '$adherentId';
    Cordialement

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

    1- en PHP, avant la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $adherentDateDemande1 = ( !empty($_POST['datedemande1']) )? "'".$_POST['datedemande1']."'" : "NULL";
    $adherentDateDemande2 = ( !empty($_POST['datedemande2']) )? "'".$_POST['datedemande2']."'" : "NULL";
    $adherentDateDemande3 = ( !empty($_POST['datedemande3']) )? "'".$_POST['datedemande3']."'" : "NULL";
    On remarque que j'ai ajouté les ' directement dans les variables.
    Il faut donc les enlever de la requête (car il ne faut pas mettre de ' autour de NULL)

    2- OU dans la requête :
    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
    $sql = "UPDATE gr_adherents_test SET 
    	adherentCivilite = '$adherentCivilite',
    	adherentNom = '$adherentNom',	
    	adherentPrenom = '$adherentPrenom',
    	adherentLicence = '$adherentLicence',
    	adherentDateNaissance ='$datenaisanceeng',
    	adherentAdresse = '$adherentAdresse',
    	adherentVille = '$adherentVille',
    	adherentCodePostal = '$adherentCodePostal',	
    	adherentTelephone = '$adherentTelephone',
    	adherentPortable = '$adherentPortable',
    	adherentEmail ='$adherentEmail',
    ";
    $sql .= "adherentDateDemande1 = ".(( !empty($_POST['datedemande1']) )? "'".$_POST['datedemande1']."'" : "NULL").",";
    $sql .= "adherentDateDemande2 = ".(( !empty($_POST['datedemande2']) )? "'".$_POST['datedemande2']."'" : "NULL").",";
    $sql .= "adherentDateDemande3 = ".(( !empty($_POST['datedemande3']) )? "'".$_POST['datedemande3']."'" : "NULL").",";
     
    $sql .= "adherentDateAdhesion = '$adherentDateAdhesion,
    	adherentNotes = '$adherentNotes',
    	adherentFlag = '$adherentFlag' 
    	WHERE adherentId = '$adherentId'";

    Enfin bon. Je ne me suis JAMAIS embêté avec ça.
    Une chaine vide '' convient aussi.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Points : 30
    Points
    30
    Par défaut Ca avance
    Salut

    Bon je vais tester vos méthodes ce week-end : là je vais me détendre car j'ai la tête comme une cougourde !!!!
    Je reviens vous donner la suite (positive ou négative) début semaine prochaine !!!

    Encore merci pour toutes vos solutions et vive le partage

    Bon week-end

    Cordialement

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Points : 30
    Points
    30
    Par défaut Ca marche !!!!!
    Salut

    Bon cà y est celà fonctionne !!!!!

    J'ai donc pris la suggestion de mathieu :

    que j'ai mis dans ma requête comme indiqué par jreaux62

    Merci à vous 2 pour les suggestions
    Bon maintenant je vais m'attaquer à la récupération dune requête dans excel (je vais encore transpirer !!!)

    Message à mathieu : que veux-tu dire par "est ce que vous protégez bien ces valeurs contre les injections SQL"
    Précision : je n'utilise pas la methode PDO !!!

  9. #9
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Regardez là pour un exemple de problème de sécurité qui peut se poser :
    https://securite.developpez.com/faq/...-SQL-Injection

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

Discussions similaires

  1. Requête update à partir d'une autre table
    Par amiral thrawn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/02/2024, 11h40
  2. Requête Update avec la dernière date de variation de prix.
    Par Math38LandsCold dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 21/06/2012, 14h46
  3. Requête Update et formatage de date
    Par RobiPMS dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/06/2011, 16h00
  4. [MySQL] Mysql Requête UPDATE en fonction d'une date
    Par xunil2003 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 27/03/2010, 02h20
  5. Problème requète UPDATE + date
    Par gluc86 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/04/2008, 09h20

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