addition d'horaire

Invité
Invité n'ayant pas de compte PHPfrance

14 déc. 2005, 13:23

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.

Mammouth du PHP | 1776 Messages

14 déc. 2005, 13:25

passes du varchar au format adapté (format date, date time, ou encore un int avec le timestamp) :wink:

Mammouth du PHP | 19672 Messages

14 déc. 2005, 13:25

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

14 déc. 2005, 15:45

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... :-#

Mammouth du PHP | 19672 Messages

14 déc. 2005, 15:56

Voilà de quoi faire sur les fonctions disponibles avec MySQL sur la manipulation du temps
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 41 Messages

14 déc. 2005, 17:08

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...
Jean-Mark

Mammouth du PHP | 19672 Messages

14 déc. 2005, 18:11

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 ."))";
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 41 Messages

18 déc. 2005, 20:11

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 ?)
Jean-Mark

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

19 déc. 2005, 11:47

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.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 76 Messages

19 déc. 2005, 13:01

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:
La vie est une maladie mortelle sexuellement transmissible!

Eléphanteau du PHP | 41 Messages

24 déc. 2005, 11:26

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
Jean-Mark

Eléphanteau du PHP | 41 Messages

24 déc. 2005, 16:53

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");
Jean-Mark

Eléphanteau du PHP | 41 Messages

27 déc. 2005, 12:47

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:
Jean-Mark

ViPHP
pjl
ViPHP | 2119 Messages

27 déc. 2005, 13:05

Ca ne marche pas ? c'est à dire ? Il y a un message d'erreur ou pas ?

Eléphanteau du PHP | 41 Messages

27 déc. 2005, 15:22

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'";
Jean-Mark