Jouer avec les dates avec PHP

Jouer avec les dates avec PHP - PHP - Programmation

Marsh Posté le 24-10-2005 à 17:13:28    

Bonjour!
J'ai plusieurs tables et pour l'instant je stockais les date en VARCHAR(10) au fomat suivant j-m-A (exemple: 01-12-2004).
Mais maintenant j'aimerais faire un test afin d'afficher les contrats vieux de 10 mois... Mais je  m'en sors plus. Voici mon code:

Code :
  1. $datsyst= mktime(0 ,0 ,0 ,date("m" ),date("d" ) ,date("Y" ));
  2. $rqt = "SELECT * FROM contrat";
  3. $resultcont = Mysql_Query($rqt) or die ($errReq);
  4. $contdata = mysql_fetch_assoc($resultcont);
  5. while ($ligne = mysql_fetch_array($resultcont))
  6. { extract ($ligne);
  7. $contdate = mktime($contdate);
  8. echo($contdate);echo("---" );echo($datsyst);
  9. if (($contdate + 79200) >= $datsyst)
  10. {
  11. ?>
  12. <form METHOD="POST" ACTION="?modcontrat">
  13. <fieldset>
  14. <label>Num&eacute;ro contrat:</label>
  15. <?echo (html_entity_decode($contdata['contnum']));?><br />
  16. <label>Date contrat:</label>
  17. <?echo (html_entity_decode($contdata['contdate']));?><br />
  18. <label>Num&eacute;ro client:</label>
  19. <?echo (html_entity_decode(utf8_decode($contdata['contclinum'])));?><br />
  20. <label>Num&eacute;ro repr&eacute;sentant:</label>
  21. <?echo (html_entity_decode(utf8_decode($contdata['contrepnum'])));?><br />
  22. </fieldset>
  23. </form>
  24. <?
  25. }
  26. }
  27. mysql_close();
  28. ?>


 
J'ai lu de la doc de partout, sur Nexen, mysql manual etc...  
J'ai la tête qui va exploser!
Merci de votre aide


Message édité par limp15000 le 24-10-2005 à 17:14:16
Reply

Marsh Posté le 24-10-2005 à 17:13:28   

Reply

Marsh Posté le 24-10-2005 à 17:39:01    

arf, ça sent la pelle à clous(tm) ton histoire ...
si tu avais su, tu aurais mis tes dates dans ta db selon un format fait pour, genre DATE_TIME ...
(bah oui s'plus pratique que d'utiliser un tournevis pour attraper des spaghetti)
mais bon ...
 
et pis pourquoi selectionner TOUS les enregistrements de la db si tu n'en veux que certains [:pingouino]
in extenso : déplaces le test de date au niveau de la requête et laisses le serveur de DB faire le tri ...
Donc direction le manuel MySQL, cf le chapitre sur les dates ...
 
et par hasard : >= ça voudrait pas dire "plus grand ou égal à" ?
hmm, tu chercherais pas les contrats du futur, toi ?!? ...

Reply

Marsh Posté le 24-10-2005 à 17:57:21    

LOL,
je vais reprendre les choses tranquillement demain parce que là j'ai eu une rude journée... Au pire je vais modifier et mettre en date...
C'est vrai que ce serait plus simple de trier au niveau de la requête...
Je suis sur la bonne voie, on va mettre ça en pratique demain.
Bonne soirée

Reply

Marsh Posté le 24-10-2005 à 20:51:29    

ben spa terrible la conception à la base, mais maintenant, t'a pu trop le choix (à moins de tout casser).
le moins chiant à mon avis, tu récupère la date système, tu cherche donc la date - 10 mois qui correspond, et tu la met sous la forme "jj-mm'aa" (comme ta BDD), et après tu fait un select uniquement des éléments correspondant...


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 25-10-2005 à 09:15:25    

Pour les dates qui vont servir au traitement, j'ai changé le format dans la base et j'ai trouvé une fonction qui me modifie l'affichage. Maintenant on va faire la requête qui trouve les contrats vieux de 10 mois...  
On verra ce que ça donne...

Reply

Marsh Posté le 25-10-2005 à 10:28:48    

Voilà ça fonctionne:

Code :
  1. <?
  2. /*
  3. ---------------------------------------------------------
  4. Module : Contrat à renouveller
  5. Auteur :  
  6. ---------------------------------------------------------
  7. */
  8. include('lib/connection.lib.php');
  9. include('lib/erreur.lib.php');
  10. include('lib/date.lib.php');
  11. $rqt = "SELECT * FROM contrat WHERE TO_DAYS(NOW()) - TO_DAYS(contdate) >= 360";
  12. $resultcont = Mysql_Query($rqt) or die ($errReq);
  13. while ($contdata = mysql_fetch_assoc($resultcont))
  14. {
  15. ?>
  16. <form METHOD="POST" ACTION="?modcontrat">
  17. <fieldset>
  18. <label>Num&eacute;ro contrat:</label>
  19. <?echo (html_entity_decode($contdata['contnum']));?><br />
  20. <label>Date contrat:</label>
  21. <?echo (html_entity_decode(dateFr($contdata['contdate'])));?><br />
  22. <label>Num&eacute;ro client:</label>
  23. <?echo (html_entity_decode(utf8_decode($contdata['contclinum'])));?><br />
  24. <label>Num&eacute;ro repr&eacute;sentant:</label>
  25. <?echo (html_entity_decode(utf8_decode($contdata['contrepnum'])));?><br />
  26. <input type="submit" name="boutonrenouv" value="Renouveler" />
  27. <input type="hidden" name="numcontrat" value="<?=$contdata['contnum'];?>" />
  28. </fieldset>
  29. </form>
  30. <?
  31. }
  32. mysql_close();
  33. ?>


 
Je cherche maintenant à augmenter l'année de 1 lorsqu'on clique sur le bouton renouveler...
Pour celà j'ai fait une page appeler modcontrat...
Mais je bloque, comment incrémenter seulement l'année sans trop se prendre la tête???

Code :
  1. <?
  2. /*
  3. ---------------------------------------------------------
  4. Module : Renouveller le contrat
  5. Auteur :  
  6. ---------------------------------------------------------
  7. */
  8. include('lib/connection.lib.php');
  9. include('lib/erreur.lib.php');
  10. $contchoisi = $_POST['numcontrat'];
  11. $rqt = "SELECT YEAR(contdate) FROM contrat WHERE contnum='$contchoisi'";
  12. $sql = "UPDATE contrat SET contdate = '' WHERE contnum='$contchoisi' LIMIT 1";
  13.  $sql_results = mysql_query($sql) or die ($errReq);
  14. echo "<div align='center'>";
  15. echo "<font face='verdana' size='3'>Le contrat a bien &eacute;t&eacute; renouvel&eacute;!</font>";
  16. echo "</div>";
  17. ?>

Reply

Marsh Posté le 25-10-2005 à 11:06:02    

Bon j'ai réussi avec la fonction mktime d'incrémenter d'une année...  
J'obtiens un timestamp, maintenant faut que je trouve comment convertir ce timestamp en date et ce sera tout bon ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed