2011-03-29 6 views
0

내 페이지 중 하나에서 호출되는 작은 PHP 함수가 있습니다.PHP 함수에서 제공되는 함수

function ratingDetails($uid, $align, $width) { 
$queryFull = "SELECT * FROM rating WHERE uid = $uid"; 
$resultFull = mysql_query($queryFull); 

     //START DISPLAY TABLE IF RESULTS 
     if(mysql_num_rows($resultFull) > 0) {  

      echo "<table class=\"ratingTable\" align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\" width=\"550\">\n"; 
      echo "<tr bgcolor=\"#6699cc\"><th>STARS</th><th>DATE RATED</th><th>COMMENT</th><th>RATED BY</th></tr>\n"; 

       while($rowFull = mysql_fetch_array($resultFull)) { 
        $rating = $rowFull['rating']; 
        $comment = $rowFull['comment']; 
        $datePosted = date("M j, Y", $rowFull['date']); 
        $rid = $rowFull['raterID']; 
        $rater = getUsername($rid); 

        //SHOW STARS 
        if($rating == 0) { $stars = "notYet.jpg"; } 
        if($rating == 1) { $stars = "starOne.jpg"; } 
        if($rating == 1.5) { $stars = "starOneHalf.jpg"; } 
        if($rating == 2) { $stars = "starTwo.jpg"; } 
        if($rating == 2.5) { $stars = "starTwoHalf.jpg"; } 
        if($rating == 3) { $stars = "starThree.jpg"; } 
        if($rating == 3.5) { $stars = "starThreeHalf.jpg"; } 
        if($rating == 4) { $stars = "starFour.jpg"; } 
        if($rating == 4.5) { $stars = "starFourHalf.jpg"; } 
        if($rating == 5) { $stars = "starFive.jpg"; } 

        //DISPLAY IT ALL 
        echo "<tr><td width=\"10\"><img src=\"/images/rating/$stars\" width=\"105\" height=\"20\" /></td>"; 
        echo "<td width=\"75\" align=\"center\">$datePosted</td><td>$comment</td><td width=\"85\">$rater</td></tr>\n"; 
       }//END WHILE 
       echo "</table>\n"; 
     } //END IF 
     else { 
      echo "<table class=\"ratingTable\" align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"8\" width=\"550\">\n"; 
      echo "<tr><td align=\"center\"><span class=\"blue\">NO REVIEWS OR RATINGS FOR THIS DISTRIBUTOR</span></td></tr></table>\n";  

     }  //END IF ELSE 

}

하지만 IE에서 실행 (7 또는 8)이이 오류가 발생하는 경우 :

A script on this page is causing Internet Explorer to run slowly. Bla bla bla...

내가 두 페이지에서이 기능은 전화가 같은 오류가 발생할 수 있습니다. 페이지에서 호출을 제거하면 페이지가 제대로로드됩니다. 문제의 페이지와 관련된 어떠한 자바 스크립트가 없습니다

...

도움말, 도움, 나는 왼쪽 많은 머리가없는 ... 도움이 ...

+3

쿼리에서 몇 행을 반환합니까? –

+0

이 페이지에 플래시 (.swf) 파일이 있습니까? –

+0

나는 "기가 바이트"테이블을 가져 와서 사용한다. Firefox, Chrome, Opera, Safari와 같은 다른 브라우저에서 페이지를로드하려고 시도 했습니까? – Wh1T3h4Ck5

답변

1

스크립트를 실행하는 데 시간이 오래 걸리는 경우가 있습니다. IE는 서버로부터의 출력을 기다리고 있지만 오랜 시간이 걸립니다.

매 행마다 플러시 (또는 모듈러스 연산자를 사용하여 25 행마다)를 호출하거나 ob_implicit_flush()를 사용하여 암시 적 플러시를 사용하려고 할 수 있습니다. 그렇게하면 데이터가 계속해서 브라우저로 돌아 오게됩니다 (엄청난 양의 데이터가 있다고 가정합니다). 스크립트에서 30 초 제한을 사용하지 않으려면 set_timeout (0)을 호출해야합니다.

+0

