|
| 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.
|
| |
| |
| 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 |
| |
|
| 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 ! |
| |
|
| 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] |
| |
|
| 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] |
| |
|
| 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] |
| |
|
| 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.
|
| |
|
| 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. |
| |
|
| 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] |
| |
|
| 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) |
| |
|
| 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]
|
| |
|
|
| Haut de la page |