Passer une date javascript vers une bdd sql

Résolu/Fermé
Akabane12 Messages postés 5 Date d'inscription mardi 29 juin 2010 Statut Membre Dernière intervention 2 juillet 2010 - 29 juin 2010 à 12:06
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 - 29 juin 2010 à 16:59
Bonjour,


Dans un formulaire, j'ai déclaré un bouton de type button qui éxécute une fonction javascript au click.
Cette fonction récupère la date et l'heure actuelle et l'enregistre dans un champ de type hidden afin d'être conservée dans un tableau POST.

<script language='javascript'>
function enregistrer2()
{
[...] 
//déclaration de la variable pour la date
var valeur4 = new Date(); 
//enregistrement de la valeur dans le hidden
document.getElementById('hidheuredebut').value = valeur4.toLocaleString();  
[...]
}
</script>


L'enregistrement du formulaire provoque la redirection vers un script php ayant pour fonction l'éxécution de requêtes SQL.
Je récupère donc la valeur de ma variable :

$valeur4 = $_POST['HidHeureDebut'] ;


La requête en question est un INSERT :

$sql4 = 'INSERT INTO 'travaux'
   ('Piece', 'Operation', 'Operateur', 'Date_heure_debut', 'Date_heure_fin')
VALUES
   ("'.$valeur3.'", "'.$valeur2.'", "'.$valeur1.'", "'.$valeur4.'", "'.$valeur5.'");';
$result4 = mysql_query($sql4)


Le champ destiné a recevoir la valeur de la date dans la BDD est un datetime.
Mon problème est que losque je consulte les enregistrements, la valeur de la date est égale à : "0000-00-00 00:00:00".
J'ai effactué un echo "$variable4"; à la fin du script php et il m'affiche bien la date et l'heure normale.
Je pense donc que le problème vient de la compatibilité des formats heure et date entre JavaScript et la BDD SQL.
Or, étant assez novice en programmation, je n'ai toujours pas réussi a résoudre ce problème (j'ai tenté de modifier les formats des deux cotés sans résultat).

Si quelqu'un pourrait m'éclairer, ce serait sympa.
Merci d'avance.

1 réponse

vincentdu76
29 juin 2010 à 14:09
il y a pas un truc en JS permettant de définir toi même comment dois s'afficher l'heure??
1
Akabane12 Messages postés 5 Date d'inscription mardi 29 juin 2010 Statut Membre Dernière intervention 2 juillet 2010
29 juin 2010 à 15:13
Si il y a bien de quoi modifier le format sous JS, on peut également faire de même sur SQL (même si les possibilités sont plus restreintes d'après ce que j'ai compris), mais je ne suis toujours pas parvenu au résultat désiré.
Peut être aussi que le problème ne vient pas de la...
0
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
29 juin 2010 à 15:17
pour ne pas se casser la tete avec les compatibilités d'heure, autant utiliser le timestamp ;)
0
Akabane12 Messages postés 5 Date d'inscription mardi 29 juin 2010 Statut Membre Dernière intervention 2 juillet 2010
29 juin 2010 à 15:45
Je ne connais pas vraiment le timestamp, je ne sais pas si je serais capable de l'utiliser, mais je sais qu'il renvoie un nombre de secondes s'étant écoulé depuis un certain temps.
Cependant j'aurais besoin en consultant ma base de donnée que l'enregistrement retourné me renvoie une date et une heure directement afin de ne pas avoir de convertion a faire a chaque fois.
S'il existe une requête sql pouvant le faire automatiquement, alors oui sa peut être une solution.
Aussi, j'ai plusieures heures différentes a récupérer dans le même formulaire et sans recharger la page, je n'ai donc trouvé que cette solution.
Je n'ai pas encore essayé, mais je pense que si je patine trop je changerais le datetime de la BDD pour un banal varchar qui me retournerais ma valeur telle quelle :)
0
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
29 juin 2010 à 16:02
function replace_date($date,$format){
	if(empty($date)){return '-';}
	$jour = date('d', $date);
	$mois = date('m', $date);
	$annee = date('Y', $date);
	$heure = date('H', $date);
	$minute = date('i', $date);
	if($format == 1){
		$date = $jour.'/'.$mois.'/'.$annee;
	}elseif($format == 2){
		$date = $jour.'/'.$mois.'/'.$annee.' - '.$heure.'h'.$minute;
	}
	return $date;
}


voici un fonction de conversion,

des que tu recupere un timestamp (exemple ta variable $ma_date)

tu fais
replace_date($ma_date,1);


1 -> renvoi la date sous le format 29/06/2010
2 -> 29/06/2010 - 16h00

ce petit bout de code sera placé a un seul endroit dans un fichier que tu appelleras sous forme d'un include sur chacune de tes pages

ps : tester des dates en timestamp est beaucoup plus pratique ^^
0
Akabane12 Messages postés 5 Date d'inscription mardi 29 juin 2010 Statut Membre Dernière intervention 2 juillet 2010
29 juin 2010 à 16:51
Je viens de mettre ta fonction dans mes fichiers.
Je ne m'attendais pas a cette méthode, mais c'est plutôt efficace.
Je suis en stage, c'est pour cette raison que je préférais me casser un peu la tête, mais arrivant a son terme, je devais tout de même trouver une solution ;)
Donc merci a toi pour ton aide et a charge de revanche (même si je doute pouvoir t'aider grandement dans ce domaine :p)
0