[RESOLU] Formulaire avec un DateTimePicker

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Formulaire avec un DateTimePicker

Re: Formulaire avec un DateTimePicker

par KanLa » 28 juin 2016, 14:22

Re bonjour à tous !

Je vais mettre le topic en résolu mais avant j'explique la marche que j'ai suivi.
Merci tout d'abord à tous pour votre aide !

- En premier j'avais en effet mal ajoutée la base de donnée, j'ai donc fait :

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `" . $this->prefix . "tournaments` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `tournament` varchar(250) NOT NULL, `max_teams` int(250) NOT NULL, `start_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `registration_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `format` varchar(50) NOT NULL, `maps` varchar(1000) NOT NULL, `type` varchar(25) NOT NULL DEFAULT 'single', `status` int(1) NOT NULL DEFAULT '1', `first_place` int(10) NOT NULL, `second_place` int(10) NOT NULL, `game` varchar(100) NOT NULL, `rules` varchar(10000) NOT NULL, `public` int(1) NOT NULL DEFAULT '1', PRIMARY KEY (`id`) );
Une fois ceci fait, il y avait en effet une erreur de format.
Moi j'étais ainsi : dd/MM/YYYY hh:mm:ss mais il fallait MM/dd/YYYY hh:mm:ss

Cependant l'heure n'était pas prit en compte !

J'ai donc regarder sur la source de ma page qu'elles était les pages utilisés par mon script et j'ai trouvée :

Code : Tout sélectionner

$start_date = date( 'Y-m-d', $start_date ); $registration_date = date( 'Y-m-d', $registration );
Que j'ai remplacé par :

Code : Tout sélectionner

$start_date = date( 'Y-m-d H:i:s', $start_date ); $registration_date = date( 'Y-m-d H:i:s', $registration );
Il m'aura fallut du temps mais j'ai enfin trouvé :p
Je reviendrais rapidement pour un problème plus corsé.

Merci encore à tous !

Re: Formulaire avec un DateTimePicker

par KanLa » 27 juin 2016, 14:13

Bonjour, désolé de ma non réponse ! L'alimentation de l'ordinateur à laché, donc le temps d'en prendre une nouvelle et de la remplacer ce fut long.
Je vais aller voir vos conseils et liens dés maintenant et je reviens pour dire ce qu'il en est un peu plus tard dans la journée.

Merci de votre aide !

Re: Formulaire avec un DateTimePicker

par emasol » 24 juin 2016, 20:32

J'ai vu ce post sur le site, ça pourrait aider:
"Datepicker en français littéraire et retour date format sql" du 13 Fév 2015, 02:37
Bon courage
Emasol

Re: Formulaire avec un DateTimePicker

par emasol » 24 juin 2016, 20:05

Bonjour,
Ce que je voulais dire c'est que dans ton script je ne vois pas que la date en anglais = la date en français.
Par défaut, datetimepicker retourne une date en anglais et si tu veux que ta date s'affiche en français, il faut créer une correspondance entre les 2. Cela ne suffira pas de définir un nouveau format. As-tu essayé sans mettre la date + heure en français ? En supprimant dans ton js:
format: 'dd/MM/yyyy hh:mm:ss' ?
language: 'fr'

Emasol

Re: Formulaire avec un DateTimePicker

par KanLa » 21 juin 2016, 19:41

Bonjour
Alors en réalité la personne qui a programmé le script l'a posté sur github en annonçant qu'il s'agissait d'un opensource.
Quand j'ai essayé de lui demander des informations il m'a dis qu'il avait depuis 2014 modifié le CMS et le vendait aujourd'hui pour le prix de 300 €.
Le lien du site : http://www.ezleaguegaming.com/

En ce qui concerne la BDD je vais vérifier l'information qui est envoyée pour voir si j'ai bien ajoutée l'heure. (ce qui est logiquement le cas)
Même si ce n'était pas le cas, je devrais malgrés tout avoir la date non ?

J'ai les bases du duo HTML/CSS mais mes connaissanses en PHP/SQL et Javascript ne sont pas énorme. Je profite donc des vacances et de ce CMS pour progresser a ce sujet.

Re: Formulaire avec un DateTimePicker

par Spols » 21 juin 2016, 17:03

Je me demande si vous n'essayez pas quelque chose de plus complexe qu'on ne le croit.

J'ai l'impression qu'il n'y a modification que de la partie html du formulaire sans s'assurer que le traitement en php reste compatible.
Si il y a plus d'information stocké qu'avant, il faut s'assurer que le système en est capable. et donc voir quelle format de sauvegarde est utilisé dans la BDD

