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


    

        

            

            $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 ธ.ค. 2554 5 950

(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
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 1024
^