Affichange (bdd) qui change toutes les semaines

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affichange (bdd) qui change toutes les semaines

par Patriboom » 12 mars 2009, 15:44

Félicitations, continue ainsi.

par Nat » 12 mars 2009, 15:36

Bonjour,

je reviens clore le sujet.
ça fonctionne impeccablement.

j'ai eu un petit soucis quand même pour comparer les données des 2 tables.
Comme je n'ai pas réussi, j'ai finalement crée un autre champs dans ma table info pour y mettre le nombre de ligne de ma 2eme table. et après ça allait tout seul. (sinon il ne tenait pas compte de mon if et continuait à incrémenter tout le temps, donc à ne rien afficher quand ça dépassait le nombre de lignes :) )

j'ai changé un petit peu ton code, non pas parce que ça ne me plaisait pas :D , mais pour que ce soit plus clair et compréhensible pour moi vu que je débute en php.

Voilà ce que ça donne, si ça peut servir pour d'autres :

Code : Tout sélectionner

// selection de la table infos $information = "SELECT numero_ligne , datemaj , nbr_ligne FROM infos"; $result = mysql_query($information) or die(mysql_error()); $valinfo = mysql_fetch_array($result) ; // Test du jour de la semaine $valeurdate = $valinfo['datemaj']; $jour = date ("w") ; $date = date("Y-m-d"); if (($jour == 1) && ($valeurdate != $date )) { // nbre de ligne $nombre_ligne = "SELECT count(*)from sitejeux" ; $result2 = mysql_query($nombre_ligne) or die(mysql_error()); $donnes=mysql_fetch_row($result2); mysql_query("UPDATE infos SET nbr_ligne = $donnes[0]"); // conditions $valeur = $valinfo['numero_ligne']; $nligne = $valinfo['nbr_ligne'] ; if ($valeur == $nligne) { $valeur = 1 ; } else { $valeur = $valeur +1 ; } //mise à jour de la table et afichage mysql_query("UPDATE infos SET numero_ligne = $valeur , datemaj = CURDATE()"); } else { $valeur = $valinfo['numero_ligne']; } // selection selon id=$valeur $query = "SELECT * FROM sitejeux where id = '$valeur'"; $resultat = mysql_query($query) or die(mysql_error()); $ligne = mysql_fetch_array($resultat); // affichage echo '<a target="_blank" href= '.$ligne ['site_url'].'><img src ='.$ligne ['images_url'].' /></a>' ; echo '<br/><br/>'; echo '<strong><u>'.utf8_decode($ligne ['titre']).'</u></strong>'; echo '<br/><br/>'; echo '<strong>'.utf8_decode((nl2br($ligne ['description']))).'</strong>' ; ?>
en tout cas, merci beaucoup, sans toi, je n'y serait pas arrivée.

par Nat » 09 mars 2009, 02:34

ok. je comprend mieux maintenant :D

il ne me reste plus qu'à essayer tout ça

merci beaucoup

par Patriboom » 09 mars 2009, 02:11

Bonsoir,


ta question 5 trouve réponse dans la 2. Le champ date sert à mettre la date du dernier changement. En chargeant ta page un lundi le serveur ira vérifier la date du champ. Si c'est la date du jour il ne fera que lire l'information, si c'est la date du lundi précédent, il fera les changements nécessaires.

Il n'y a donc que deux tables en jeu: celle qui garde en mémoire tes URL (table A), et celle que je te propose table B. À chaque chargement de la page il se passera ceci:

1) vérification du jour en cours
a) si c'est lundi, vérification dans la table B si l'information est à jour
i) si l'information est celle de la semaine dernière -> changement de l'information
ii) si l'information est celle de la semaine courante -> OK
b) si c'est pas lundi -> OK
2) cueillette de l'information de le semaine dans la table B
3) affichage de l'URL identifié dans la table A, conformément à l'information recueillie en 2 dans la table B

Espérant t'éclairer.

par Nat » 09 mars 2009, 01:59

Merci pour ta réponse.

je viens de relire une bonne dizaine de fois ton message, mais je suis pas vraiment sure d'avoir tout compris :)

En fait, c'est pour afficher la présentation d'un autre site sur ma page d'accueil, donc j'ai une table avec 6 champs (id, url de l'image, url du site, categorie, titre et description)

tu suggère de crée une autre table dans cette même base de données, qui pourrait éventuellement me servir pour autre chose, c'est ça ?
et dans laquelle après le test du jour on irai inscrire le résultat, et donc en fonction du résultat on pourra afficher la ligne correspondante à l'id sur ma table d'origine...je crois que j'ai compris, enfin presque :D

Par contre, ça voudrais dire que je dois travailler sur 2 tables de ma base.
Voyons si j'ai bien compris:

1) je crée une deuxième table que j'appellerai infos avec 4 champs ; Id | description | numero_ligne | date