Il faut aussi voir sous quelle forme de date le formulaire renvoyait les info avant, comment le traitement les transforme et les stocke. Est-ce compatible avec une précision accrue ?
Pareil pour la lecture des info en tables, elle est surement calibré pour une précision d'un jour, ajouter une précision d'une heure ne se fera pas sans mal.

Ensuite il faut voir quelle format est retourner par ta librairie javascript, si c'est compatible etc.

Qui a programmé ton site ? cette personne est surement là plus indiquée pour t'aider. Si c'est un CMS, un add-on peut peut-être t'aider.

Re: Formulaire avec un DateTimePicker

par KanLa » 21 juin 2016, 15:33

Bonjour,

Merci de votre réponse.
Mais je ne suis pas sur d'avoir bien compris la réponse.

Du coup je rentre cette ligne de code ou et avec laquelle de mes tentatives ? Car j'ai essayé sans succés ce matin.
J'avais aussi pensé a un truc. Je me suis dis qu'autant je n'avais qu'à ajouter start a l'id de mon input pour que sa marche mais malheuresement j'ai toujours January 01, 1970 qui s'affiche.

Code : Tout sélectionner

<div id="datetimepicker" class="input-append date"> <label>Fin des Enregistrements</label> <input type="datetime" id="datetimepicker start"></input> <span class="add-on"> <i data-time-icon="icon-time" data-date-icon="icon-calendar"></i> </span> </div> <script type="text/javascript"> $('#datetimepicker').datetimepicker({ format: 'dd/MM/yyyy hh:mm:ss', language: 'fr' }); </script>

Re: Formulaire avec un DateTimePicker

par emasol » 20 juin 2016, 18:14

Bonjour,
J'avais rencontré ce problème il y a longtemps et il me semble que l'erreur était liée au format. Par défaut, c'est en anglais donc il faut transformer la date par défaut en une date en français.
J'avais fait comme suit dans mon code php:

$datefr = DateTime::createFromFormat('d/m/Y',$date);
$dateAModifier=$datefr ? $datefr->format('Y-m-d'):date('d/m/Y');

Est-ce que le js retourne bien une date au format anglais en français?

Cordialement,

Formulaire avec un DateTimePicker

par KanLa » 20 juin 2016, 14:15

Bonjour à tous,

J'avais un formulaire auparavant qui permettait de définir un jour. Je souhaitais simplement aller plus loin en ajoutant un jour et une heure pour le lancement d'un tournoi.

J'ai donc ajouter un DateTimePicker avec Bootstrap et Jquery qui marche,

Cependant quand je vais mettre la date et que je valide mon formulaire, il est renvoyé le 1er Janvier 1970. Donc simplement il ne prend pas en compte ma variable.

Le code avec DateTime était :

Pour create-tournament.php :

Code : Tout sélectionner

<div class="form-group"> <label>Start Date</label> <input class="form-control" id="start" placeholder="Start Date" /> </div> <div class="form-group"> <label>Registration End Date</label> <input class="form-control" id="registration" placeholder="Registration End Date" /> </div> <div class="form-group"> <button class="btn btn-success" type="submit">Create Tournament</button> </div> <div class="success"> <span class="success_text"></span> </div>
Pour tournament.js

Code : Tout sélectionner

/** * Create tournament date pickers */ $(function() { $( "#start" ).datepicker( "option", "dateFormat", "yy-mm-dd" ); $( "#start" ).datepicker(); }); $(function() { $( "#end" ).datepicker( "option", "dateFormat", "yy-mm-dd" ); $( "#end" ).datepicker(); }); $(function() { $( "#registration" ).datepicker( "option", "dateFormat", "yy-mm-dd" ); $( "#registration" ).datepicker(); }); /** * Create tournament */ $('#createTournament').submit(function(e) { var game = $("#game").val(); max_teams = $("#max-teams").val(); tournament = $("#tournament").val(); start_date = $("#start").val(); registration = $("#registration").val(); format = $("#format").val(); pub = $("#public").val(); e.preventDefault(); $.ajax({ type: "POST", url: "lib/submit/submit-tournament.php", async:true, crossbrowser:true, data: { form: 'create-tournament', start: '' + start_date + '', registration: '' + registration + '', max_teams: '' + max_teams + '', tournament: '' + tournament + '', game: '' + game + '', format: '' + format + '', pub: '' + pub + '' } }).success(function( msg ) { $('.success').css("display", ""); $(".success").fadeIn(1000, "linear"); $('.success_text').fadeIn("slow"); $('.success_text').html(msg); setTimeout(function(){location.reload()},3000); }); });
Celui avec DateTimePicker :

