problème format heure en php dans ma base de donnée

Eléphanteau du PHP | 19 Messages

18 août 2017, 11:06

Bonjour,
je suis toujours débutant en PHP, mais je me lance dans des choses que je ne méprise pas trop. j'ai un problème dans le format de ma date dans ma base de donnée.
J'ai toujours 00:00:00 dans ma base de donnée.

voilà mon code dans ma views :
<td id="evenement">
                  <label for="" >Heure :</label> <br>
                    <input align="center" type="time" id='timepicker' name="heureEvenement" value="<?php if(isset($heureEvenement)) { echo $heureEvenement; } ?>" />
                </td>
voici le code PHP que je mets en place pour que çà marche :
if(isset($_POST['formcreerevenement'])){
  $evenement = htmlspecialchars($_POST['evenement']);
  $date = date('Y-m-d', strtotime($_POST['dateEvenement']));
  $heure = time('H:i', strtotime($_POST['heureEvenement']));
  $salle = htmlspecialchars($_POST['salleEvenement']);
  if(!empty($_POST['evenement']) AND !empty($_POST['dateEvenement']) AND !empty($_POST['heureEvenement']) AND !empty($_POST['salleEvenement'])) {
    $evenementlength = strlen($evenement);
    $salleEvenementlength = strlen($salle);
    if($evenementlength <= 255){
      if($salleEvenementlength <= 255){
        $insertevent = $bdd->prepare("INSERT INTO evenement(nom, date, heure, salle) VALUE(?, ?, ?, ?)");
        $insertevent->execute(array($evenement, $date, $heure, $salle));
      }else{
        $erreur = "Votre salle ne doit pas dépasser 255 caractères !";
      }
    }else{
      $erreur = "Votre évènement ne peut pas dépasser 255 caractères !";
    }
  }else {
    $erreur = "Tous les champs doivent être complétés !";
  }
}
?>
J'utilise aussi un code Jquery pour le format des dates et des heures :
<script>
    $('#datepicker').datetimepicker({
      dateFormat : 'yy-mm-dd',
      minDate : 0,
      maxDate : '2036-11-30'
      timepicker : false,
    });
    $('#timepicker').datetimepicker({
      format: 'H:i'
      datepicker: false,
    });

  </script>
Dans ma base de donnée, heure est de type : time.
Pouvez-vous me dire là où je me trompe ?

merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

18 août 2017, 13:01

Bonjour,

Il faut que tu debuges par toi même ton code pour voir la valeur de chaque variable et essayer de trouver ce qui pourrait poser problème.
A première vue, tu utilises la fonction time() de la mauvaise façon puisse que celle-ci ne prend pas de paramètre, c'est la fonction date() qui permet de formater une date ET une heure.
http://php.net/manual/fr/function.time.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 5 Messages

21 août 2017, 09:55

Bonjour,

dans ta base de données, mais un format date (il sera sous cette forme YYYY-MM-DD H:i:s)
Mettre le format de ton datepicker en : dateFormat : 'yyyy-mm-dd' et ensuite traite avec PHP.
Ta variable transmise $_POST['dateEvenement'] aura donc le format YYYY-MM-DD sans le H:i:s.
Ajoutes les secondes en PHP Exemple :

Code : Tout sélectionner

$secondes = date('s'); $dateEntiere = $date." ".$heure.$secondes;
C'est une solution possible.

Par contre, il manque des choses sur cette ligne :

Code : Tout sélectionner

$insertevent = $bdd->prepare("INSERT INTO evenement(nom, date, heure, salle) VALUE(?, ?, ?, ?)");
Il ne s'agirait pas plutôt de

Code : Tout sélectionner

$insertevent = $bdd->prepare("INSERT INTO evenement(nom, date, heure, salle) VALUE($evenement, $date, $heure, $salle)");
Autre point, tu devrais regrouper dans ta base de données les champs date et heure (format automatique mysql YYYY-MM-DD H:i:s) et ajouter un champ ID en début de table (auto increment, primary) c'est plus simple pour les manipulations futures (suppression, modification, etc.).

Voilà.

Eléphanteau du PHP | 19 Messages

06 sept. 2017, 22:50

