Anniversaires et dates

Eléphant du PHP | 424 Messages

16 févr. 2006, 09:59

Bonjour à tous :

J'ai fais un petit script pour afficher les anniversaires des membres de mon site. VOici :
<?
echo " <table cellpadding=\"2\" cellspacing=\"2\">
<tr><td valign=\"top\" align=\"left\">&nbsp;&nbsp;<b>Anniversaire du jour</b></td></tr></table>

<table cellpadding=\"6\" cellspacing=\"0\"><tr><td valign=\"top\" align=\"left\"><br />";

$date = date("d/m");

$sql="SELECT * FROM nuked_users  where 'age' LIKE '$date%'";
$req= mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$anniv=mysql_num_rows($req);
$data['anniv']=$anniv;

if ($anniv!=0){ 

echo " <center><b>Oy&eacute; Oy&eacute; aujourd'hui nous f&eacute;tons l'anniversaire de :</b></center><br />";

$sql1="SELECT * FROM nuked_users  WHERE 'age' LIKE '$date%'";
$req1= mysql_query($sqll) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
while($data1 = mysql_fetch_array($req1))
{
$nom=$data1['pseudo'];
$naissance=$data1['date'];

$array_date = explode('/', $naissance); 

$jour = $array_date[0]; 
$mois = $array_date[1];
$annee = $array_date[2];

$newdateannee = date("Y");

$calculannee = $newdateannee - $annee; 

echo " <b>$nom</b> ($calculannee ans) ";}

}else{ 

echo " &nbsp; <center><b>Aucun anniversaire &agrave; f&eacute;ter</b></center>";}
echo " <br /><br /></td></tr></table>";
?>
La colonne 'age' qui contient donc mes date de naissances est au format Varchar(10) 16/02/1981

Quand j'affiche ma page il m'affiche :

Anniversaire du jour


Aucun anniversaire à féter


Merci pour votre aideeeeeee
Youpi Youpi Yo !

Mammouth du PHP | 768 Messages

16 févr. 2006, 11:03

La colonne 'age' qui contient donc mes date de naissances est au format Varchar(10) 16/02/1981
idéalement, la date doit etre stockée dans un champ de type DATE


$sql="SELECT * FROM nuked_users where 'age' LIKE '$date%'";

la requête n'est pas bonne:

Code : Tout sélectionner

SELECT * FROM nuked_users WHERE age = curdate();
à tester...
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Mammouth du PHP | 19672 Messages

16 févr. 2006, 11:03

Suggestion : au lieu d'un type VARCHAR, utilise un vrai type DATE AAAA-MM-JJ et modifie la requête comme suit:

Code : Tout sélectionner

SELECT * FROM nuked_users WHERE DAY('age') = DAY(NOW() AND MONTH('age') = MONTH(NOW()))
Ça veut dire modifier toutes les entrées de cette colonne, mais ce sera notablement plus cohérent.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

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

16 févr. 2006, 11:09

Question bête déjà, est-ce qu'il y a bien un anniversaire à fêter aujourd'hui dans ta base ? (16/02/2006) :)

C'est vrai qu'un champ date est plus propre pour une date, mais il n'y a aucune raison que cela ne marche pas avec un varchar, il pourrait très bien chercher autre chose que des dates et la requête sql avec un like serait donc bonne.

En revanche, j'ai un doute sur les quotes autour du champ age. La syntaxe devrait être "SELECT * FROM nuked_users WHERE age LIKE '$date%'" (maintenant ça marche peut être aussi, j'ai jamais essayé)