Page 1 sur 1

Anniversaires et dates

Posté : 16 févr. 2006, 09:59
par Dom!
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

Re: Anniversaires et dates

Posté : 16 févr. 2006, 11:03
par mario
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...

Posté : 16 févr. 2006, 11:03
par Cyrano
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.

Posté : 16 févr. 2006, 11:09
par Ryle
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é)