도움을 주셔서 감사합니다! 하지만 아직 개발 중이며 MySQL 데이터베이스에는 15 개 정도의 레코드 만 있습니다. 그렇더라도 추천 한 flush() 및 set_timeout() 함수를 살펴볼 것입니다. 다시 도움 주셔서 감사합니다. – Rick

+0

15 개의 레코드 만 있다면 다른 곳에서 끊어 버리게됩니다. –

0

내가해야 할 첫 번째 일은 스타에 대한 모든 IF 문을 없애는 것입니다. 배열에 스위치 나 스위치 문을 사용하면 스크립트에 필요한 처리량이 줄어들 것입니다. 배열 내 접근 방식 것입니다. 코드는 다음과 같이 보일 것입니다 :

function ratingDetails($uid, $align, $width) { 

$ queryFull = "등급 SELECT * FROM WHERE UID = $의 UID"; $ resultFull = mysql_query ($ queryFull);

// 별 모양의 배열을 선언하십시오. = $ astars 어레이 ( = 0> "notYet.jpg" 1 => "starOne.jpg" 1.5 => "starOneHalf.jpg" 2 => "starTwo.jpg" = 2.5> "starTwoHalf.jpg" 3 => "starThree.jpg" 3.5 => "starThreeHalf.jpg" 4 => "starFour.jpg" 4.5 => "starFourHalf.jpg" = 5> "starFive.jpg" );

//START DISPLAY TABLE IF RESULTS 
    if(mysql_num_rows($resultFull) > 0) {  

     echo "<table class=\"ratingTable\" align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\" width=\"550\">\n"; 
     echo "<tr bgcolor=\"#6699cc\"><th>STARS</th><th>DATE RATED</th><th>COMMENT</th><th>RATED BY</th></tr>\n"; 

      while($rowFull = mysql_fetch_array($resultFull)) { 
       $rating = $rowFull['rating']; 
       $comment = $rowFull['comment']; 
       $datePosted = date("M j, Y", $rowFull['date']); 
       $rid = $rowFull['raterID']; 
       $rater = getUsername($rid); 
       $stars = $astars[$rating]; 

       //DISPLAY IT ALL 
       echo "<tr><td width=\"10\"><img src=\"/images/rating/$stars\" width=\"105\" height=\"20\" /></td>"; 
       echo "<td width=\"75\" align=\"center\">$datePosted</td><td>$comment</td><td width=\"85\">$rater</td></tr>\n"; 
      }//END WHILE 
      echo "</table>\n"; 
    } //END IF 
    else { 
     echo "<table class=\"ratingTable\" align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"8\" width=\"550\">\n"; 
     echo "<tr><td align=\"center\"><span class=\"blue\">NO REVIEWS OR RATINGS FOR THIS DISTRIBUTOR</span></td></tr></table>\n";  

    }  //END IF ELSE 

소수점 이하 자리수는 배열에서 문제를 일으킬 수 있습니다. 그렇다면 키를 따옴표로 묶을 수 있습니다. 예 : "1.5"=>"starOneHalf.jpg"

다른 방법으로 출력 할 때마다 출력을 반향 출력하지 않고 HTML 출력에 대한 변수를 만든 다음 끝에 출력을 반향 출력 할 수 있습니다.

+0

원래 스위치로 설정했지만 IF로 변경하여 내 문제인지 확인했습니다. 아마 내 문제의 주요 원인을 파악한 후에 다시 스위치로 돌아갈 것입니다 ... 또한 변수 $ table = "..."을 시도한 다음 반환 전에 반향을 시도합니다. 어느 쪽의 방법이라도 효과가있는 것처럼 보이지 않았습니다. 나는 의견을 감사한다! !! – Rick

0

내 문제가 발견되었습니다 ... 내 기능 내의 테이블에 css 클래스가 할당되었습니다. 이 특정 CSS 클래스에는 PIE.htc라는 동작이 포함되어 있습니다. 분명히 이것은 호출 될 때마다 IE의 일종의 용해를 일으켰습니다. 나는 PIE (버머, 더 이상 둥근 모서리 또는 IE의 그림자)를 제거하고 내 문제가 해결되었습니다 !!!

도움을 주신 모든 분들께 감사드립니다 !!!

관련 문제