Affichage aléatoire de texte en fonction d'une date

Eléphant du PHP | 254 Messages

20 juin 2006, 10:42

Bonjour à tous.
Je voudrais afficher des infos de ma base de façon aléatoire sur la page d'accueil de mon site en fonction d'une date.
Pour ceux qui avaient un peu suivi mes "essais" j'ai créé un agenda, qui affiche les événements du mois en cours.
Sur la page d'accueil, je voudrais afficher les événements enregistrés dans ma base qui sont >= au mois en cours.

J'ai utilisé la fonction rand()
Mais j'ai un souci :
Lorsque je fais la requête dans la base en incluant la variable
$mois = date('n') ;
rien ne s'affiche.
Alors que si j'enlève ce filtre de sélection, les valeurs s'affichent...mais pas comme je le voudrais : c'est à dire, TOUTES les dates à partir du mois en cours....

Je vous donne un bout de mon code, si quelqu'un a une idée pour m'éclairer..... merci ! :wink:
<?php 
	//recherche des sessions existantes //
		 mysql_select_db($database, $connexion);
		$queryh = "SELECT * FROM sessions, cours WHERE sessions.ID_cours=cours.ID_cours" ;
		$resulth = mysql_query($queryh) or die('Erreur SQL : '.mysql_error());
		$cours = mysql_num_rows($resulth);
		$hasard = rand(1,$cours);
		//Affichage du bandeau
		$query = "SELECT * FROM sessions, cours WHERE sessions.ID_cours=cours.ID_cours AND sessions.ID_session = ".$hasard." ";
		// Execute la requete precedente
		$result = mysql_query($query) or die('Erreur SQL : '.mysql_error());
		while ($row_session = mysql_fetch_array($result)){

        // affichage des sessions agenda //

        <?
		}
		?>
Pour l'affichage du mois en cours :
//affichage du calendrier sur le mois en cours //
if(!isset($_GET['mois'])) 
  $mois = date('n') ;
else
  $mois = $_GET['mois'];
//recherche des sessions existantes //
mysql_select_db($database, $connexion); 
$query_session = "SELECT * FROM sessions, cours WHERE sessions.ID_cours=cours.ID_cours AND (MONTH(date_debut) = $mois) 
ORDER BY date_debut, horaires ASC ";
$session = mysql_query($query_session, $connexion) or die(mysql_error());
$row_session = mysql_fetch_assoc($session);
$totalRows_session = mysql_num_rows($session);
Il faut faire une jointure ?
Un order by ?
Limit ?
J'avoue que je suis perplexe :lol: :-k
:oops:

Eléphant du PHP | 50 Messages

20 juin 2006, 11:02

Petite précision :
$cours = mysql_num_rows($resulth); 
$hasard = rand(1,$cours);
//Affichage du bandeau
$query = "SELECT * FROM sessions, cours WHERE sessions.ID_cours=cours.ID_cours AND sessions.ID_session = ".$hasard." "; 
Comment es-tu sur que $hasard est contenu dans ID_cours rien qu'a partir d'un num_rows() ?
Tu es (absolument) sur que tes ID seront tous de 1 à X et non (par exemple) 1, 12 ,46 , 55" ? Dans ce dernier cas, le random est inefficace :?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 juin 2006, 11:05

Bonjour vous :)

En résumé tu as
- une condition : date supérieure ou égale au mois en cours (WHERE)
- un ordre : n'importe lequel, c'est du hazard (ORDER)
- une restriction : tu n'as besoin que d'un seul élément (LIMIT)

Tu peux ainsi tout faire directement dans ta requête en utilisant par exemple :

Code : Tout sélectionner

SELECT ... FROM ... WHERE MONTH(maDate) >= MONTH(NOW()) // mois supérieur au mois en cours AND YEAR(maDate) >= YEAR(NOW()) // idem pour l'année, vu que les événements de juillet 2001 on s'en cogne... ;) ORDER BY RAND() // trié aléatoirement LIMITE 0, 1 // ne ramene que le premier enregistrement
... ou du moins quelque chose dans le genre ;)

Eléphant du PHP | 50 Messages

20 juin 2006, 11:08

Tiens je ne connaissais pas le ORDER BY RAND(), ça peut être utile un jour :]

Eléphant du PHP | 254 Messages

20 juin 2006, 11:11

Petite précision :
$cours = mysql_num_rows($resulth); 
$hasard = rand(1,$cours);
//Affichage du bandeau
$query = "SELECT * FROM sessions, cours WHERE sessions.ID_cours=cours.ID_cours AND sessions.ID_session = ".$hasard." "; 
Comment es-tu sur que $hasard est contenu dans ID_cours rien qu'a partir d'un num_rows() ?
Tu es (absolument) sur que tes ID seront tous de 1 à X et non (par exemple) 1, 12 ,46 , 55" ? Dans ce dernier cas, le random est inefficace :?
Oui tu as raison, les ID qui sont autoincrémentés ne sont pas des suites fixes...car j'ai du detruire qques enregistrements etc....
Merci pour ta réponse !

Eléphant du PHP | 254 Messages

20 juin 2006, 11:23

Bonjour vous :)

En résumé tu as
- une condition : date supérieure ou égale au mois en cours (WHERE)
- un ordre : n'importe lequel, c'est du hazard (ORDER)
- une restriction : tu n'as besoin que d'un seul élément (LIMIT)

Tu peux ainsi tout faire directement dans ta requête en utilisant par exemple :

Code : Tout sélectionner

SELECT ... FROM ... WHERE MONTH(maDate) >= MONTH(NOW()) // mois supérieur au mois en cours AND YEAR(maDate) >= YEAR(NOW()) // idem pour l'année, vu que les événements de juillet 2001 on s'en cogne... ;) ORDER BY RAND() // trié aléatoirement LIMITE 0, 1 // ne ramene que le premier enregistrement
... ou du moins quelque chose dans le genre ;)
Hello Mister Ryle !! Sympa de me lire et venir m'aider !
J'ai un peu laché le péhachepé ces derniers temps et me revoilou !
Je ne savais pas qu'on peut faire un ORDER BY RAND !
Je vais essayer dans cette voie !
Merci bcp !!!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 juin 2006, 11:38

A vot' service ;)

Sinon juste une remarque par rapport au code que j'ai donné, le "where month() and year()" est à revoir sinon tu n'aurais que les derniers mois quelle que soit l'année... faudrait quelque chose du genre "where maDate >= '01/moisEnCours/anneeEnCours'" :)

Eléphant du PHP | 254 Messages

20 juin 2006, 11:42

youpi pourquoi faire compliqué quand on peut faire simple !!! ](*,) \:D/
Ca fonctionne thank's !! :wink:
Je te revaudrais ça ! :wink:

Eléphant du PHP | 254 Messages

20 juin 2006, 12:22

Argg j'ai un petit souci mais d'un autre ordre !
Je gère l'affichage de mon calendrier sur la base d'un format de dates $mois=date('n') donc 1,2,3,4,5,6,7,8,9 au lieu de 01,02,03,etc....
Su rl'affichage aléatoire que je suis arrivée à créer, je fais un lien
agenda.php?mois=<?php echo $mois;?>
Or, la mise au format de ma date US au format français, bousille tout.
Dans l'url si le mois correspondant à l'événement est en juillet : je me retrouve avec dans l'url : agenda.php?07 au lieu de agenda.php=7

Comment faire pour faire la mise au format français de la date avec un mois au format ('n') et non ('m') ](*,) #-o

Ché pas si vous suivez, je suis super compliquée dans mes questions ! :langue:
<?php//mise au format français de la date
		$date_us = $row_session['date_debut']; 
		$annee = substr($date_us,0,4); 
		$mois = substr($date_us,5,2); 
		$jour = substr($date_us,8,2); 
		$numJour = date("w", mktime(0, 0, 0, $mois, $jour, $annee));
		$jours = Array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
		$jourday = $jours[$numJour];
		$date_fr = $jour ."-". $mois ."-". $annee;
		?>

<?php echo $jourday;?> <?php echo $date_fr;?> 
C'est à cause de ça que le mois change de format.

Eléphant du PHP | 254 Messages

20 juin 2006, 12:25

Rhoooo Ryle tu es mamouth !!! :shock:

:afraid:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 juin 2006, 12:31

Rhoooo Ryle tu es mamouth !!! :shock:

:afraid:
Non mais hé ?! on reste polie sinon moi j'aide plus hein ! ;)

Pour la conversion du 07 en 7 (et autre nombre du même genre) tu peux utiliser la fonction intval() qui te donne la valeur numérique d'une chaine de caractères :)

Eléphant du PHP | 254 Messages

20 juin 2006, 12:36

rhooo !
Top cette fonction !!
:agenouille: merciiiii oh mamouth !
:P
oups

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 juin 2006, 12:54

:agenouille: merciiiii oh mamouth !
:P
oups
J'me vengerais !! :x

Je te donnerais des codes qui marchent pas, des requêtes qui mettent des heures à s'exécuter, t'auras des messages d'erreur en japonnais, le téléphone sonnera quand tu iras sous la douche et tu auras des p'tits crabes blancs quand tu commanderas des moules au restaurant ! ;p

Invité
Invité n'ayant pas de compte PHPfrance

20 juin 2006, 13:14

Naaaaan !!!! ouiiiiiiiiin :cry:
Je parle du grade hein !
:wink:
Alors je dirais Ryle futur Ganesha :agenouille:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

20 juin 2006, 14:10

Je te donnerais des codes qui marchent pas, des requêtes qui mettent des heures à s'exécuter, t'auras des messages d'erreur en japonnais, le téléphone sonnera quand tu iras sous la douche et tu auras des p'tits crabes blancs quand tu commanderas des moules au restaurant ! ;p
:shock: tout ça avec un code PHP qui ne fonctionne pas :langue:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer