Facebook风格使用php和mysql显示用户生日

时间:2017-04-07 09:10:50

标签: php mysql

我正在尝试使用php制作一个facebook风格的用户birtyday功能。但我有一个问题,我的代码没有得到任何结果。我在做错了什么人都可以帮助我?

enter image description here

        <?php 
        public function UserBirthDay($uid,$base_url) {
             $uid=mysqli_real_escape_string($this->db,$uid);
             $query=mysqli_query($this->db,"SELECT uid,fullname,birth_day,birth_month,username 
FROM users WHERE 
    MONTH(birth_month) = MONTH(NOW()) AND DAY(birth_day) = DAY(NOW());") or die(mysqli_error($this->db));
             $data = array();
             while($row=mysqli_fetch_array($query, MYSQLI_ASSOC)) {
                 $data[]=$row;
              }
              if(!empty($data)) {
                // Store the result into array
                 return $data;
              } 
        ?>

<?php 
 $birthDay=$DaySo->UserBirthDay($uid,$base_url);

 foreach($birthDay as $data) {
    $birthUserFullname=$data['fullname'];
    $dbusername = $data['username'];
    $bd = $data['birth_day'];
        if (date('m-d', strtotime($bd)) == date('m-d')) {
       echo '<div class="birthdayUser">
    <div class="birthdayuser">
      <div class="birthday_icon"></div>
      <div class="birthdayUName"><a href="#">'.$birthUserFullname.'</a></div>
    </div>
   </div> ';
        }

 }

?>

2 个答案:

答案 0 :(得分:1)

你的php条件有问题

尝试以下代码

 foreach($birthDay as $data) {
    $birthUserFullname=$data['fullname'];
    $dbusername = $data['username'];
    $bd = $data['birth_month']."-".$data['birth_day']; //concate month and day
        if ($bd == date('m-d')) {
       echo '<div class="birthdayUser">
    <div class="birthdayuser">
      <div class="birthday_icon"></div>
      <div class="birthdayUName"><a href="#">'.$birthUserFullname.'</a></div>
    </div>
   </div> ';
        }

 }

答案 1 :(得分:1)

主要问题在于您的select语句。您不需要在MONTH() / DAY()函数中包含比较中的列。

SELECT uid,fullname,birth_day,birth_month,username 
FROM users 
WHERE MONTH(birth_month) = MONTH(NOW()) AND DAY(birth_day) = DAY(NOW())

您的专栏birth_month包含该月份的2位数字表示。 MONTH(NOW())将返回该月的2位数表示。因此,您无需在MONTH() MySQL方法中包装列。同样适用于birth_day比较。

SELECT uid,fullname,birth_day,birth_month,username 
FROM users 
WHERE birth_month = MONTH(NOW()) AND birth_day = DAY(NOW())

另外,正如塔德曼的评论所指出的那样;

  

警告:使用mysqli时,您应该使用parameterized个查询和bind_param来向查询中添加用户数据。 不要使用手动转义和字符串插值或连接来完成此操作,因为您将创建严重的SQL injection bugs。意外未转发的数据是一个严重的风险。

我在这里重复这个建议,因为很多人都会劝你听。