IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Citation aléatoire par jour


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Citation aléatoire par jour
    bonjour à tous,

    J'ai une base de données MySQL avec une table CITATION de 5 champs


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE `citation` (
      `id_citation` int(11) NOT NULL AUTO_INCREMENT,
      `citation` text,
      `auteur` varchar(255),
      `date` date,
      `is_active` tinyint(4),
      PRIMARY KEY (`id_citation`)
    );


    Je souhaite afficher aléatoirement une citation par jour et ne pas ré-afficher la même citation le lendemain ou un autre jour, avant que toutes les autres citations présentes soient déjà affichées.

    J'ai pensé à un champ is_active pour (0/1) pour garder la trace de celles qui ont été déjà activé (avant de les remettre toutes à zéro)

    mais je n'ai pas d'idée de comment faire pour garder la même citation tout au long de la journée, et quand je dois changer la citation avec ce qui implique de la mettre à 1.


    pour récupérer une citation à la fois j'ai fais ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        $requete = mysql_query("SELECT id_citation, citation, auteur FROM citation WHERE is_active=0 ORDER BY RAND() LIMIT 1");
        $data = mysql_fetch_assoc($requete);
     
    	echo'Citation de '.$data['auteur'].' : "'.$data['citation'].'"';


    mais pour le reste si vous aviez déjà eu affaire a ça ou si vous avez des idées n’hésitez pas à donner votre avis, merci d'avance.

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    tu as une option dans mysql ou/et dans php qui donne le numéro du jour dans l'année ou du nombre de jour écoulé depuis ta naissance.

    ce nombre modulo le nombre de citation => ça te donne l'indice de la citation.

    tu récupères la citation d'indice trouvé !

    ensuite si tu te débrouilles pour pas voir de trop dans la numérotation des citations c'est plus direct encore.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Une autre solution serait d'enregistrer dans une table à part autant de citations qu'il y a de jours dans 1 année (~365).
    Une table, 2 champs : id_citation | date

    Puis il suffit de récupérer la citation du jour (par rapport à la date en court bien sûr).

    On peu très bien garder ça plusieurs années, au bout d'un an, pas grand monde remarquera que les mêmes reviennent au bout d'un an (il suffit de ne pas tenir compte de l'année).
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  4. #4
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    c'est un cas particulier avec un modulo 366, faut tenir compte des années bissextile.

    sinon tu peux stocker dans une variable sérialiser le code de la citation du jour, variable sérialisé que tu rafraichis une fois par jour par cron.
    Pour le rafraichissement tu peux stocker le nombre de fois que la citation a été affichée et faire un tirage avec une probabilité inversement proportionnelle a sa fréquence d'apparition.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  5. #5
    Inactif
    Homme Profil pro
    Marchand de glace
    Inscrit en
    Mai 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Marchand de glace
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2012
    Messages : 88
    Points : 101
    Points
    101
    Par défaut
    Je trouve ton idée de base pas mal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        $requete = mysql_query("SELECT id_citation, citation, auteur FROM citation WHERE is_active=0 ORDER BY RAND() LIMIT 1");
    if(mysql_num_rows($requete)==0){
    UPDATE le champs is_active à 0
    //Refaire la requete pour recuperer un resultat
    }else{
        $data = mysql_fetch_assoc($requete);
        echo'Citation de '.$data['auteur'].' : "'.$data['citation'].'"';
    }

  6. #6
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Points : 8 040
    Points
    8 040
    Par défaut
    Au lieu d'un champs is_active, tu mets un champs Date.

    Tu récupères la citation à la date du jour si il y en a une. Si il n'y en a pas, tu la récupères parmi celles qui n'ont pas de Date renseignées et tu affectes la Date du jour à cette citation et tu l'utilises.

    Si toutes les citations ont été utilisées, tu vides la colonne Date et tu en prends une au hasard.
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

Discussions similaires

  1. [WS 2003] Windows serveur 2003 problème de login pour un poste aléatoire par jour.
    Par zools dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 13/01/2015, 14h44
  2. Un PC au prix d'un café par jour : Le retour !!
    Par netah25 dans le forum Ordinateurs
    Réponses: 34
    Dernier message: 21/02/2006, 23h29
  3. Entrée aléatoire par jour SQL/ASP
    Par glidez dans le forum ASP
    Réponses: 3
    Dernier message: 28/09/2005, 17h17
  4. [Petite requête] Nombre de transactions par jour
    Par Braim dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/04/2003, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo