$today = date('Y-n-j');
$yesterday = date('Y-n-j', time()-86400);
$obj = new xxx();
$obj->finance($
today);








function finance($date){
   $this->result = $this->query();
   if(!$this->result){
      $this->_Close();
      echo '<div id="message"><h1>ไม่สามารถเชื่อมต่อฐานข้อมูลได้</h1></div>';
      exit();
   }
 
   $rows = mysql_num_rows($this->result);
   if($rows > 0){
      while($data = mysql_fetch_array($rows)){
         if($data['date']==$date){
            $price = $price + $data['price'];
            $cost = $cost + $data['cost'];
            $profit = $profit + $data['profit'];
         }else{
            echo $data['date'].'======='.$date;
         }
      }
      $jobToday = $rows;
   }else{
      return '<div class="noData"><b>ยังไม่มีรายการใดๆ</b></div>';
   }
 
   $this->output = '<div class="revenue"><b>'.$price.'</b></div>';
   $this->output .= '<div class="expenditure"><b>'.$cost.'</b></div>';
   $this->output .= '<div class="profit"><b>'.$profit.'</b></div>';
   $this->output .= '<div class="job"><b>'.$jobToday.'</b></div>';
 
   return $this->output;
}






จากโค้ดด้านบนปัญหาในบรรทัดที่ 15 ฮะ





         if($data['date']==$date){



ถ้าตรงนี้ใส่เป็นสตริงลงไปเลย if จะเป็นจริงฮะ ถ้ามาจากตัวแปรเป็นเท็จหมดเลย





         if($data['date']=='2011-12-07'){




ก็เลยลองเช็คดู (ในบรรทัดที่ 20) ว่าได้ค่าอะไรมามันถึงเป็นเท็จ


		
}else{
    echo $data['date'].'======='.$date;
}




ผลที่ได้มันยิ่งทำให้งงว่ามันไม่ตรงกันยังไง


			2011-12-07=======2011-12-07
			




จากโค้ดนี้ใครที่พบข้อบกพร่องรบกวนชี้แนะด้วยฮะ



กรกฎ วิริยะ 07 Dec 2011 19:14
(string)$data['date'] == $date



ถ้ายังไม่ได้ลอง trim($data['date'])





.::{เปรียว}::. 08 Dec 2011 02:04
ก่อนอื่น ทำไมโพสแรกมันดูเละเทะอย่างงั้นอ่าาา

เข้าเรื่อง......



$data['date'] 
== $date;

trim($data['date']) == $date;

trim($data['date']) == trim($date);



ยังคงได้ผลลัพภ์แบบเดียวกันเลย เป็นเท็จหมด


(ปล.ในฐานข้อมูล ฟิลด์ date เป็นชนิด date)



เปลี่ยนแปลงโค้ดเล็กน้อยดังนี้




// บางส่วนของตัวแปรที่เตรียมไว้เรียกใช้
$this->ToDay = date('Y-n-j');
$this->Yesterday = date('Y-n-j', time()-86400);
$this->Last7Day = date('Y-n-j', time()-604800);
$this->Last15Day = date('Y-n-j', time()-1296000);
.............. .............. ..............
function statistics(){
     $result = mysql_query("SELECT * FROM customer");
     if(!$result){
          $this->_Close();
          $output = '<div id="message"><h1>ไม่สามารถเชื่อมต่อฐานข้อมูลได้</h1></div>';
          return $output;
     }
     if(mysql_num_rows($result) > 0){
          while($field = mysql_fetch_array($result)){
               if(trim($field['date'])==$this->ToDay){
                    $price = $price + $field['price'];
                    $cost = $cost + $field['cost'];
                    $profit = $profit + $field['profit'];
                    $job = $job++;
               }else{
                    $noData=true;
               }           }
          if($noData==true){
               $output = '<div class="noData"><b>ยังไม่มีรายการใดๆ</b></div>';
          }else{
               $output = '<div class="revenue"><b>'.$price.'</b></div>';
               $output .= '<div class="expenditure"><b>'.$cost.'</b></div>';
               $output .= '<div class="profit"><b>'.$profit.'</b></div>';
               $output .= '<div class="job"><b>'.$job.'</b></div>';           }           ..............
          ..............
          ..............           $this->_Close();
          return $output;      } }




ขอบคุณ คุงอามากมายฮะ
.::{เปรียว}::. 12 Dec 2011 19:21
ง่า.... ยังแก้ไม่ได้เลยฮะคุงอา หาทางไปไม่เจอเลย (ตายน้ำตื้นอีกแล้ว) T-T
กรกฎ วิริยะ 13 Dec 2011 07:56
555+++ นึกว่าได้แล้วนะนั่น



ปัญหาอาจเกิดได้จากหลายกรณี เช่น



1.ชนิดข้อมูลไม่ตรงกัน โดยปกติแล้ว ข้อความที่มาจาก database ในรูปวันที่ อาจต้องแปลงเป็น string ก่อน เช่น (string)$result['date'] และอาจต้องตัดช่องว่างที่องไม่เห็นออกด้วยก็ดี ด้วย trim



ปัญหาด้านบน อาจใช้วิธีตรวจสอบด้วย strlen() ก็ได้ ว่ามันมีค่าอย่างที่เห็นหรือเปล่า



2.อาจมีปัญหาที่การแปลงข้อมูล โดยปกติแล้ว ข้อมูลที่เก็บใน db ที่ตำแหน่ง วันที่ และ เดือน จะมี 2 หลักเสมอ เช่น 01 02 แต่ดูจากคำสั่งวันที่ ที่ใช้ ใช้เป็น Y-n-j ซึ่งจะถูกตัดตัวเลข 0 ออก ซึ่งแน่นอน จะทำให้การตรวจสอบ string ผิดพลาด



ในกรณีที่ทำงานกับวันที่บน MySQL ควรใช้ Y-m-d เสมอครับ หรือ date('d'), date('m') เพื่อป้องกันความผิดพลาด
Wanchana yoojuy 15 Dec 2011 10:18
ลองอีกวิธีครับ ใช้ GMDATE เปลี่ยนค่าทั้งคู่ใหม่ แล้วลองจับมาเทียบกันครับ