Problème de date anniversaire

Eléphanteau du PHP | 25 Messages

12 mars 2012, 23:42

Bonjour, je gère un site internet d'un club sportif. Sur ma page de garde, j'ai une DIV dans laquelle je souhaite afficher le nom et prénom des membres du club. J'ai donc une table listing dans ma base de données. Dans cette table j'y ai extrait le numéro de mois ainsi que le numéro de jour. En cherchant un peu sur le net, j'ai utiliser strftime.
Le problème est le suivant : je n'ai rien qui s'affiche dans ma DIV et n'est aucune indication d'erreur. Quelqu'un pourrait il éclairer ma lanterne.

Mon bout de code :

Code : Tout sélectionner

<!--DIV anniversaire--> <div style="width:270px;height:120px;overflow:auto;border:1px solid #98212d;margin-left:10px;margin-right:6px;float:left"> <div style="width:270px;text-align:center;color:#FFFFFF;background-color:#ae4f59"> <b>Anniversaires du jour</b> </div> <br/> <?php $jouract = strftime("%d "); $moisact = strftime("%m "); mysql_connect('**********','***********','*******'); //Connection à la base de donnée mysql_select_db('***********'); //Sélection de la base de travail $res=mysql_query('SELECT * FROM listing WHERE mois="'.$moisact.'" AND jour="'.$jouract.'" '); //Intérrogatiopn de la base : Sélection des enregistrements si date et mois courant correspondent a date de naissance echo mysql_error(); while($enreg=mysql_fetch_assoc($res)){ echo $enreg['nom']; echo " "; echo $enreg['prenom']; echo "<br/>"; } mysql_close(); ?> </div> <!--FIN DIV anniversaire-->
Merci d'avance.

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

13 mars 2012, 01:38

Tu as des espaces en trop lorsque tu fais appel à strftime. Ainsi strftime("%d ") va retourner la chaine "13 " et pas "13". Du coup quand tu utilises cette valeur dans ta requête, la correspondance avec tes enregistrements ne se fait pas.

Pour débugger facilement, tu as intérêt à mettre ta requête dans une variable que tu pourras afficher avec de l'exécuter, ça permet d'éviter pas mal d'erreur :)
$sql = 'SELECT * FROM listing WHERE mois="'.$moisact.'" AND jour="'.$jouract.'" ';
echo $sql;
$res=mysql_query($sql);  
A noter que si tes champ mois et jour sont bien des nombres en base, alors il ne faut pas délimiter les valeurs par des guillemets (tu n'aurais d'ailleurs dans ce cas plus le problème des espaces)
$sql = 'SELECT * FROM listing WHERE mois=' . $moisact . ' AND jour=' . $jouract; 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 25 Messages

13 mars 2012, 02:47

Ok merci de tes infos, je vais regarder ça d'un peu plus près. Si j'ai tout compris, le fait d'avoir un espace attends une date à 2 chiffre du style 04 alors que dans ma base la valeur est 4.
Je vais corriger cela. Merci encore.