Pour create-tournament.php

Code : Tout sélectionner

<div id="datetimepicker" class="input-append date"> <label>Début de la Compétition</label> <input type="datetime" id="datetimepicker"></input> <span class="add-on"> <i data-time-icon="icon-time" data-date-icon="icon-calendar"></i> </span> </div> <script type="text/javascript"> $('#datetimepicker').datetimepicker({ format: 'dd/MM/yyyy hh:mm:ss', language: 'fr' }); </script> <div id="datetimepicker2" class="input-append date"> <label>Fin des Enregistrements</label> <input type="datetime" name='registration' id="registration"></input> <span class="add-on"> <i data-time-icon="icon-time" data-date-icon="icon-calendar"></i> </span> </div> <script type="text/javascript"> $('#datetimepicker2').datetimepicker({ format: 'dd/MM/yyyy hh:mm:ss', language: 'fr' }); </script> <div class="form-group"> <button class="btn btn-success" type="submit">Créer le Tournoi</button> </div> <div class="success"> <span class="success_text"></span> </div>
et pour tournament.js

Code : Tout sélectionner

/** * Create tournament */ $('#createTournament').submit(function(e) { var game = $("#game").val(); max_teams = $("#max-teams").val(); tournament = $("#tournament").val(); start_date = $("#start").val(); registration = $("#registration").val(); format = $("#format").val(); pub = $("#public").val(); e.preventDefault(); $.ajax({ type: "POST", url: "lib/submit/submit-tournament.php", async:true, crossbrowser:true, data: { form: 'create-tournament', start: '' + start_date + '', registration: '' + registration + '', max_teams: '' + max_teams + '', tournament: '' + tournament + '', game: '' + game + '', format: '' + format + '', pub: '' + pub + '' } }).done(function( msg ) { $('.success').css("display", ""); $(".success").fadeIn(1000, "linear"); $('.success_text').fadeIn("slow"); $('.success_text').html(msg); setTimeout(function(){location.reload()},3000); }); });
Pour commencer je me suis rendu compte que c'était #start ou #registration qui était important pour DatePicker et pour créer la variable. En effet dés que j'ajoute id="start" a mon input j'avais directement DatePicker qui se lancer.

J'ai supprimer les premieres lignes du DatePicker puisque je n'en avais plus besoin et j'ai fais plusieurs tentatives qui n'ont toute pas marchés.

J'ai commencer par changer l'id de ma div, de ma fonction et une fois des deux pour voir le résultat. A chaque fois je me retrouve avec datetimepicker qui ne marche plus. (Plus l’icône ni le bouton qui me permet de changer la date)

Code : Tout sélectionner

<div id="start" class="input-append date"> <label>Début de la Compétition</label> <input type="datetime" id="datetimepicker"></input> <span class="add-on"> <i data-time-icon="icon-time" data-date-icon="icon-calendar"></i> </span> </div> <script type="text/javascript"> $('#start').datetimepicker({ format: 'dd/MM/yyyy hh:mm:ss', language: 'fr' }); </script>
Ensuite j'ai essayer de mettre le script

Code : Tout sélectionner

<script type="text/javascript"> $('#start').datetimepicker({ format: 'dd/MM/yyyy hh:mm:ss', language: 'fr' }); </script>
Directement dans tournament.js mais la aussi aucun résultat.

Je suis donc partis dans l'idée que j'allais devoir rester avec les variables #datetimepicker et #datetimepicker2 et j'ai fais cette tentative sur tournament.js

Code : Tout sélectionner

/** * Create tournament */ $('#createTournament').submit(function(e) { var game = $("#game").val(); max_teams = $("#max-teams").val(); tournament = $("#tournament").val(); start_date = $("#datetimepicker").val(); registration = $("#datetimepicker2").val(); format = $("#format").val(); pub = $("#public").val(); e.preventDefault(); $.ajax({ type: "POST", url: "lib/submit/submit-tournament.php", async:true, crossbrowser:true, data: { form: 'create-tournament', start: '' + start_date + '', registration: '' + registration + '', max_teams: '' + max_teams + '', tournament: '' + tournament + '', game: '' + game + '', format: '' + format + '', pub: '' + pub + '' } }).done(function( msg ) { $('.success').css("display", ""); $(".success").fadeIn(1000, "linear"); $('.success_text').fadeIn("slow"); $('.success_text').html(msg); setTimeout(function(){location.reload()},3000); }); });
La non plus aucun résultat. Je pense même que dans ce cas là, le formulaire ne se lance pas.
Si quelqu'un a une solution, je suis preneur !

Merci à tous.