2017-04-07 10 views
-1

私はfacebookスタイルのユーザーbirtyday関数をPHPで作成しようとしています。しかし、私は自分のコードで何の結果も得られていないという問題があります。誰が私を助けることができるここで間違って何をしていますか?phpとmysqlを使ってFacebookスタイルのユーザーの誕生日を表示

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> '; 
     } 

} 

?> 
+0

$ birthdayのvar_dumpを行う – Akintunde007

+0

また、あなたのクエリにはユーザ名がありません – Akintunde007

+0

@Akin申し訳ありませんが追加しました。 – Azzo

答えて

1

以下

試して問題を持っていますtステートメント。比較の列は、必要でないときは、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()) 

また、Tadmanのコメントで指摘されたように、

警告:mysqliを使用する場合、parameterizedクエリとbind_paramを使用してクエリにユーザーデータを追加する必要があります。 は、手動のエスケープと文字列補間または連結を使用しないでください。これを行うには、深刻なSQL injection bugsが作成されるためです。誤ってエスケープされていないデータは重大なリスクです。

私はこのアドバイスをここで繰り返しています。これは、多くの人があなたに耳を傾けるよう促すものだからです。

+0

あなたの答えとattantionに感謝私はSQLインジェクションの問題を修正しました。だから私は誰かが私に与える理由を理解していない - 投票:) – Azzo

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> '; 
     } 

} 
関連する問題