Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
539 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°134226
ludo2604
kitsch' me if u can
Posté le 03-05-2002 à 17:11:54  profilanswer
 

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!  
mood
Publicité
Posté le 03-05-2002 à 17:11:54  profilanswer
 

n°134229
greg@frees​tarthu
Posté le 03-05-2002 à 17:15:42  profilanswer
 

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^/
n°134256
ludo2604
kitsch' me if u can
Posté le 03-05-2002 à 18:03:04  profilanswer
 

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!  
n°134258
greg@frees​tarthu
Posté le 03-05-2002 à 18:03:53  profilanswer
 

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^/
n°134259
ludo2604
kitsch' me if u can
Posté le 03-05-2002 à 18:05:13  profilanswer
 

tu peux pas m'aider plus ?


---------------
Make Portraits, Not War!  
n°134263
greg@frees​tarthu
Posté le 03-05-2002 à 18:21:33  profilanswer
 

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^/
n°134278
SquiiiD
be cool !
Posté le 03-05-2002 à 18:36:57  profilanswer
 

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+

n°134288
ludo2604
kitsch' me if u can
Posté le 03-05-2002 à 18:54:23  profilanswer
 

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!  
n°134291
greg@frees​tarthu
Posté le 03-05-2002 à 19:01:48  profilanswer
 

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^/
n°134294
ludo2604
kitsch' me if u can
Posté le 03-05-2002 à 19:05:51  profilanswer
 

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!  
mood
Publicité
Posté le 03-05-2002 à 19:05:51  profilanswer
 

n°134298
greg@frees​tarthu
Posté le 03-05-2002 à 19:07:22  profilanswer
 

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^/
n°134303
SquiiiD
be cool !
Posté le 03-05-2002 à 19:15:00  profilanswer
 

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]

n°134307
greg@frees​tarthu
Posté le 03-05-2002 à 19:19:34  profilanswer
 

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^/
n°134308
SquiiiD
be cool !
Posté le 03-05-2002 à 19:21:51  profilanswer
 

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.

n°134309
SquiiiD
be cool !
Posté le 03-05-2002 à 19:22:44  profilanswer
 

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

n°134322
ludo2604
kitsch' me if u can
Posté le 03-05-2002 à 19:48:41  profilanswer
 

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!  
n°134324
Je@nb
Kindly give dime
Posté le 03-05-2002 à 19:54:20  profilanswer
 

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.

n°134325
Je@nb
Kindly give dime
Posté le 03-05-2002 à 19:57:02  profilanswer
 

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

n°134340
ludo2604
kitsch' me if u can
Posté le 03-05-2002 à 21:39:44  profilanswer
 

rho bah laquelle est la meilleur jsais plus moi :p


---------------
Make Portraits, Not War!  
n°134372
SquiiiD
be cool !
Posté le 03-05-2002 à 23:22:03  profilanswer
 

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+

n°134384
ludo2604
kitsch' me if u can
Posté le 03-05-2002 à 23:40:41  profilanswer
 

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!  
n°134424
SquiiiD
be cool !
Posté le 04-05-2002 à 09:59:21  profilanswer
 

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]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[HTML - PHP] Traitement Formulaire[Apache - PHP - Oracle] Compilation
[PHP] c koi la syntaxe exacte ?? [Nouvelle Requete][PHP][html] Je peux récuperer la valeur d'un input (html) dans du PHP?
[PHP] pb de passage de variable avec header[PHP-SQL] Problème avec la fonction "time"
Passage de variables Php[PHP]Nom de variable variable
PHP : besoin d'aide...[FLASH-PHP] Intégration de php dans flash
Plus de sujets relatifs à : [PHP] au hasard mais toutes les 24h...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR