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 :

Ne pas afficher les secondes d'un "time" qui vient d'une base de données


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut Ne pas afficher les secondes d'un "time" qui vient d'une base de données
    Bonjour,

    j'enregistre une valeur au type "time" dans une base de données et je réaffiche cette valeur en PHP. Le problème, c'est que ma base de données enregistre le time au format "H:m:s" et ça me l'affiche aussi en php.
    J'aimerais pouvoir retirer les secondes.

    Dans mon code php j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      $bddShowGraph = $bdd->prepare('SELECT * FROM maTable WHERE ddate LIKE "'.$_POST['dateRecherche'].'" ORDER BY heure');
      $bddShowGraph->execute();
     
      while ($donnees = $bddShowGraph->fetch()) {
        echo '<tr bgcolor="#F0EBC1"><td height="25px;">' . $donnees['nom'] . '</td>';
        echo '<td >' . $donnees['prenom'] . '</td>';
        echo '<td>' . $donnees['heure'] . '</td></tr>';
      }
    J'ai testé ceci mais ça ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<td>' . substr($donnees['heure'], 0, -3) . '</td></tr>' // -3 car les secondes sont affichées comme ça " :00";
    ou encore
    echo '<td>' . date("H:i", $donnees['heure']) . '</td></tr>'
    Voilà, j'aurais besoin de votre aide s'il vous plaît

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut
    Mauvaise recherche...
    En essayant d'autres mots clés lors de ma recherche, je suis tombé ici, ce qui a permis de résoudre mon problème!

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    En supposant que la base est mysql et que le champs est un type TIME tu peux utiliser les fonctions de conversion de la bdd pour obtenir directement la valeur souhaitée :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TIME_FORMAT(mon_champs_time, "%H:%i") as temps_sans_les_secondes FROM matable
    Faire une requête préparée mais y insérer directement une valeur venue de $_POST ça ne sécurise rien du tout.
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bddShowGraph = $bdd->prepare('SELECT * FROM maTable WHERE ddate LIKE "'.$_POST['dateRecherche'].'" ORDER BY heure');
    est sensible aux injections SQL
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut
    En php uniquement, ce serait mieux de faire ceci peut-être?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $dateRecherche=$_POST['dateRecherche'];
    $bddShowGraph = $bdd->prepare('SELECT * FROM maTable WHERE ddate LIKE "'.$dateRecherche.'" ORDER BY heure');

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Non ca ne change rien à la problématique.

    Si tu veux protéger ta requête il faut à minima faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $bddShowGraph = $bdd->prepare('SELECT * FROM maTable WHERE ddate LIKE :daterecherche ORDER BY heure');
    $bddShowGraph->execute([':daterecherche' =>$_POST['dateRecherche']]);
    Ceci étant dit :
    - je suis pas sur que LIKE soit le comparateur adapté pour rechercher une date, on ne cherche pas quelque chose de ressemblant mais une égalité
    - Traiter directement une donnée $_POST sans faire des vérifications avant (existence , conformité, etc ...) n'est clairement pas recommandé
    - Si on peut faire effectuer un traitement sur une données à la base on le privilégie à PHP.

    Tu peux lire ceci : https://fmaz.developpez.com/tutoriel...endre-pdo/#LII pour avoir une meilleur compréhension des requête préparées et de leur intérêt
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Je ne comprends pas bien ce qu'il y a dans la variable POST, une simple date ?
    Formatée comment ? JJ/MM/YYYY ou YYYY-MM-DD ?
    Si c'est le cas 1, je ferais ça
    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
    <?php
    try {
      if(! empty($_POST['dateRecherche'])){
        $temp=explode('/',$_POST['dateRecherche']);
        $date_sql=$temp[2].'-'.$temp[1].'-'.$temp[0];
        $date_dt=new DateTime($date_sql);
        $bddShowGraph = $bdd->prepare('SELECT date_format(ddate,"%d/%m/%Y H:i") as heure, nom, prenom
        FROM maTable 
        WHERE date(ddate)  = ?
        ORDER BY ddate');
        $bddShowGraph->execute(array($date_dt->format('Y-m-d')));
        while ($donnees = $bddShowGraph->fetch()) {
          echo '<tr bgcolor="#F0EBC1"><td>' . $donnees['heure'] . '</td>';
          echo '<td height="25px;">' . $donnees['nom'] . '</td>';
          echo '<td >' . $donnees['prenom'] . '</td></tr>';
        }
      }
    } catch (Exception $e) {
        echo $e->getMessage();
        exit(1);
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut Dendrite,
    tu n'as absolument aucune certitude que la date reçue est valide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $date = DateTime::createFromFormat('d/m/Y', $_POST['dateRecherche']);
    if ($date === false) {
        // ...
    }

  8. #8
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut
    Voici toute la partie du code sur la recherche :
    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
     
    <!-- PARTIE SUR LA RECHERCHE -->
    <form method="post" action="">
      <div align="center" style="margin-top:5%;">
        <h2>Rechercher pour : </h2>
        <input type="date" name="dateRecherche" value="<?= date('Y-m-d');?>"><br>
        <input type="submit" value="Rechercher" name="recherche" class="bouton">
      </div>
    </form>
     
    <?php
    if(isset($_POST['recherche'])):
     
      $bddShowGraph = $bdd->prepare('SELECT * FROM maTable WHERE ddate LIKE "'.$_POST['dateRecherche'].'" ORDER BY heure');
      //$bddShowGraph->execute(); 
      $bddShowGraph->execute([':daterecherche' =>$_POST['dateRecherche']]);
     
     
      echo '<table style="background-color:#000000; margin-left:auto; margin-right:auto; text-align:center; width:30%;">
              <tbody>
    		<tr>
    		   <th colspan="3" height="35px" style="margin-left:10px; border-bottom:2px solid white;"><font color="#FFFFFF">Recherche en date du '.date("d/m/Y", strtotime($_POST['dateRecherche'])).'</font></th>
    		</tr>
    
                <tr>
                  <th height="30px"><font color="#FFFFFF">Nom</font></th>
                  <th height="30px"><font color="#FFFFFF">Prenom</font></th>
                  <th height="30px"><font color="#FFFFFF">Heure</font></th>
                </tr>';
     
      while ($donnees = $bddShowGraph->fetch()) {
        echo '<tr bgcolor="#F0EBC1"><td height="25px;">' . $donnees['nom'] . '</td>';
        echo '<td >' . $donnees['prenom'] . '</td>';
        echo '<td>' . heureminute($donnees['heure']) . '</td></tr>';
      }
     
      echo '</tbody>';
      echo '</table>';
    endif;
    A mon avis, absolument rien n'est optimisé. Je suis débutant en programmation.
    La logique globale on peut dire que je l'ai assimilée, mais à côté de ça je suppose que je fais énormément d'erreurs, mais elles ne sont pas flagrantes pour moi

  9. #9
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    salut Dendrite,
    tu n'as absolument aucune certitude que la date reçue est valide :
    Bonjour Raw

    Sur cette page du manuel

    https://www.php.net/manual/fr/datetime.construct.php

    On trouve ceci

    Valeurs de retour
    Retourne une nouvelle instance DateTime. Style procédural retourne FALSE en cas d'erreur.
    qui m'a fait penser que le style objet... ne retourne pas false... Mais qu'il faut l'encapsuler dans un try catch pour qu'il couine en cas d'erreur.
    J'ai donc mal compris.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    relis mon code, miss.
    J'utilise DateTime::createFromFormat(), qui lui renvoie false en cas d'erreur et ne lève pas une Exception.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date = DateTime::createFromFormat('d/m/Y', '32/15/');
    var_dump($date);  // $date = false
    La doc par ici

    Et effectivement, utiliser New DateTime(); lève une exception en cas d'erreur, c'est pour cela qu'il est préférable dans bien des cas, d'utiliser le constructeur statique

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/04/2016, 17h48
  2. Comment ne pas afficher les secondes ?
    Par lerieure dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/06/2009, 09h42
  3. Réponses: 1
    Dernier message: 25/11/2008, 11h11
  4. [Sécurité] Ne pas afficher les variables de l'URL
    Par Wormus dans le forum Langage
    Réponses: 17
    Dernier message: 23/10/2005, 14h13
  5. [JTable] Comment ne pas afficher les titres ?
    Par FabienBxl dans le forum Composants
    Réponses: 3
    Dernier message: 08/10/2003, 15h01

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