> Tous les forumsForum des Webmasters

 Affichage php/mysql en fonction de la dateSujet résolu
Statut du sujet : RESOLU Imprimer
 Didou91
  Posté le 24/01/2006 @ 18:48  
 Petit astucien

41 Messages
Bonjour, J'ai une page "conseil du mois" dans laquelle je met de nouvelles infos chaque mois (ces infos sont dans une base mysql). a ce jour j'ajoute les infos dans la bdd le 1er jour de chaque mois... et ca fonctionne. mais je voudrais creer 2 ou 3 mois d'avance et dire a php de les afficher en fonction de la date. est ce possible? par exemple: si je cree le conseil du mois de fevrier dans la bdd, il va etre selectionné dans la requete et s'afficher (mais il faudrait qu'il ne s'affiche qu'a partir du 01/02/2006 et qu'il reste sur janvier jusqu'au 31/01/2006). voila ma page conseils.php [code] <?php $chemin = '../acces/'; require $chemin . 'acces.php' ; mysql_connect("$host", "$login", "$password") or die("Impossible de se connecter à la base de données"); mysql_select_db("$base"); ?> <?php $conseil = htmlentities(isset($_POST['conseil'])?$_POST['conseil']:""); ?> <div align="center"> <h3>~~ CONSEIL DU MOIS ~~</h3> </div> <form method="post"> <select name="conseil"> <?php $sql="SELECT mois FROM conseils ORDER BY `id` DESC "; $opt=mysql_query($sql); while($row = mysql_fetch_row($opt)) { if ($_POST['conseil'] == $row[0]) { echo '<option selected="selected">'.($row[0]).'</option>'; } else { echo '<option>'.($row[0]).'</option>'; } } ?> </select> <input type="submit" value="Valider"> <?php $reponse = mysql_query("SELECT * FROM conseils WHERE mois='$conseil'"); while ($donnees = mysql_fetch_array($reponse) ) { ?> </p> <table width="75%" border="2" class="texte"> <!--DWLayoutTable--> <tr> <td align="middle" valign="middle"><? echo $donnees['mois']; ?></td> </tr> <tr> <td colspan="2" align="middle" valign="middle"><? echo $donnees['contenu']; ?></td> </tr> </table> </form> <?php } mysql_close(); ?> [/code] je suppose qu'il faut ajouter un champ "date_affichage" (par exemple) dans la base pour que ca marche.. mais apres ?? Merci d'avance.
 Afficher le profil de Didou91Envoyer un message privé à Didou91
 
 
Publicité
 koala01  Posté le 24/01/2006 à 20:44  
Astucien

4715 Messages
Salut, Tu dois effectivement créer un champs de type "date" (que je vais nommer ici date_parution) dans la table, et modifier très légèrement la requete SQL… Il faut savoir qu'il y a moyen de déterminer la date et l'heure actuelle (en réalité, le nombre de secondes qui se sont écoulées entre le premier janvier 1978 (je crois) et la seconde présente) avec la fonction time() … Partant de là, tu peux formater la date et l'heure précise avec la fonction date()… Le format date de mysql est au format "AAAA-MM-JJ" (quatre chiffre pour l'année, un trait d'union, deux chiffres pour le mois, un trait d'union et deux chiffres pour le jour)… la création d'une variable (today, dans l'exemple) sous la forme de [code] $today=date("Y-m-d",time()); [/code] te fournira donc une chaine de caractère dans le bon format… La modification de ta requete à apporter sera alors de mettre une condition sur le champs date_parution sous la forme de [code] SELECT * from table where date_parution>$today <ordre de tri> [/code], et cela devrais meme te permettre de mettre tous les mois dans une seule et meme table… Il te suffira d'utiliser cette requete de base pour faire afficher les nouvelles dont la date de parution est bonne… Tu pourrait meme, d'ailleurs, encore modifier un tout petit peu la requete de manière à ne sélectionner que les requetes qui se sont pas vieilles de plus de, mettons, 90jours (90 jours étant égaux à 90x24*3600=7 776 000 secondes), voire, en les triant de manière descendante, ne sélectionner que le N dernieres nouvelles (en utilisant le mot cle LIMIT)

Modifié par koala01 le 24/01/2006 20:45
Afficher le profil de koala01 Voir la configuration de koala01Envoyer un message privé à koala01
  Revenir en haut de la page
 biliejoe  Posté le 24/01/2006 à 20:46  
Petit astucien

167 Messages
en réalité, le nombre de secondes qui se sont écoulées entre le premier janvier 1978 (je crois)
Depuis le 1 janvier 1970 !
Afficher le profil de biliejoe Voir la configuration de biliejoeEnvoyer un message privé à biliejoe
  Revenir en haut de la page
 koala01  Posté le 24/01/2006 à 20:55  
