8791 sujets

Développement web côté serveur, CMS

Pages :
Encore un petit prob.

J'utilise une page qui affiche la liste des anniversaire de tout les membres.
Mais un membre à donné comme date qui est enregistré comme : 1966-08-02(2 aout 1966) dans la base de donné c'est bien juste mais il ne s'affiche pas sur ma page anniversaire pourquoi ?

voici le code que j'utilise :
<?php 


$CONFIG['hostname'] = "localhost";  //mettez les paramètres de votre base
$CONFIG['database'] = "***";  //la meme chose que username pour free
$CONFIG['username'] = "***";
$CONFIG['password'] = "***";
$CONFIG['table'] = "***";
$n = 360; //nombre de jours de prévision

$sql = mysql_connect($CONFIG['hostname'], $CONFIG['username'], $CONFIG['password']) or die(mysql_error());
mysql_select_db($CONFIG['database'], $sql);
$result = mysql_query("SELECT 
   pseudo, 
   nom, 
   
   DATE_FORMAT(date, '%e %b.') AS datef, 
   (YEAR(CURRENT_DATE)-YEAR(date)) - (RIGHT(CURRENT_DATE,5)<=RIGHT(date,5)) +1 AS age, 
   TO_DAYS(CONCAT(LEFT(CURRENT_DATE,5), RIGHT(date, 5))) - TO_DAYS(CURRENT_DATE) AS diff, 
   DATE_FORMAT(CONCAT(YEAR(CURRENT_DATE),'-12-31'), '%j') AS nbj  


FROM ".$CONFIG['table']) or die(mysql_error());
  


$i=0;
while($row = mysql_fetch_array($result)){

 if($row['diff']<0) $row['diff'] = $row['diff'] + $row['nbj']; 


	if($row['diff']<$n and $row['datef']!=""){
		$tab[$i][0] = $row['diff'];
		$tab[$i]['pseudo'] = $row['nom'];
		$tab[$i]['age'] = $row['age'];
		$tab[$i]['dans'] = $row['diff'];
		$tab[$i]['date'] = $row['datef'];
	


	}
	
	$i++;
} 


//tout est proprement rangé dans $tab maintenant

//formatage à votre guise (ex: si 0 jours mettre en rouge [smile])) :
foreach($tab as $ligne) echo "<font color=#566ABD><b> - ".$ligne['pseudo']."</b></font> aura ".$ligne['age']." ans dans ".$ligne['dans']." jours (le <b>".$ligne['date']."</b>)<br />";
?>

Et si je pouvais aussi avoir les date en francais. Smiley langue
Modifié par doublemetre (07 Aug 2007 - 23:01)
Salut,

à l'heure à laquelle je poste (minuit passé) ton script devrait fonctionner sans aucune modification...

Magique non ? Smiley biggol

Et bien... non... C'est simplement parce que tu as une variable $n = 360; qui limite la recherche du Select... Donc pour ne plus avoir de surprises il faudrait la passer à 366...

Plus généralement j'ai l'impression que tu reprends des codes sans bien comprendre ce qu'ils font Smiley rolleyes ... Comme tu as dû le lire dans les règles du forum :
a écrit :
16- Ceci est une communauté d'entraide, pas de travail à votre place
Ce forum a pour vocation d'échanger des connaissances. Les membres ne sont pas là pour faire le travail à votre place. Il est donc inutile de demander des scripts tout faits, des codes à faire pour vous. On vous donnera les moyens d'y parvenir vous-même, sans vous apporter le code sur un plateau d'argent.
D'une part tu n'augmentes pas tes connaissances (ce qui est dommage Smiley ohwell ) et d'autre part c'est beaucoup moins intéressant de te dépanner ( Smiley decu )...

Pour prendre un exemple, en relisant le code que je t'ai donné la dernière fois, il y a quasiment la solution à tes dates en français...

Bon, désolé pour le côté moralisateur... et bon code Smiley smile .

A+
Désolé de t'embêter encore, mais étant débutant . . .

voilà ce que j'ai fait, et ca ne vas pas.

<?php 

function Mois($month) {
$mois = array('1'=>'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
return $mois[$month];
}
$CONFIG['hostname'] = "localhost";  //mettez les paramètres de votre base
$CONFIG['database'] = "***";  //la meme chose que username pour free
$CONFIG['username'] = "***";
$CONFIG['password'] = "***";
$CONFIG['table'] = "***";
$n = 366; //nombre de jours de prévision

$sql = mysql_connect($CONFIG['hostname'], $CONFIG['username'], $CONFIG['password']) or die(mysql_error());
mysql_select_db($CONFIG['database'], $sql);
$result = mysql_query("SELECT 
   pseudo, 
   nom, 
   
   DATE_FORMAT(date, '%e %b.') AS datef, 
   (YEAR(CURRENT_DATE)-YEAR(date)) - (RIGHT(CURRENT_DATE,5)<=RIGHT(date,5)) +1 AS age, 
   TO_DAYS(CONCAT(LEFT(CURRENT_DATE,5), RIGHT(date, 5))) - TO_DAYS(CURRENT_DATE) AS diff, 
   DATE_FORMAT(CONCAT(YEAR(CURRENT_DATE),'-12-31'), '%j') AS nbj,month(date) as mois


FROM ".$CONFIG['table']) or die(mysql_error());
  
$requete = "SELECT pseudo, nom, day(date) as jour, month(date) as mois FROM ".$CONFIG['table']." WHERE ((month(date) * 100) + day(date))='".$mois_jour_now."'";

$i=0;
while($row = mysql_fetch_array($result)){

 if($row['diff']<0) $row['diff'] = $row['diff'] + $row['nbj']; 


	if($row['diff']<$n and $row['datef']!=""){
		$tab[$i][0] = $row['diff'];
		$tab[$i]['pseudo'] = $row['nom'];
		$tab[$i]['age'] = $row['age'];
		$tab[$i]['dans'] = $row['diff'];
		$tab[$i]['date'] = $row['datef'];
	


	}
	
	$i++;
} 


//tout est proprement rangé dans $tab maintenant

//formatage à votre guise (ex: si 0 jours mettre en rouge [smile])) :
foreach($tab as $ligne) echo "<font color=#566ABD><b> - ".$ligne['pseudo']."</b></font> aura ".$ligne['age']." ans dans ".$ligne['dans']." jours (le <b>".Mois($ligne['date'])."</b>)<br />";
?>


Et on change quoi pour que la liste des anniversaires apparaissent dans l'orde du plus pret au plus loin de la date d'anniversaire.
Modifié par doublemetre (10 Aug 2007 - 20:40)
Salut doublemetre Smiley cligne ,

voici un code qui devrait régler ton problème :
<?php 
function Mois($month) {
$mois = array('1'=>'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
return $mois[$month];
}

$CONFIG['hostname'] = "localhost";  //mettez les paramètres de votre base
$CONFIG['database'] = "test";  //la meme chose que username pour free
$CONFIG['username'] = "root";
$CONFIG['password'] = "";
$CONFIG['table'] = "anniv";

$sql = mysql_connect($CONFIG['hostname'], $CONFIG['username'], $CONFIG['password']) or die(mysql_error());
mysql_select_db($CONFIG['database'], $sql);
$result = mysql_query("SELECT 
   pseudo, 
   nom, 
   DATE_FORMAT(date, '%e') AS jour, DATE_FORMAT(date, '%c') AS mois, 
   (YEAR(CURRENT_DATE)-YEAR(date)) - (RIGHT(CURRENT_DATE,5)<=RIGHT(date,5)) +1 AS age, 
   TO_DAYS(CONCAT(LEFT(CURRENT_DATE,5), RIGHT(date, 5))) - TO_DAYS(CURRENT_DATE) AS diff, 
   DATE_FORMAT(CONCAT(YEAR(CURRENT_DATE),'-12-31'), '%j') AS nbj
FROM ".$CONFIG['table']) or die(mysql_error());

$i=0;
while($row = mysql_fetch_array($result)){

 if($row['diff']<0) $row['diff'] = $row['diff'] + $row['nbj']; 
		$tab[$i][0] = $row['diff'];
		$tab[$i]['nom'] = $row['nom'];
		$tab[$i]['pseudo'] = $row['pseudo'];
		$tab[$i]['age'] = $row['age'];
		$tab[$i]['dans'] = $row['diff'];
		$tab[$i]['jour'] = $row['jour'];
		$tab[$i]['mois'] = $row['mois'];
	
	$i++;
} 
sort($tab);

foreach($tab as $ligne) {
	if ($ligne['dans'] == 0) {
		echo "<font color=#566ABD><b> - ".$ligne['nom']." (".$ligne['pseudo'].")</b></font> a ".$ligne['age']." ans aujourd'hui.</b><br />";
	}
	else
	{
		echo "<font color=#566ABD><b> - ".$ligne['nom']." (".$ligne['pseudo'].")</b></font> aura ".$ligne['age']." ans dans ".$ligne['dans']." jours (le <b>".$ligne['jour']." ".Mois($ligne['mois'])."</b>)<br />";
	}
}
?>

Je te rappelle quand même que ce forum est dédié aux standards et pas aux questions génériques de PHP (même si parfois cela déborde un peu) Smiley langue . Tu aurais sans doute tout intérêt à consulter un site plus générique comme phpdebutant ou l'un de ceux cités dans ce post.

Bonne continuation ! Smiley biggrin
Oui je vais regarder cela,
Ton code s'affichie bien mais il liste tout les membres même ceux qui n'on pas mis de date de naissance: ex
Vincent **(pseudo) a 2008 ans aujourd'hui.
- Yann***(pseudo) a 2008 ans aujourd'hui.
- michel (pseudo) aura 28 ans dans 22 jours (le 1 Septembre)
- Marcel (lpseudo) aura 54 ans dans 49 jours (le 28 Septembre)
- Dupont (pseudo) aura 31 ans dans 55 jours (le 4 Octobre)


Avant j'utilisais cet ligne :
if($row['diff']<$n and $row['datef']!="")

je crois que c'est ca qui faisait le tri.
Modifié par doublemetre (10 Aug 2007 - 22:57)
doublemetre a écrit :
Avant j'utilisais cet ligne :
if($row['diff']<$n and $row['datef']!="")

je crois que c'est ca qui faisait le tri.

Euh... non Smiley cligne , le tri est fait avec sort.

Pour tester qu'une date est renseignée tu peux mettre :
$i=0;
while($row = mysql_fetch_array($result)){

 if($row['diff']<0) $row['diff'] = $row['diff'] + $row['nbj']; 
	if($row['jour']>0){
		$tab[$i][0] = $row['diff'];
		$tab[$i]['nom'] = $row['nom'];
		$tab[$i]['pseudo'] = $row['pseudo'];
		$tab[$i]['age'] = $row['age'];
		$tab[$i]['dans'] = $row['diff'];
		$tab[$i]['jour'] = $row['jour'];
		$tab[$i]['mois'] = $row['mois'];
	}
	
	$i++;
}
Bonjour,
Désolé de vous solicitez encore !!
Je cherche maintenant à envoyer un e-mail automatiquement le jour des anniversaire.
Est-ce possible ?
Pouvez-vous m'aider car cela est bien trop compliqué pour moi.

Merci de votre aide
Modifié par doublemetre (16 Nov 2007 - 00:04)
Pages :