Page 1 sur 2
fonction ADDTIME
Posté : 25 déc. 2005, 15:26
par jemflight
Bonjour,
Je cherche actuellemeny à réaliser un script pour additionner des valeurs horaires depuis des informations remplies dans un formulaire par les visiteurs de mon site.
Savez-vous si la fonction mysql ADDTIME peut m'aider dans ce sens en sachant que mon code est en php ?
J'espere que ma question est claire étant donné que je suis assez novice dans ce domaine.
Merci et bonnes fetes à tous
Posté : 25 déc. 2005, 18:30
par alexbad
Tu veux par exemple ajouter 309 à une donnée dans la base?
<?
mysql_query("UPDATE table SET champ+309");
?>
Sur laquelle rien de t'empêche d'ajouter des critères WHERE et LIMIT.
Sinon je comprends pas la question.
Posté : 25 déc. 2005, 19:04
par jemflight
En gros:
Des joueurs en réseau envoient le nombre d'heures qu'ils ont joué en réseau (valeur TIME se présentant sous forme de 00:00:00) sur une table 1.
Je voudrais ajouter cette valeur à leur heures déjà effectuées présente sur une table 2.
Je ne sais pas si ADDTIME peut me permettre cela...
Sinon, on m'a aussi conseillé de faire un TIME_TO_SEC puis SEC_TO_TIME
mais je n'y suis aps arrivé.
Voila ce que je viens d'essayer mais ça ne marche pas. Il se peut que ce soit complètement illogique >> Je débute un peu...
$request = "SELECT ADDTIME ('SELECT heures FROM pilotes WHERE callsign LIKE $callsign', '$duree')";
echo $request;
$result = mysql_query($request)
or die ("Execution de la requete du calcul impossible");
Posté : 25 déc. 2005, 19:18
par alexbad
Et tu peux extraire le nombre de secondes total à partir de 00:00:00? Supposons que oui, tu aurais qu'à enregistrer le nombre de seconde qu'ils ont joués, ensuite, tu peux récupérer sous la forme 00:00:00 avec la fonction date() de php:
<?
mysql_connect("localhost", "root", "");
mysql_select_db("database");
$retour = mysql_query("SELECT * FROM table");
while($donnees = mysql_fetch_array($retour))
{
echo date('H:i:s', $donnees['nbre_en_secondes']);
}
mysql_close();
?>
Pour récupérer le nombre de secondes qu'un joueur a joué en secondes, il te suffit de lui donner trois champs collés:
Code : Tout sélectionner
<form action="page.php" method="post">
<input type="text" name="heure" />
<input type="text" name="minute" />
<input type="text" name="seconde" />
<input type="submit" value="Soumettre" />
</form>
Ensuite, voici le code de la page qui reçoit ces données:
page.php:
<?
$heure = $_POST['heure'];
$minute = $_POST['minute'];
$seconde = $_POST['seconde'];
$temps_total = $seconde + ($heure * 3600) + ($minute *60);
$joueur = "Marc";
//Ici, tu peux faire un UPDATE pour ajouter à son temps total
mysql_connect("localhost", "root", "");
mysql_select_db("database");
mysql_query("UPDATE joueurs SET temps + $temps_total WHERE joueur='$joueur'");
mysql_close();
?>
Ça devrait résoudre ton problème, si tu as des questions sur le fonctionnement du script, pose les

Posté : 25 déc. 2005, 21:08
par jemflight
Pour etre franc, j'étais plutot parti sur une base comme suit :
$request = "SELECT ADDTIME ('$heures', '$duree')";
echo $request;
$result = mysql_query($request)
or die ("Execution de la requete du calcul impossible");
$heures étant:
$heures = "SELECT heures FROM pilotes WHERE callsign IN ('$callsign')";
La requete fonctionne tres bien via phpMyAdmin par exemple mais un fois la requete lancé, ça ne marche pas. Voici l'echo:
SELECT ADDTIME ('SELECT heures FROM pilotes WHERE callsign IN ('SKT050')', '03:00:00')Execution de la requete du calcul impossible
$duree est bien trouvé (03:00:00) mais pas $heures....
Je comprend pas

Posté : 25 déc. 2005, 22:01
par ouckileou
Salut,
je pense que tu utilises mal la fonction. Si as dans ta table une colonne "temps_de_jeu", à laquelle tu veux ajouter 3h et récupérer le résultat, cela se fera comme ceci :
Code : Tout sélectionner
SELECT ADDTIME(duree_de_jeu, "03:00:00") AS nouveau_temps FROM laTable
tu récupèreras le résultat dans une colonne "nouveau_temps", que tu pourras utiliser dans un tableau associatif avec mysql_fetch_array par exemple.
C'est une fonction à appliquer à une colonne, pas besoin d'essayer d'imbriquer des requêtes comme tu l'as fait
Et si tu voulais conserver le résultat dans ta table :
Code : Tout sélectionner
UPDATE laTable SET temps_de_jeu = ADDTIME(temps_de_jeu, "03:00:00");
Posté : 25 déc. 2005, 22:09
par jemflight
J'ai rien compris !
On dirait que ça ne fait déplacer le problème puisque l'addition doit quand meme avoir lieu.
De plus, j'aimerais éviter de rajouter une colonne dans ma table.
Je crois que cela ne marche pas car la fonction ADDTIME doit additionner des valeurs TIME et le fait d'aller chercher une valeur dans une autre table fais 1 bug
Posté : 25 déc. 2005, 22:14
par ouckileou
Ok je n'avais pas vu que le temps à ajouter était dans une autre table.
Mais il n'étais pas question de rajouter une colonne je n'avais pas vu ça.
Alors pourquoi ne pas faire ça par étape ?
1 - récupération du temps de jeu (requête SQL)
2 - on met le résultat dans une variable
3 - avec cette variable on crée par PHP la requête qui va mettre à jour l'autre table
4 - on exécute cette requête
C'est le principe de tes 2 requêtes mélangées mais une étape à la fois.
Posté : 26 déc. 2005, 01:40
par jemflight
Oui, j'ai déjà essayé qqch comme ça du genre
$sql = SELECT heures FROM pilotes WHERE callsign IN ($callsign);
$result = mysql_query($sql);
puis je faisais l'addition
SELECT ADDTIME ('$sql','$duree');
Enfin qqch comme ça à quelques erreurs pret

Mais ça n'a pas marché.
Je sens que je suis pret du but mais qqch manque...
Posté : 26 déc. 2005, 02:04
par ouckileou
Oui effectivement tu n'est pas loin.
Là tu lui passes directement le code SQL de la requête, et tu as constaté que ça ne marchait pas.
Donc exécute cette première requête, récupère la valeur avec PHP, et passe cette valeur à la deuxième requête.
1 - première requête : récupération du temps
2 - exécution, récupération dans une variable PHP (mysq_query, mysql_fetch_array -> $variable)
3 - création dynamique du code SQL de la deuxième requête, avec insertion de $variable
4 - exécution dela deuxième requête
Par contre c'est vrai que si tu veux faire ça sur pleins de lignes à la fois, c'est pas pratique...
Posté : 26 déc. 2005, 11:37
par jemflight
Donc si je comprend bien:
// récupération du temps dans l'autre table par une requete
$sql = "SELECT heures FROM pilotes WHERE callsign IN ($callsign)";
//Execution et récupération dans une variable PHP
$result = mysql_query($sql)
or die ("Execution de la requete impossible);
while ($heures = mysql_fetch_array($result));
//Execution de la requete 2
$sql2 = "SELECT ADDTIME ('$heures','$duree')";
$result = mysql_query($sql2)
or die ("Execution de la requete 2 impossible");
Posté : 26 déc. 2005, 14:05
par pjl
Je ne comprends rien.
Tu veux modifier des données dans une table et tu fais un SELECT pour ça !!!!!!!!!!!!!!!!!
Posté : 26 déc. 2005, 14:23
par jemflight
Je veux additionner deux valeurs TIME.
L'une vient d'etre récupéré dans un formulaire et l'autre se trouve dans la table1.
j'ai donc essayé la fonction ADDTIME en allant chercher la valeur qui venait d'etre récupérée ($duree) et celle qui se trouve dans la table1.
Tu penses que cela ne convient pas ?
Posté : 26 déc. 2005, 14:31
par ouckileou
ADDTIME additionne effectivement 2 valeurs (date+time) et te renvoie le résultat.
Mais avec un SELECT tu sélectionnes simplement ce résultat, si tu veux mettre à jour une colonne de ta table c'est forcément une requête UPDATE...
Posté : 26 déc. 2005, 15:16
par jemflight
Donc si je comprend bien je selectionne la première valeur, ensuite je fais l'addition et enfin je fais une update du champ ?
Mais le problème est que il ne veut pas additionner la valeur donc je ne peux pas faire l'update