Astucien

4715 Messages
biliejoe a écrit :
en réalité, le nombre de secondes qui se sont écoulées entre le premier janvier 1978 (je crois)
Depuis le 1 janvier 1970 !
Juste… j'hésitais, mais, d'une certaine manière, ca n'a que peut d'importance, dans le cas qui nous intéresse [clindoeil]
Afficher le profil de koala01 Voir la configuration de koala01Envoyer un message privé à koala01
  Revenir en haut de la page
 biliejoe  Posté le 24/01/2006 à 20:59  
Petit astucien

167 Messages
loul ui masi sa me demangé je m'excuse pour le derangement occasioné !! [rougir]
Afficher le profil de biliejoe Voir la configuration de biliejoeEnvoyer un message privé à biliejoe
  Revenir en haut de la page
 koala01  Posté le 24/01/2006 à 21:05  
Astucien

4715 Messages
Ohhh ca ne me dérange nullement… Tu as, selon moi, eu tout à fait raison de relever l'erreur [clindoeil]… des fois que quelqu'un veuille effectuer un calcul précis (et principalement basé sur des dates antérieures au 1/1/1970)… Mais d'un autre coté, sur ce post-ci, l'erreur ne portait pas à conséquence [clindoeil]
Afficher le profil de koala01 Voir la configuration de koala01Envoyer un message privé à koala01
  Revenir en haut de la page
 Didou91  Posté le 24/01/2006 à 22:17  
Petit astucien

41 Messages
Je viens de tester et ca marche.... presque. en fait ca fonctionne bien mais ca prend en compte la date du pc et non du serveur. ce qui fait que si on change la date du pc, on a acces au conseil du mois suivant. je vais me pencher un peu plus la dessus. j'ai une question: quelle est la difference entre: $today=date("Y-m-d",time()); et $today=date("Y-m-d"); comme j'utilise la date est ce que je dois quand meme laisser "time" ? j'ai testé avec et sans... et ca fonctionne dans les 2 cas. Je te remercie pour la reponse detaillee que tu m'as fait car elle me permet d'avancer.
Afficher le profil de Didou91Envoyer un message privé à Didou91
 Revenir en haut de la page
 Didou91  Posté le 24/01/2006 à 22:41  
Petit astucien

41 Messages
Encore moi... En fait ca marche TRES BIEN. je viens de tester chez mon hebergeur et c'est ok... j'ai realisé que ca changait avec la date du pc car j'etais avec easyphp... Un grand merci encore.
Afficher le profil de Didou91Envoyer un message privé à Didou91
 Revenir en haut de la page
 koala01  Posté le 24/01/2006 à 22:47  
Astucien

4715 Messages
Ben, fatalement, quand tu travailles en local, la date du pc est celle du "serveur"… Mais, cette limite imposée, il faut savoir que, de toutes facon, le visiteur n'a pas acces à ce qui se passe du coté serveur… Tout au plus, peut il essayer de découvrir une faille laissée par le webmaster [clindoeil]
Afficher le profil de koala01 Voir la configuration de koala01Envoyer un message privé à koala01
  Revenir en haut de la page
 koala01  Posté le 24/01/2006 à 22:56  
Astucien

4715 Messages
Ce qu'il y a au sujet de date(), c'est que, meme si le deuxième argument est "implicite" (autrement dit: il a une valeur fixée d'office si on ne le fournit pas), il est possible de le mettre… Si au lieu d'écrire [codee]date("Y-m-d",time());[/code], tu écrivais [code]date("Y-m-d H:i",2682000);[/code] tu obtiendrait "31/01/1970 01:00" (le 31 janvier 1970 à 01h AM)… Ayant l'habitude de gérer des dates qui ne sont pas celle du jour, mais basée sur un nombre de seconde, j'ai rajouté le time() sans trop y penser… Ceci dit, l'une des solutions envisageable (et sans doute moins gourmande en espace dans la BDD) est effectivement d'utiliser le type "bigint" pour la date (chose qu'il m'arrive de temps en temps de faire)
Afficher le profil de koala01 Voir la configuration de koala01Envoyer un message privé à koala01
  Revenir en haut de la page
 Didou91  Posté le 24/01/2006 à 23:57  
Petit astucien

41 Messages
je continuerai mes tests mais ca a l'air de bien fonctionner. Merci beaucoup pour tes explications. je comprend un peu mieux.[bigsmile]
Afficher le profil de Didou91Envoyer un message privé à Didou91
 Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte




Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsForum des Webmasters

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page