8721 sujets

Développement web côté serveur, CMS

J'ai du mal avec une boucle foreach

dans ma bdd, les dates sont entré sur 3 colonnes en format numérique, jour, mois et année.

dans ma page web, je veut faire afficher ma date comme ceci : 19 août 2013
Je procède ainsi:

$req = "SELECT 
			P.produits,
			S.statue, 
			S.fichier, 
			S.version, 
			S.jour, 
			S.mois, 
			S.annee, 
			S.description".$lang." as description
		FROM software S, 
			produits P 
		WHERE P.produits = '".$produits."'
			AND P.site != 'xcel'
			AND S.id_produits = P.id
			AND S.statue='actif'";
$ss = $DB->get_data($req);

if($lang == 'FR'){			
	$m = array(
		1 => 'janvier',
		2 => 'février',
		3 => 'mars',
		4 => 'avril',
		5 => 'mai',
		6 => 'juin',
		7 => 'juillet',
		8 => 'août',
		9 => 'septembre',
		10 => 'octobre',
		11 => 'novembre',
		12 => 'décembre');
}
else{			
	$m = array(
		1 => 'January',
		2 => 'February',
		3 => 'Mars',
		4 => 'April',
		5 => 'May',
		6 => 'June',
		7 => 'July',
		8 => 'August',
		9 => 'September',
		10 => 'October',
		11 => 'November',
		12 => 'December');
}
foreach ($m as $key => $mois) {
	$month = $m[$s->mois];
}
foreach ($ss as $s) {
	if(!empty($s->produits)){
		?>
bla bla bla...
<?php echo $lang == 'FR' ? $s->jour.' '.$month.' '.$s->annee : $month.' '.$s->jour.', '.$s->annee;?>
bla bla bla...
		<?php
	}
}


la date affiché est le 19 avril 2013 au lieu du 19 août 2013... c'est comme ça pour n'importe laquel date, le mois affiché est systématiquement avril.

si j’inscris $s->mois au lieu de $month, ç'est le bon chiffre qui s'affiche.
si j'inscris $mois, ça affiche "décembre"...
si j'inscris $month = $mois[$s->mois]; dans le foreach, ça affiche "e"

un coup de main svp...
Bonjour,
je pense que ta boucle
foreach ($m as $key => $mois) {}

est inutile,
quand tu listes les résultats de ta requête, il faut que tu affiches l'élément du tableau $m indexé par son numéro de mois: $m[$s->mois]



foreach ($ss as $s) {
	if(!empty($s->produits)){
		?>

<?php echo $lang == 'FR' ? $s->jour.' '.$m[$s->mois].' '.$s->annee ;?>

		<?php
	}
}
Bonjour,

Petite précision, il est possible de stocker ta date en un seul champ en base dans un champ date et de filtrer à l'affichage dans ta requête SQL avec les mots-clés DAY(), MONTH() et YEAR() par exemple.

Cela permet d'alléger ta table en nombre de colonnes dans un premier temps, également de faire plus aisément des statistiques liées au date, et également d'alléger ton code serveur qui n'a plus à sélectionner ou fragmenter des chaînes pour obtenir la chaîne voulue.
loicbcn: effectivement c'est beaucoup plus simple ainsi et ça fonctionne! Merci beaucoup

ohweb: t'as une source pour ça?