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

PHP & Base de données Discussion :

Texte aléatoire tous les lundis [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 205
    Par défaut Texte aléatoire tous les lundis
    Bonjour ,

    Sur la page d'accueil du site que je développe actuellement je voudrais afficher un texte aléatoirement tous les lundis.
    je bute sur la manière de procéder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php require_once('infos_connexion.php'); ?>
     
    // requete qui permet d'afficher aléatoirement mon texte
    <?php 
    mysql_select_db($mysql_dbnom, $db);	
        $aleatoire = sprintf("SELECT * FROM compteur_click ORDER BY RAND() LIMIT 1;");
    	$recup_aleatoire = mysql_query($aleatoire, $db) or die(mysql_error());
     
    ?>
     
     
     <?php
    	if (DATE("D") == "Mon" )
    			{
     
    			  while ($tab_aleatoire = mysql_fetch_array($recup_aleatoire)) 
    {
    ?>
    <table>
         <tr>
             <td>
                    <?php echo $tab_aleatoire['description']; ?>
    </td>
    </tr>
    </table>
    <?php
    }
    }
    ?>
    Si je fais ça, Dès que le jour sera un lundi , il va m'afficher aléatoirement un texte.

    Mais plusieurs problèmes se posent du coup:
    -Pendant toute la journée du lundi , le texte va s'afficher aléatoirement a chaque venue sur le site or je voudrais que le meme texte soit afficher tout au long de la journée que soit le lundi à 9h ou à 20h.

    -2ème souci , c'est que si le jour est autre le lundi il n'affiche plus rien , je voudrais qu'il conserve le meme texte que celui du lundi et ce pour toute la semaine.


    J'espère je suis clair dans mles explications.

    Avez vous une idée comment je peux procéder!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Stocke dans ta base l'information sur la phrase aleatoire a utiliser pour la semaine en cours :

    Quand un utilisateur se connecte, tu regardes dans la base si un texte a déjà été défini.
    Si oui, tu l'utilises.
    Si non, tu le définis et marque l'information.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 205
    Par défaut
    Merci pour ta réponse.

    J'ai donc procéder comme suit:

    Dans ma table TEXTES; j'ai rajouté le champs "marque".

    J'ai donc modifié mon code en conséquence;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    // Changement d'astuce tous les lundi 		
    		if (DATE("D")=="Mon")
    			{
    				// Sélection de toutes les astuces marquées à 1
    				mysql_select_db($mysql_dbnom, $db);	
    					$select_marque = sprintf("Select * FROM compteur_click WHERE marque = '1' ; ");
    					$sel_marque = mysql_query($select_marque, $db) or die(mysql_error()); 
    					$tab_sel_marque = mysql_fetch_array($sel_marque );
     
    				// Passage de la marque 1 à la marque 2 pour les astuces marquées à 1 afin d'éviter de réafficher l'astuce de la semaine passée	
    				if ($tab_sel_marque['marque'] =='1')
    				{
    					$id = $tab_sel_marque['ID'];
    					mysql_select_db($mysql_dbnom, $db);	
    					$efface_marque1 = sprintf("UPDATE compteur_click SET marque = '2' WHERE ID ='$id' ; ");
    					$execute_efface_marque1 = mysql_query($efface_marque1, $db) or die(mysql_error()); 
    				}	
     
     
     
    			// Sélection d'une astuce au hasard et différente de la précédente (marqueur :2)
    			$aleatoire = sprintf("SELECT * FROM compteur_click WHERE marque <>'2' AND ID <>'1' ORDER BY RAND() LIMIT 1;");
    			$recup_aleatoire = mysql_query($aleatoire, $db) or die(mysql_error());
    		$tab_aleatoire = mysql_fetch_array($recup_aleatoire);
     
     
    		// Mise à jour de la marque à 1 pour l'astuce sélectionnée au hasard
    			$id=$tab_aleatoire['ID'];
    			 $maj_marque1 = sprintf("UPDATE compteur_click SET marque = '1' WHERE ID ='$id' ; ");
    			$execute_maj = mysql_query($maj_marque1, $db) or die(mysql_error()); 
     
     
    		// Sélection de l'astuce sélectionnée au hazard avec marqueur 1
    			$select = sprintf("SELECT * FROM compteur_click WHERE marque='1' ;");
    			$recup_select = mysql_query($select, $db) or die(mysql_error());
    		// Affichage
    			  while ($tab_select = mysql_fetch_array($recup_select)) 
    {
     
     
     
    ?>
                    <tr>
                      <td width="50" rowspan="3" align="center" valign="middle"><?php echo "<IMG width=\"40\" height=\"40\" src=".$tab_select['image']." />"; ?> </td>
                      <td width="358"></td>
                    </tr>
                    <tr>
                      <td valign="bottom" class="titre_gen_astuce"><?php echo $tab_select['titre_astuce']; ?></td>
                    </tr>
                    <tr>
                      <td valign="top" class="H2"><?php echo $tab_select['categorie']; ?> / <?php echo $tab_select['sous_categorie']; ?></td>
                    </tr>
                    <tr>
                      <td colspan="2"></td>
                    </tr>
                    <tr>
                      <td colspan="2" class="H1"><?php echo $tab_select['description']; ?></td>
                    </tr>
                  <td height="10" colspan="2" class="fond_categorie_accueil_droit"><div align="right"> <img src="/fastoche/images/autres/fleche.gif" alt="" width="38" height="24" align="absmiddle" /> <a href="/fastoche/astuces_informatique_detail.php?ID=<?php echo $tab_select['ID']; ?>"class="H6">Lire l'astuce compl&egrave;te</a> </div></td>
                  </tr>
                             <?php
    						  // Remise à 0 du marqueur de l'astuce prédémment affichée (marquer à 2)
      	$efface_marque = sprintf("UPDATE compteur_click SET marque = '0' WHERE marque ='2' ; ");
    					$execute_efface_marque = mysql_query($efface_marque, $db) or die(mysql_error()); 
     }
     
     
    }
    else
    {
     // affichage pour tous les autres jours de l'astuce marqueur 1 sélectionnée le lundi à minuit
     mysql_select_db($mysql_dbnom, $db);	
    	$select = sprintf("SELECT * FROM compteur_click WHERE marque='1' AND ID <>'1' ;");
    			$recup_select = mysql_query($select, $db) or die(mysql_error());
     
    	  while ($tab_select = mysql_fetch_array($recup_select)) 
    {
     
    ?> <tr>
                      <td width="50" rowspan="3" align="center" valign="middle"><?php echo "<IMG width=\"40\" height=\"40\" src=".$tab_select['image']." />"; ?> </td>
                      <td width="358"></td>
                    </tr>
                    <tr>
                      <td valign="bottom" class="titre_gen_astuce"><?php echo $tab_select['titre_astuce']; ?></td>
                    </tr>
                    <tr>
                      <td valign="top" class="H2"><?php echo $tab_select['categorie']; ?> / <?php echo $tab_select['sous_categorie']; ?></td>
                    </tr>
                    <tr>
                      <td colspan="2"></td>
                    </tr>
                    <tr>
                      <td colspan="2" class="H1"><?php echo $tab_select['description']; ?></td>
                    </tr>
                  <td height="10" colspan="2" class="fond_categorie_accueil_droit"><div align="right"> <img src="/fastoche/images/autres/fleche.gif" alt="" width="38" height="24" align="absmiddle" /> <a href="/fastoche/astuces_informatique_detail.php?ID=<?php echo $tab_select['ID']; ?>"class="H6">Lire l'astuce compl&egrave;te</a> </div></td>
                  </tr>
                             <?php
     
     
     }
     }
     
     
     
      ?>
    Ce qui se passe:

    La manière dont mon programme est codée, si l'utilisateur ne charge pas la page le lundi mais le mardi , il verra toujours par la suite l'astuce de la semaine précédente flaguée à 1.

    De plus si l'utilisateur charge une deuxième fois la page dans la journée du lundi , rebelote ça va lui changer l'astuce encore une fois.

    Que puis-je modifier pour obtenir ce que je souhaite??

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Une autre idée : au lieu d'utiliser une colonne 'marque', tu utilises une colonne 'date_fin', avec un code de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
      //-- on teste s'il existe une ligne dont la date de fin est plus grande
      //-- que la date courante ---------------------------------------------
      $sql = 'SELECT id, image, titre_astuce, categorie, sous_categorie
              FROM compteur_click
              WHERE date_fin >= CURDATE()';
      //-- s'il y a une ligne, on affiche -----------------------------------
      if (mysql_num_rows($result) > 0)
      {
        //-- si une ligne correspond, on affiche ----------------------------
        $result = mysql_query($sql);
        $ligne = mysql_fetch_object();
        //-- affichage ------------------------------------------------------
      }
      else
      {
        //-- on recherche l'ancienne ligne ----------------------------------    
        $sql = 'SELECT id
                FROM compteur_click
                WHERE date_fin < CURDATE()
                ORDER BY date_fin DESC
                LIMIT 1';
        $result = mysql_query($sql);
        $ligne = mysql_fetch_object();
        //-- on sauvegarde l'id de la ligne ---------------------------------
        $id = $line -> id;
        //-- on sélectionne une nouvelle ligne différente de l'ancienne -----
        $sql = 'SELECT id, image, titre_astuce, categorie, sous_categorie
                FROM compteur_click
                WHERE id <> ' . $id . '
                ORDER BY RAND()
                LIMIT 1';
        $result = mysql_query($sql);
        $ligne = mysql_fetch_object();
        //-- affichage ------------------------------------------------------
        //-- on efface l'ancienne date --------------------------------------
        $sql = 'UPDATE compteur_click
                SET date_fin = NULL
                WHERE id = ' . $id;
        $result = mysql_query($sql);
        //-- on met à jour la date fin de la nouvelle ligne -----------------
        $dateFin = date('Y-m-d', strtotime('next sunday'));
        $sql = 'UPDATE compteur_click
                SET date_fin = ' . $dateFin . '
                WHERE id = ' . $ligne -> id;
        $result = mysql_query($sql);
      }
    ?>
    ATTENTION ! Je n'ai effectué aucun test. C'est simplement pour illustrer l'idée.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 205
    Par défaut
    Tout d'abord merci pour ta solution.

    Afin d'essayer , j'ai donc modifié mon champs "marque" et l'ai remplacé par un champs date_fin au format DATETIME.

    J'ai un souci au niveau de l'ajout de 7 jours à la date sélectionnée.
    J'ai essayé de ta manière , ç n'a pas fonctionné, j'ai donc essayé pas mal de combinaison, mais a marche toujours pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //-- on efface l'ancienne date --------------------------------------
        $sql = "UPDATE essai SET date_fin = '' WHERE id = $id;";
        $result = mysql_query($sql);
        //-- on met à jour la date fin de la nouvelle ligne -----------------
      
      $sql2 ="SELECT id, date_fin FROM essai WHERE id=$id;";
      $result2 = mysql_query($sql2);
      $tab_result2= mysql_fetch_assoc($result2);
    
    $dateFin = strtotime($tab_result2['date_fin']."+ 7 days");
    
        $sql = "UPDATE essai SET date_fin = $dateFin  WHERE id = $id;";
        $result = mysql_query($sql);
      }
    Comment puis-je faire pour que ça ajoute 7 jours ( ou alors next sunday) à ma date sélectionnée aléatoirement?

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    • Pour ce que tu fais, pas besoin de colonne de type 'datetime', le type 'date' est suffisant, puisque tu n'utilises pas l'heure ;
    • ta syntaxe de strtotime est incorrecte. Voir ici : http://fr.php.net/manual/fr/function.strtotime.php ;
    • prendre un décalage de 7 jours n'est pas bon, car si la 1ère connexion ne se fait que le mardi, tu te retrouves au mardi suivant, et non pas au lundi. Donc la date de fin est bien le dimanche suivant ;
    • à part ça, je ne comprends pas grand chose à ton code.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 205
    Par défaut
    Merci pour votre aide. ça fonctionne correctement.

    Bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copier une table dans une autre tous les Lundi
    Par popovitch130 dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/09/2008, 15h41
  2. Extraction de tous les Lundis du mois dans une requête
    Par cumpa100 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 07/02/2008, 14h15
  3. [MySQL] exécuter un traitement sur une table tous les lundi
    Par nicocaine dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/06/2007, 10h19
  4. Zone de texte pour tous les langues..
    Par pointer dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/09/2006, 16h04
  5. changer le texte de tous les Items dans un mainmenu
    Par C.M dans le forum Composants VCL
    Réponses: 7
    Dernier message: 25/07/2004, 13h19

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