Page 1 sur 4

addition d'horaire

Posté : 14 déc. 2005, 13:23
par Invité
bonjour,

j'aimerais savoir si l'un d'entre vous pourrait m'aider dans ce petit problème.

Il se trouve que je dispose sur mon site d'un formulaire que les memebres remplissent. Une des colonnes remplit dans ma table test2 dirons nous, est sous la forme VARCHAR xxhxx (ce sont des horaires).
J'aimerais savoir s'il m'est possible d'additioner les horaires remplit par un membre et de les additioner à ses heures déjà effectuées ( qui se trouvent dans la table test1).

En espérant que cela est assez clair.
Merci d'avance pour votre aide.

Posté : 14 déc. 2005, 13:25
par DocType
passes du varchar au format adapté (format date, date time, ou encore un int avec le timestamp) :wink:

Posté : 14 déc. 2005, 13:25
par Cyrano
Pourquoi un type VARCHAR quand un type TIME serait plus approprié: les fonctions de calcul intégrés dans le SQL pour les données de type dates et heures seront infinitment plus pratique et plus rapides.

Posté : 14 déc. 2005, 15:45
par Invité
Très bien,

merci pour cette info. Je pense en effet que cela devrait etre plus facil en type TIME.
Cepandant, je n'ai pas trouvé de scripts permettant d'additionner ces valeurs a partir d'autres valeurs présentes dans une autre table... :-#

Posté : 14 déc. 2005, 15:56
par Cyrano
Voilà de quoi faire sur les fonctions disponibles avec MySQL sur la manipulation du temps

Posté : 14 déc. 2005, 17:08
par jemflight
Du coup, je me suis inscrit ce sera plus simple...

Merci pour ce lien mais je n'ai pas compris grand chose pour tout avouer.
Cependant, voilà ce que j'ai trouvé: Peut-on imaginer un script qui s'articulerait de cette façon ?

<?
$valeur1 = ce qui a été rentré dans le forulaire;
$valeur2 = ce qui est présent dans la colonne de l'autre table;

$addition = $valeur1 + $valeur2;

echo "$addition.";
?>

Cela devrait me permettre non seulement d'afficher la valeur rentré dans le formulaire ajoutée à celle déjà présente dans la 1ere table mais aussi d'afficher simplement la valeur rentrée dans le formulaire dans la seconde table.

En espérant avoir bien compris...

Posté : 14 déc. 2005, 18:11
par Cyrano
Tu as dans les fonctions SQL TIME_TO_SEC() qui te permet de transformer une heure en nombre de secondes. Si tu l'utilises, tu as alors une donnée sur laquelle tu peux appliquer des opérations mathématiques aussi simples qu'une addition. Suppose maintennt que tu transformes la donnée du formulaire en nombre de secondes également par programmation : tu peux maintenant créer l'addition dans ta requête d'insertion. Tu me diras avec raison que le champ de type TIME n'acceptera pas une valeur numérique . il faut donc transformer le résultat en heure : tu peux le faire avec la fonction inverse SEC_TO_TIME(). Ce qui donne au final une requête donc la structure générale ressemblerait à ceci:
$secondes = "valeur du formulaire transformée en secondes";
$sql = "INSERT INTO ta_table (ton_champ_heure) 
VALUES (SEC_TO_TIME(TIME_TO_SEC(ton_champ_heure) + ". $secondes ."))";

Posté : 18 déc. 2005, 20:11
par jemflight
Donc si je comprend bien:

Je transforme les heures en secondes pour avoir un nombre entier
J'additionne cette valeur à celle présente dans la base de données
(Je dois aussi transformer la valauer dans la BDD ?)

Posté : 19 déc. 2005, 11:47
par mere-teresa
Donc si je comprend bien:
Je transforme les heures en secondes pour avoir un nombre entier
J'additionne cette valeur à celle présente dans la base de données
Oui, c'est le principe.

Posté : 19 déc. 2005, 13:01
par Min's
Et si tu veux vraiment le faire en texte, tu peux toujours prendre ceci : http://www.nexen.net/scripts/details.php?scripts=875 et l'adapter à tes besoins... (Le script a presque 3 ans mais devrait toujours fonctionner je pense... et là, il fait juste un - mais ya surement moyen de le bidouiller :) ) :oops:

Posté : 24 déc. 2005, 11:26
par jemflight
Re bonjour tout le monde.

Je ne suis toujours pas parvenu à réaliser cet aspect.
Pour dire clair: Je galère grave...
Des ames généreuses pour m'aider en cette période de fête, lol ?

Voilà mon code:

Code : Tout sélectionner

$secondes = "(TIME_TO_SEC($duree))"; // valeur du formulaire transformee en secondes $sql2 = "INSERT INTO pilotes SELECT * FROM pilotes WHERE callsign LIKE $callsign VALUES (SEC_TO_TIME(TIME_TO_SEC($duree) + ". $secondes ."))";
Merci

Posté : 24 déc. 2005, 16:53
par jemflight
J'ai finalement, décider, sur conseil de qqn, de faire une requete UPDATE.
Elle se présente de cette manière mais ne fonctionne pas.

QQn aurait une idée svp ?
$secondes = "(TIME_TO_SEC($duree))"; // valeur du formulaire transformee en secondes
$sql2 = "UPDATE pilotes SET heures='(SEC_TO_TIME(TIME_TO_SEC($duree) + ". $secondes ."))' WHERE callsign='$callsign'";

$result = mysql_query($sql2)
	or die ("Execution de la requete du calcul impossible");

Posté : 27 déc. 2005, 12:47
par jemflight
Je ne sais toujours pas comment faire pour additionner mes deux valeurs...
Snif, je commence à déprimer et j'ai la vague impression d'être nul :cry:

Posté : 27 déc. 2005, 13:05
par pjl
Ca ne marche pas ? c'est à dire ? Il y a un message d'erreur ou pas ?

Posté : 27 déc. 2005, 15:22
par jemflight
En fait voila ce qui se passe:

Quand le membre rentre par exemple 03:00:00 dans le formulaire et que la valeur présente dans l'autre table est égale à 00:00:00, la mise à jour se passe sans encombre.

Cependant, au deuxième essai, si le membre veut rajouter 02:00:00, la valeur 02:00:00 remplace alors la valeur 03:00:00 au lieu de faire le calcul et d'afficher 05:00:00.

Cela doit surement venir du fait qu'il n'y a pas de requete pour transformer la valeur qui se trouve dans ma 1ere table (00:00:00) en secondes.

Voila mon script mais je ne sais pas comment faire pour que l'addition se passe:
// ajout du nombre d'heures dans la base pilotes
$secondes = "(TIME_TO_SEC($duree))"; // valeur du formulaire transformee en secondes
$sql2 = "UPDATE pilotes SET heures='(SEC_TO_TIME(TIME_TO_SEC($duree) + ". $secondes ."))' WHERE callsign='$callsign'";