au hasard mais toutes les 24h... [PHP] - PHP - Programmation
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
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
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
Marsh Posté le 03-05-2002 à 18:05:13
ReplyMarsh 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
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+
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...
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...
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
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 |
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]
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
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.
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 !!!!!!
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 ?
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.
Marsh Posté le 03-05-2002 à 21:39:44
ReplyMarsh 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+
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
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]
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!