[PHP] au hasard mais toutes les 24h...

au hasard mais toutes les 24h... [PHP] - PHP - Programmation

Marsh Posté le 03-05-2002 à 17:11:54    

salut all,
 
j'arrive bien à selectionner au hasard un enregistrement dans une table et le faire afficher( rand() ) mais maintenant je voudrai que cette enregistrement reste 24 h au lieu de changer à chaque "actualiser" pour qu'au final ca donne:"la citation du jour" par exemple...
 
c'est dur à faire ?
 
voila le code pour ce qui est de l'affichage au hasard si ca peut aider:
 
 
<?php
include ("config" );
?>  
 
<?
 $req_citation = "SELECT * FROM citations ORDER BY rand() LIMIT 1" or die(mysql_error());  
 $result = mysql_query ($req_citation);
$nbrows = mysql_num_rows($result);
if (mysql_num_rows ($result))
{
 $result_object = mysql_fetch_object ($result);
 
 echo $result_object->texte;
 echo $result_object->auteur;
}
 
?>


---------------
Make Portraits, Not War!  
Reply

Marsh Posté le 03-05-2002 à 17:11:54   

Reply

Marsh Posté le 03-05-2002 à 17:15:42    

bah tu sauves quelque part (fichier, db, ...) l'id de la derniere citation que tu as affichée, ainsi que la date, et dans ton script ton verifie que cette date est au meme jour que la date courante, sinon tu rechope une autre citation au hasard
et pour faire beau, tu les sauves toutes pour etre sur d'en selectionner une qui n'a jamais été affichée


---------------
\^o^/ Libérez HotShot \^o^/
Reply

Marsh Posté le 03-05-2002 à 18:03:04    

merci mais c trop theorique !
 
deja, oui c bon j'ai une bdd mysql.
je crée donc une nouvelle table c ca ?
avec les champs: id - date
 
 :??:


---------------
Make Portraits, Not War!  
Reply

Marsh Posté le 03-05-2002 à 18:03:53    

ludo2604 a écrit a écrit :

merci mais c trop theorique !
 
deja, oui c bon j'ai une bdd mysql.
je crée donc une nouvelle table c ca ?
avec les champs: id - date
 
 :??:  




 
oui, pourquoi pas
y'a probablement de meilleures solutions, c'est juste la 1e qui m'est venue a l'esprit :)


---------------
\^o^/ Libérez HotShot \^o^/
Reply

Marsh Posté le 03-05-2002 à 18:05:13    

tu peux pas m'aider plus ?


---------------
Make Portraits, Not War!  
Reply

Marsh Posté le 03-05-2002 à 18:21:33    

ludo2604 a écrit a écrit :

tu peux pas m'aider plus ?  




peut etre, si tu me poses une question précise:)


---------------
\^o^/ Libérez HotShot \^o^/
Reply

Marsh Posté le 03-05-2002 à 18:36:57    

creer une table citation avec les champ suivant :
 
citation (char) - date (int)
 
je te conseil pour te simplifier la vie d'enregistrer dans date , la date au format unix ! cad le nombre de seconde ecoulee depuis le 1 janvier 1970 si je me rapelle bien ca te donne un truc du genre 1012756432
 
dans ton script php tu fait ca :  
 
$timeout=time()-86400 //nombre de secondes dans un jour
if($date_lue_dans_la_bdd<$timeout)
  {
  /* change la citation */  
  }
else
  {
  /* on change rien du tout
  }
 
c pas tres compliquer c comme ca ke je procede moi pource genre de chose a+

Reply

Marsh Posté le 03-05-2002 à 18:54:23    

ah bein voila !
xelent merci je vais voir ça :)
 
mais comment ca se passera dans la table ?
yaura un enregistrement ts les jours ajoutés ou bien juste un qui se remplace ?
parcke dans se cas, un .txt suffirai au lieu de ralentir la bdd pour rien ?
c juste une question hein...


---------------
Make Portraits, Not War!  
Reply

Marsh Posté le 03-05-2002 à 19:01:48    

ludo2604 a écrit a écrit :

ah bein voila !
xelent merci je vais voir ça :)
 
mais comment ca se passera dans la table ?
yaura un enregistrement ts les jours ajoutés ou bien juste un qui se remplace ?
parcke dans se cas, un .txt suffirai au lieu de ralentir la bdd pour rien ?
c juste une question hein...  




ça depend: si tu veux etre sur d'afficher une citation diff. tous les jours, tu dois forcément inscrire qque part toutes celles que tu as deja affichées...


---------------
\^o^/ Libérez HotShot \^o^/
Reply

Marsh Posté le 03-05-2002 à 19:05:51    

bah en fait je pense qu'avec beaucoup d'enregistrements, il y a beaucoup moin de chance de tomber sur la meme 2 fois à la suite alors c pas tres important...
 
pour un id unique que fait mettre pour les champs alors ?
 
merci pour tt en tk ;)


---------------
Make Portraits, Not War!  
Reply

Marsh Posté le 03-05-2002 à 19:05:51   

Reply

Marsh Posté le 03-05-2002 à 19:07:22    

ludo2604 a écrit a écrit :

bah en fait je pense qu'avec beaucoup d'enregistrements, il y a beaucoup moin de chance de tomber sur la meme 2 fois à la suite alors c pas tres important...




ouais mais bon :)
 

ludo2604 a écrit a écrit :

pour un id unique que fait mettre pour les champs alors ?




euh pardon ?
 

ludo2604 a écrit a écrit :

merci pour tt en tk ;)  




 :jap:


---------------
\^o^/ Libérez HotShot \^o^/
Reply

Marsh Posté le 03-05-2002 à 19:15:00    

ca c toi ki vois pour la table ou non moi je t donner la logique :)
sinon moi ce ke je fais pour pas kil y ai deux fois le meme enregsitrement tu ajoutes un champ booléen que tu mets par defaut a la valeur 0. dans la table ou sont contenu les citations. Et tu le SET à 1 kan la citation et selectionnee avec la commande UPDATE table SET champ_booleen=1 WHERE blablabla....
VOila a+

 

[jfdsdjhfuetppo]--Message édité par SquiiiD le 03-05-2002 à 19:16:20--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 03-05-2002 à 19:19:34    

SquiiiD a écrit a écrit :

ca c toi ki vois pour la table ou non moi je t donner la logique :)
sinon moi ce ke je fais pour pas kil y ai deux fois le meme enregsitrement tu ajoutes un champ booléen que tu mets par defaut a la valeur 0. dans la table ou sont contenu les citations. Et tu le SET à 1 kan la citation et selectionnee avec la commande UPDATE table SET champ_booleen=1 WHERE blablabla....
VOila a+  
 
 




 
euh oui, c mieux que de creer une table separée dans ce cas il me semble:) mea culpa:)


---------------
\^o^/ Libérez HotShot \^o^/
Reply

Marsh Posté le 03-05-2002 à 19:21:51    

tu veux dire que tout va se passer dans le txt ou alors tu sauves uniquement la citation selectionnée dans le TXT ?  
Perso je pense que ton code serait moins lourd et moins complexe si tu fais ca uniqement par requete SQL, et en reflechissant un peu tu peux n'utiliser qu'une seule table avec tout cela en ayant comme champ :  
 
citation(char ou text) , date(int) , selectionné (bool), deja_utilisé (bool)
 
a toi de faire le code approprié pour gerer ca.

Reply

Marsh Posté le 03-05-2002 à 19:22:44    

hum.. tu as repondu a une de mes question avant ke je la poste t'es devin toi !!!!!!
 :)

Reply

Marsh Posté le 03-05-2002 à 19:48:41    

bah oui, je voulai en fait sauver la citation du jour dans .txt
le lendemain elle se remplace pa une autre etc..
 
mais si tu dis que c'est trop lourd bah je vais faire requete SQL.
 
dak je vais essayer ca mais c koi les trucs de bool ?


---------------
Make Portraits, Not War!  
Reply

Marsh Posté le 03-05-2002 à 19:54:20    

Moi je ferais pas comme ça :
j'afficherai pas o hasard si il i en a bcp mais les unes à la suites des autres et revenir o début.
tu prend la date unix avec time() et tu prend le n° de jour écoulé avec cette date : time()/(60*60*24) et tu ora le nombres de jours écoulé depuis le 1/01/70 (timestamp unix).
Après tu fais un mod (reste d'une division) par le nombre de citation dans ta table : $sql = "COUNT * FROM citations"
Comme ça ça affichera chaque jour une citation et qd la liste sera finite ça affichera la première et ça repart.

Reply

Marsh Posté le 03-05-2002 à 19:57:02    

fait un round ou tonque pour le time()/(60*60*24)

Reply

Marsh Posté le 03-05-2002 à 21:39:44    

rho bah laquelle est la meilleur jsais plus moi :p


---------------
Make Portraits, Not War!  
Reply

Marsh Posté le 03-05-2002 à 23:22:03    

Bha oui mais ca c pas a nous de decider c a toi de voir si tu veux ke ca soit aleatoire ou non, mais si tu comptes n'afficher qu'une seule fois une citation c clair que c pas utile de faire ca aleatoirement, bon nous on ta expliqué comment faire a toi de faire ce qui t'arrange le mieu :)  
 
Voila  a+

Reply

Marsh Posté le 03-05-2002 à 23:40:41    

je vais rester sur l'aleatoire dans une table.
 
je fais donc ma table
citation (char) - date (int)  
 
mais je crois qu'on a oublié une etape, comment ajouter cette enregistrement aleatoire dans cette table:
 
je selectionne $lenregistrement dabord.
 
ensuite j'insere$lenregistrement c ca ?
 
*desole de dembeter le monde encore  :wahoo:


---------------
Make Portraits, Not War!  
Reply

Marsh Posté le 04-05-2002 à 09:59:21    

Oui c  ca,
mais comme j'ai dis plus haut y a moyen de faire ca en une seule table avec 4 champs et meme mieu avec 3 champs!
 
un champ citation(char ou text) dans le quel tu enregistres toutes tes citations, date(int) que tu updates si la citationest tiree au sort et tu y enregistre le temps unix, selectionné (bool) qui est a zero pour tout les champ et a 1 pour le champ ki a ete selectionné, deja_utilisé (bool) et le dernier si le enregistrement a deja ete tiré il est a 1 sinon à zero, mais a la limite il est facultatif car tu peux savoir si l enregistrement a deja ete tirer avec la date, si il y a une date unix dans le champ date ca veut forcement dire kil a ete tiré deja!
 
voila j'espere ke c clair donc avec 3 champs et une table  tu t'en sort.
 
dans ton code php :  
 
$timeout=time()-86400 //nombre de secondes dans un jour  
if($date_lue_dans_la_bdd<$timeout)  
 {  
 /* Ici tu met tout le champ selected a 0 et tu envois ta requete pour tirer  un nouvel enregistrement au sort, et tu met le champ selected à 1 pour celui ki est tiré. Dans ta requete precise que tu ne veux pas que ca soit un enregistrement ou la date est > 0 ( donc ki contient deja un temps unix enregistré )
 */  
 
 }  
else  
 {  
 /* on change rien du tout  
 }  
 
et ici tu affiche la requete qui a le champ selected a 1
SELECT * FROM citation WHERE selected=1
 
tu affiches et le tour est joué
 
a+

 

[jfdsdjhfuetppo]--Message édité par SquiiiD le 04-05-2002 à 10:01:08--[/jfdsdjhfuetppo]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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