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

Langage PHP Discussion :

modification input type date


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut modification input type date
    Bonjour,

    j'ai un formulaire qui permet de modifier des données dans la table. Il fonctionne pour toutes les autres valeurs qui sont en input type text et pas pour celles qui ont un input type date. Est-ce qu'il faut quelque chose de particulier pour pouvoir les modifier ?

    Voici le bout du formulaire où il y a les input type date:
    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
    </td></tr>
     
    <tr><td align="left"><font color="#19431B"><p><U><?php echo DATE_ATIRS; ?></U></p></td></tr>
    <tr><td align="right"><font color="#19431B"><?php echo DATED_ATIRS; ?></td>
    <td><font color="#19431B"><input type="date" name="dated" value="<?php echo $ligne["dated"]; ?>" size="20" maxlength="20" />* (AAAA.MM.JJ)</td></tr>
     
     
    <tr><td align="right"><font color="#19431B"><?php echo DATEFIN_ATIRS; ?></td>
    <td><font color="#19431B"><input type="date" name="datefin" value="<?php echo $ligne["datefin"]; ?>" size="20" maxlength="20" />* (AAAA.MM.JJ)</td></tr>
    <tr><td align="right"><font color="#19431B"><?php echo DELAI_ATIRS; ?></td>
    <td><font color="#19431B"><input type="date" name="delaidinscription" value="<?php echo $ligne["delaidinscription"]; ?>" size="20" maxlength="20" />* (AAAA.MM.JJ)</td></tr>
     
     
    <tr><td align="left"><font color="#19431B"><p><U><?php echo LIEN_ATIRS; ?></U></p></td></tr>
    <tr><td align="right"><font color="#19431B"><?php echo URL_ATIRS; ?></td>
    <td><font color="#19431B"><input type="text" name="lien" value="<?php echo $ligne["lien"]; ?>" size="40" maxlength="100" /><a href="#" onClick="window.open('upload.php<?php echo $lang ?>','Download','height=400,width=400')"><?php echo DWL_ATIRS; ?></a></td></tr>
     
    <tr>
    <td align="center" colspan="2"><BR /><input type="submit" value="<?php echo VALID_ATIRS; ?>" /></td>
    </tr>
    </table>
    et ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "UPDATE tirs SET nom='$nom', rue='$rue', lieu='$lieu', canton='$canton', cp='$cp', F300='$F300', P50='$P50', P25='$P25', P10='$P10', C50='$C50', C10='$C10', dated='$dated', delaidinscription='$delaidinscription', lien='$lien', datefin='$datefin' WHERE tirsID='$tirsID'";
    $result = mysql_query($sql) or die ('Erreur SQL !'.$sql.'<br>'.mysql_error());
                      header ("Location: profilconfirm.php?lang=$lang");
    merci d'avance !

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    Bonjour,

    quel est le type pour les champs de date ? datetime ? varchar ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    c'est un type date.

    Pour info, le formulaire que j'ai créé pour créer les valeurs dans les champs de la table fonctionne parfaitement donc je ne comprends pas pourquoi le formulaire pour les modifier ne fonctionne pas uniquement avec les "Type: date"..

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    si tu fais un echo de ta requete tu affiches quoi ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    les valeurs sont affichées dans le formulaire avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value="<?php echo $ligne["dated"]"
    . Il y a bien la date qui est affichée au format 0000.00.00.

    Comme pour les autres champs je devrais pouvoir récrire une date par dessus et qu'elle soit enregistrée mais ce n'est pas le cas.. et je trouve pas le problème..

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    le format datetime est 0000-00-00 et pas 0000.00.00

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    c'est pas un datetime mais un date.

    Mais oui pour modifier la valeur en mettant un format 1111-11-11 cela fonctionne mais pas à chaque coup. C'est pas logique !

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    j'ai tilté: je testait avec des dates de type 2222-22-22 alors que les mois ne vont que jusqu'à 12 sinon cela enregistre 0000-00-00...
    merci de ton aide !

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    Si je veux contrôler que ce qui est inséré soit bien de 1-12 et de 1-31 comment puis je transformer mon ereg ?

    puis-je mettre un mktime sur un type date ? en tout cas comme j'ai essayé cela ne fonctionne pas..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if(ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})",$datefin)){
    if ($datefin != date('Y-m-d', mktime(0, 0, 0, $Y, $m, $d))) {
     
    			      $sql = "UPDATE tirs SET nom='$nom', rue='$rue', lieu='$lieu', canton='$canton', cp='$cp', F300='$F300', P50='$P50', P25='$P25', P10='$P10', C50='$C50', C10='$C10', dated='$dated', delaidinscription='$delaidinscription', lien='$lien', datefin='$datefin' WHERE tirsID='$tirsID'";
    $result = mysql_query($sql) or die ('Erreur SQL !'.$sql.'<br>'.mysql_error());
                      header ("Location: profilconfirm.php?lang=$lang");
                      }
    				  else {$message_new = MSGDELAI_MODPROFIL;}
    				  }
    				  else {$message_new = MSGDELAI_MODPROFIL;}
    				  }

  10. #10
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    regarde du coté de checkdate() pour vérifier la validité de la date :

    http://fr2.php.net/checkdate

    sinon pour le preg, une petite fonction :

    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
    function checkDateFormat($date)
    {
      //match the format of the date
      if (preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $date, $parts))
      {
        //check weather the date is valid of not
            if(checkdate($parts[2],$parts[3],$parts[1]))
              return true;
            else
             return false;
      }
      else
        return false;
    }
     
    if ( true === checkDateFormat($datefin) && $datefin != date('Y-m-d', mktime(0, 0, 0, $Y, $m, $d) ) {
     
    // requete
     
    }

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    A moins que ne sois en HTML5, les input de type "date" n'existent pas.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    j'ai donc rajouté un checkdate comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})",$datefin) & !checkdate($datefin[3],$datefin[2],$datefin[1])){
    			        if(ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})",$dated) & !checkdate($dated[3],$dated[2],$dated[1])){
    			            if(ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})",$delaidinscription) & !checkdate($delaidinscription[3],$delaidinscritpion[2],$delaidinscription[1])){
    mais cela ne fonctionne pas. Il y a une erreur que sur l'année si je mets une année dépassant 2190. Autrement je peux aller après 12 et après 31..

  13. #13
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    Avec cette fonction, tu peux tester la validité de la date :

    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
    function checkDateFormat($date) {
     
      if (preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $date, $parts)) {
     
            if(checkdate($parts[2],$parts[3],$parts[1]))
              return true;
            else
             return false;
      }
      else
        return false;
    }
     
    echo (checkDateFormat('2190-04-31')===false) ? 'false' : 'true';
     
    /*if ( checkDateFormat($datefin) ) {
    	if ( checkDateFormat($dated) ) {
    		if ( checkDateFormat($delaidinscription) ) {*/
    D'abord un preg_match ( ereg est obsolète ) pour vérifier la syntaxe de ta date et ensuite un checkdate qui vérifie la validité de la date sur le calendrier grégorien

    tu peux voir avec ce petit script qu'il te renvoie false ou true selon la date que tu lui mets

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    tu peux aussi regarder du coté de date_parse

  15. #15
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    ouais par contre date_parse ne semble pas gérée les dates erronées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    echo '<pre>';
    print_r(date_parse('2010-02-30'));
    echo '</pre>';
     
    Array
    (
        [year] => 2010
        [month] => 2
        [day] => 30
        [hour] => 
        [minute] => 
        [second] => 
        [fraction] => 
        [warning_count] => 0
        [warnings] => Array
            (
            )
     
        [error_count] => 0
        [errors] => Array
            (
            )
     
        [is_localtime] => 
    )

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par syl2095 Voir le message
    ouais par contre date_parse ne semble pas gérée les dates erronées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    echo '<pre>';
    print_r(date_parse('2010-02-30'));
    echo '</pre>';
     
    Array
    (
        [year] => 2010
        [month] => 2
        [day] => 30
        [hour] => 
        [minute] => 
        [second] => 
        [fraction] => 
        [warning_count] => 0
        [warnings] => Array
            (
            )
     
        [error_count] => 0
        [errors] => Array
            (
            )
     
        [is_localtime] => 
    )
    c'est que pour parser la date...
    il faut garder le checkdate apres, c'est pour éviter les regexp

  17. #17
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    ok dacc !

    d'un point de vue optimisation, il est plus intéressant d'utiliser date_parse que regexp ?

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par syl2095 Voir le message
    ok dacc !

    d'un point de vue optimisation, il est plus intéressant d'utiliser date_parse que regexp ?
    t'as plus de possibilité avec date_parse dans le sens ou il prend tout les format standard, apres regexp sera plus souple pour les formats exotiques

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    voilà cela fonctionne enfin

    j'ai fait le code comme telle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    			if (preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $datefin, $parts)) {
                if(checkdate($parts[2],$parts[3],$parts[1])) {
    			       if (preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $dated, $parts2)) {
    				   if(checkdate($parts2[2],$parts2[3],$parts2[1])) {
    			            if (preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $delaidinscription, $parts3)) {
    						if(checkdate($parts3[2],$parts3[3],$parts3[1])) {
     
    			      $sql = "UPDATE tirs SET nom='$nom', rue='$rue', lieu='$lieu', canton='$canton', cp='$cp', F300='$F300', P50='$P50', P25='$P25', P10='$P10', C50='$C50', C10='$C10', dated='$dated', delaidinscription='$delaidinscription', lien='$lien', datefin='$datefin', lat='$lat', lng='$lng' WHERE tirsID='$tirsID'";
    $result = mysql_query($sql) or die ('Erreur SQL !'.$sql.'<br>'.mysql_error());
                      header ("Location: profilconfirm.php?lang=$lang");
                      }
    				  else {$message_new = MSGDELAI_MODPROFIL;}
    				  }
    				  else {$message_new = MSGDELAI_MODPROFIL;}
    				  }
    				  else {$message_new = MSGDATED_MODPROFIL;}
    				  }
    				  else {$message_new = MSGDATED_MODPROFIL;}
    				  }
    				  else {$message_new = MSGDATEFIN_MODPROFIL;}
    				  }
    				  else {$message_new = MSGDATEFIN_MODPROFIL;}
    				  }
    merci beaucoup à tous

  20. #20
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    par contre pas terrible les 6 if imbriqués

    tu peux en faire qu'un seul au pire :

    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( preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $datefin, $parts)
        && checkdate($parts[2],$parts[3],$parts[1])
        && preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $dated, $parts2)
        && checkdate($parts2[2],$parts2[3],$parts2[1])
        && preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $delaidinscription, $parts3)
        && checkdate($parts3[2],$parts3[3],$parts3[1])
    ) 
    {
        $sql = "UPDATE tirs SET nom='$nom', rue='$rue', lieu='$lieu', canton='$canton', cp='$cp', F300='$F300', P50='$P50', P25='$P25', P10='$P10', C50='$C50', C10='$C10', dated='$dated', delaidinscription='$delaidinscription', lien='$lien', datefin='$datefin', lat='$lat', lng='$lng' WHERE tirsID='$tirsID'";
        $result = mysql_query($sql) or die ('Erreur SQL !'.$sql.'<br>'.mysql_error());
        header ("Location: profilconfirm.php?lang=$lang");
    }
    else
    {                    
        $message_new = TOUT_MODPROFIL;
    }
    ou creer un array temporaire avec les erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    $error_new = array();
     
    if(preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $datefin, $parts))
    {
        $error_new[] = MSGDATEFIN_MODPROFIL;
    }
     
    if(checkdate($parts[2],$parts[3],$parts[1]))
    {
        $error_new[] = MSGDATEFIN_MODPROFIL;
    }
     
    if(preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $dated, $parts2))
    {
        $error_new[] = MSGDATED_MODPROFIL;
    }
     
    if(checkdate($parts2[2],$parts2[3],$parts2[1]))
    {
        $error_new[] = MSGDATED_MODPROFIL;
    }
     
    if(preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $delaidinscription, $parts3))
    {
        $error_new[] = MSGDELAI_MODPROFIL;
    }
     
    if(checkdate($parts3[2],$parts3[3],$parts3[1]))
    {
        $error_new[] = MSGDELAI_MODPROFIL;
    }
     
    if(empty($error_new))
    {
        $sql = "UPDATE tirs SET nom='$nom', rue='$rue', lieu='$lieu', canton='$canton', cp='$cp', F300='$F300', P50='$P50', P25='$P25', P10='$P10', C50='$C50', C10='$C10', dated='$dated', delaidinscription='$delaidinscription', lien='$lien', datefin='$datefin', lat='$lat', lng='$lng' WHERE tirsID='$tirsID'";
        $result = mysql_query($sql) or die ('Erreur SQL !'.$sql.'<br>'.mysql_error());
        header ("Location: profilconfirm.php?lang=$lang");
    }
    else
    {
        $message_new = implode(', ', $error_new);
    }

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/12/2014, 04h59
  2. [HTML 5] Balise input type date avec Firefox et IE
    Par sarahm dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 21/07/2014, 16h05
  3. [HTML 5] input type date
    Par Benduroy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 04/12/2012, 13h24
  4. Modification d'un champ de type DATE
    Par stanley dans le forum Bases de données
    Réponses: 6
    Dernier message: 14/02/2007, 10h44
  5. inserer date ds input type=text
    Par vanou dans le forum ASP
    Réponses: 5
    Dernier message: 20/06/2006, 10h06

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