Jaden
Jaden

Reputation: 1

While Loop, Maximum execution time of 30 seconds exceeded

I need to call the script function open() when the counter exceeds 5, but when I load my webpage, it shows me a fatal error : Maximum execution time of 30 seconds exceeded. Is that my while loop problem?

$result = mysqli_query($dbconnect, "SELECT id, temp, hum, lum FROM weather ORDER BY id DESC LIMIT 5");

while($row = mysqli_fetch_assoc($result)){

$weather["temp"] = $row["temp"];

$weather["lum"] = $row["lum"];

    $tempcounter = 0;
    while ($weather["temp"] > 27) {  
        $tempcounter++;
    }

    if($tempcounter > 5){
        echo"<script>open()</script>";
    }}

Upvotes: 0

Views: 2180

Answers (3)

user9099520
user9099520

Reputation:

I think it is time over problem.

You can fix this problem by 2 methods.

  1. Set max_execution_time to large value ex. 300 or larger

  2. Begin of your php script call set_time_limit function

    set_time_limit(0);

Upvotes: 1

NTR
NTR

Reputation: 1355

Your while loop is infinite. The loop will start if $weather["temp"] is bigger than 27 and inside you increment the tempcounter but never change $weather["temp"] so it will always be bigger than 27 and never get out of the loop.

You could put $weather["temp"] in a variable. Then inside the loop increment it also. But most importantly you need to reverse your condition. If you increment you need to check < and if you decrement you can check >.

If you increment:

$weatherTemp = $weather["temp"];
    while ($weatherTemp < 27) {  
        $weatherTemp++;
    }

If you decrement:

$weatherTemp = $weather["temp"];
        while ($weatherTemp > 27) {  
            $weatherTemp--;
        }

And then you can declare $tempcouter like this:

$tempcounter = $weatherTemp - $weather["temp"]; //Temperature needed to get to 27
if($tempcounter > 5){
        echo"<script>open()</script>";
    }

Code is not tested it might not work has it is.

If what you want to do is get the difference between 27 and your temperature you are not using the right logic here. You could simply take 27 minus your temperature form the query. If the result is negative just change it to positive and you get the difference.

Upvotes: 2

Ghabriel Nunes
Ghabriel Nunes

Reputation: 372

In this loop:

$tempcounter = 0;
while ($weather["temp"] > 27) {  
    $tempcounter++;
}

You're not updating $weather["temp"], so it will loop forever if that condition is satisfied.

Upvotes: 0

Related Questions