PHP函数givine IE问题

时间:2011-03-29 15:50:04

标签: 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)中运行时,会抛出此错误:

  

此页面上的脚本导致Internet Explorer运行缓慢。 Bla bla bla ...

我从两个页面调用此函数,两者都会导致相同的错误。如果我从页面中删除了该呼叫,则页面加载正常。

相关网页没有涉及javascript ...

帮助,帮助,帮助...我没有多少头发......

瑞克

3 个答案:

答案 0 :(得分:1)

正在发生的事情是执行脚本需要很长时间。 IE正在等待服务器的输出,但这需要很长时间。

您可能想要尝试每行调用flush()(或者使用模运算符每25行)或使用ob_implicit_flush()来启用隐式刷新。这样你就可以不断地将数据返回浏览器(我假设你有大量的数据)。您可能还需要调用set_timeout(0)来禁用脚本的30秒时间限制。

答案 1 :(得分:0)

我要做的第一件事就是去掉星星的所有IF语句,要么使用数组,要么使用switch语句,其中任何一个都会减少脚本所需的处理。阵列将是我的方法。您的代码如下所示:

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

$ queryFull =“SELECT * FROM rating WHERE uid = $ uid”; $ resultFull = mysql_query($ queryFull);

//为星星声明数组。 $ astars = array(         0 =&GT; “notYet.jpg”         1 =&GT; “starOne.jpg”         1.5 =&GT; “starOneHalf.jpg”         2 =&GT; “starTwo.jpg”         2.5 =&GT; “starTwoHalf.jpg”         3 =&GT; “starThree.jpg”         3.5 =&GT; “starThreeHalf.jpg”         4 =&GT; “starFour.jpg”         4.5 =&GT; “starFourHalf.jpg”         5 =&GT; “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输出创建一个变量,而不是每行回显输出,然后在结尾处回显输出。

答案 2 :(得分:0)

我发现了我的问题...... 我的函数中的表被分配了一个css类。这个特殊的css类包含一个名为PIE.htc的行为。显然,这会导致某种IE在被调用时融化。我删除了PIE(在IE中没有更多的圆角或阴影),我的问题解决了!

感谢所有在此过程中提供帮助的人!!!