Bonsoir,
j'ai fait les modifications que vous m'avez conseillé.
j'ai fait un var_dump pour chaque champs, et je reçois :
string(8) "kermesse" string(10) "2017-09-16" string(5) "09:12" string(7) "local A"
Donc, j'ai mes éléments, mais quand j'enlève le var_dump, je n'ai rien qui rentre en base. Je ne comprends plus pourquoi.
voici mon code php
if(isset($_POST['formcreerevenement'])){
  $evenement = htmlspecialchars($_POST['evenement']);
  var_dump($_POST['evenement']);
  $date = date('Y-m-d', strtotime($_POST['dateEvenement']));
  var_dump($_POST['dateEvenement']);
  $heure = time('H:i:s', strtotime($_POST['heureEvenement']));
  var_dump($_POST['heureEvenement']);
  $salle = htmlspecialchars($_POST['salleEvenement']);
  var_dump($_POST['salleEvenement']);
  if(!empty($_POST['evenement']) AND !empty($_POST['dateEvenement']) AND !empty($_POST['heureEvenement']) AND !empty($_POST['salleEvenement'])) {
    $evenementlength = strlen($evenement);
    $salleEvenementlength = strlen($salle);
    if($evenementlength <= 255){
      if($salleEvenementlength <= 255){
        $insertevent = $bdd->prepare("INSERT INTO evenement(nom, date, heure, salle) VALUE($evenement, $date, $heure, $salle)");
        $insertevent->execute(array($evenement, $date, $heure, $salle));
      }else{
        $erreur = "Votre salle ne doit pas dépasser 255 caractères !";
      }
    }else{
      $erreur = "Votre évènement ne peut pas dépasser 255 caractères !";
    }
  }else {
    $erreur = "Tous les champs doivent être complétés !";
  }
}
voici mon code html :
<form method="post">
          <tr>
              <td id="evenement">
                <label for="" >Evènement :</label> <br>
                  <input align="center" type="text" placeholder="Votre évènement" name="evenement" value="<?php if(isset($evenement)) { echo $evenement; } ?>" />
                </td>
                <td id="evenement">
                  <label for="" >Date :</label> <br>
                    <input align="center" type="date" id='datepicker' name="dateEvenement" value="<?php if(isset($dateEvenement)) { echo $dateEvenement; } ?>" />
                </td>
                <td id="evenement">
                  <label for="" >Heure :</label> <br>
                    <input align="center" type="time" id='timepicker' name="heureEvenement" value="<?php if(isset($heureEvenement)) { echo $heureEvenement; } ?>" />
                </td>
                <td id="evenement">
                  <label for="" >Salle :</label> <br>
                    <input align="center" type="text" placeholder="Saisir la Salle" name="salleEvenement" value="<?php if(isset($salleEvenement)) { echo $salleEvenement; }?>" />
                </td>
              </tr>
              <?php
              if(isset($erreur)) {
                 echo '<font color="red">'.$erreur."</font>";
               }
              ?>
            </table>


          <div class="row" >
            <div class="table-responsive">
              <div class="form-group" align='center'>
            <!-- Bouton VALIDER-->
                <input class="btn btn-primary" value="valider" type="submit" id="fonction" name="formcreerevenement" />
            <!-- Bouton RETOUR-->
                <input type="button" class="btn btn-danger" value="Retour" onclick="history.go(-1)">
              </div>
            </div>
          </div>
      </div>
    </div>
      <!-- fin Création Evènement  -->
    </form>
Merci de votre aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 sept. 2017, 22:57

Bonjour,
Ta requête PDO est incorrecte, regarde dans les logs php et mysql pour voir les messages d'erreur et les debuguer.
Tu peux en supplément faire un var_dump($bdd->errorInfo()) pour voir le dernier message d'erreur après une requête si elle échoue.
http://php.net/manual/fr/pdo.errorinfo.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 19 Messages

07 sept. 2017, 22:49

merci, je regarde, ce qui m'étonne, c'est que j'ai rien touché

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 sept. 2017, 15:42

Pour le coup, il n'aurait pas fallu suivre tous les conseils de FredBty qui n'a pas fait attention au fait que tu utilisais des requêtes préparées de PDO.

Dans une requête préparée on ne mets pas les valeurs en dur dans la requête, sinon on perd le bénéfice de la protection automatique des données, et surtout tout l'intérêt de pouvoir exécuter plusieurs fois une requête avec des valeurs différentes :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...