A-AA+then

เหตุเกิดในบรรทัดที่ 15

914
    
        
            
            $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
            

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

5 ความคิดเห็น

(string)$data['date'] == $date

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


1

ก่อนอื่น ทำไมโพสแรกมันดูเละเทะอย่างงั้นอ่าาา
เข้าเรื่อง......

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


ขอบคุณ คุงอามากมายฮะ
2

ง่า.... ยังแก้ไม่ได้เลยฮะคุงอา หาทางไปไม่เจอเลย (ตายน้ำตื้นอีกแล้ว) T-T
3

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') เพื่อป้องกันความผิดพลาด
4

ลองอีกวิธีครับ ใช้ GMDATE เปลี่ยนค่าทั้งคู่ใหม่ แล้วลองจับมาเทียบกันครับ 
5
^