2) je rempli la première ligne avec: 1 | site de la semaine | 1 | je met la date du prochain lundi ?
là je ne comprend pas trop à quoi sert le champ date ?
parce que j'ai pas besoin de la date, tout ce qui m'intéresse c'est le lundi (donc "1" d'après ce que j'ai pu voir sur la doc de la fonction date)

3) je vérifie sur mon autre table si c'est la dernière ligne de la table... j'ai pas trop compris la ligne de code là , j'ai été voir mysql numrows, qui donc retourne un nombre de ligne.... donc si le nombre de ligne est égale à la valeur de "numero_ligne", il faut repartir à 1 et sinon, rajouter 1 à la valeur d'info(numero_ligne pour moi) ... c'est ce que veut dire ta ligne de code ?
par contre comment je fais si le nombre de ligne à tester est dans ma table1 et numero_ligne est dans ma table2 ? on peut comparer 2 champs de 2 tables différentes ?

4) j'inscris la nouvelle valeur dans mon champs "numero_ligne"

et pour finir j'affiche la ligne de l'id correspondante.

désolée, j'ai écrit un roman :) , je comprend vite mais faut m'expliquer longtemps :D

y'a encore une dernière chose qui m'inquiète, c'est le lundi et quand s'exécute le test, est ce que c'est à l'affichage de la page ?
faudrait pas que le lundi l'affichage change à chaque affichage de la page :lol:

par Patriboom » 08 mars 2009, 17:49

Une façon simple, serait de faire une table dans ta bdd qui garde en note où t'en est rendue dans les différentes informations de ton site.
Par exemple, une table pourrait ressembler à ceci
id description_info info Ajour
1 messsage accueil 23 2009-03-08
2 autre chose 12 2009-02-12
.. ... ..

Ceci en prévision d'autres changements hebdomadaires comme celui de ton message d'accueil.

Ensuite, sur ta page index, tu vas vérifier quel est le jour de la semaine. Si c'est lundi, tu modifies le contenu du champ info correspondant au domaine. Dans le cas présent, ce serait le champ info de l'enregistrement numéro 1.
     //Peu importe qu'on le change ou non, il faut connaître le contenu du champ qui nous intéresse, lisons-le donc
     $requINFO = "SELECT info, Ajour FROM infos"; 
     $resuINFO = mysql_query($requINFO) or die(mysql_error()); 
     $QuelINFO = mysql_fetch_array($resuINFO);
     $Valeur = $QuelINFO['info'];

   //D'abord un test du jour de la semaine
   $QuelJour = date("w");
   if ($QuelJour == 1 && $QuelINFO['Ajour'] =! date("Y-m-d")) {
           //Vérification préparatoire à savoir si c'est le dernier élément de la table
          $Valeur = ($QuelINFO['info'] == mysql_numrows($resuINFO) ? 1 : $QuelINFO['info'] + 1;

           //Mise à jour du contenu du champ info
          Tu inscris ta nouvelle valeur dans la table.
   }

   //tu choisis enfin ton message à afficher selon id = $Valeur

Affichange (bdd) qui change toutes les semaines

par Nat » 08 mars 2009, 16:51

Bonjour,

je voudrais afficher un contenu sur ma page d'accueil qui change toutes les semaines.
mais pas aléatoirement.

j'affiche pour l'instant à l'aide de ce code :

Code : Tout sélectionner

$query = "SELECT * FROM sitejeux"; $result = mysql_query($query) or die(mysql_error()); $ligne = mysql_fetch_array($result); // affichage echo '<a target="_blank" href= '.$ligne ['site_url'].'><img src ='.$ligne ['images_url'].' /></a>' ; echo '<br/><br/>'; echo '<strong><u>'.utf8_decode($ligne ['titre']).'</u></strong>'; echo '<br/><br/>'; echo '<strong>'.utf8_decode((nl2br($ligne ['description']))).'</strong>' ;
ce qui m'affiche donc la première ligne de ma table (id : 1)

j'aimerai que cet affichage change chaque lundi.
que par exemple lundi prochain, ça m'affiche la ligne suivante de ma table (donc id: 2) et ainsi de suite... et quand ça arrive à la fin de la table, ça reparte au début.

et aussi, je voudrais savoir, comment pouvoir tester sans devoir attendre une semaine :D

Merci

PS: je suis très très débutante en php :)