Wątek przeniesiony 2015-05-02 22:41 z PHP przez dzek69.

header Location refresh dłuższe zapytanie nie odświeża

0

Witam!
Mam mały problemik, liczę na waszą pomoc.
Wykonuje sobie następujący skrypt, który ma się odświeżać co 2 sekundy:

if( file_exists("pages/hala1.php") ) 
{
    include("pages/hala1.php");
    header("Refresh: 2; url=http://<ip>/ewidencja/hala1.php");
}

Co przekierowuje mnie na taki skrypt (pod powyższym adresem)

<div class="center">WEZWANIA HALA NR 1</div><br/>
<?php
    //echo "<div id='sygnal1'>";
    for($i=3;$i<=4;$i++) 
    {
    //connection();
        //$i=1;
        echo "<div id='sygnal1'>";
        $result = mysql_query("SELECT * FROM `gpio_info` WHERE `lampka` = 2 and `rasp` = ".$i." order by `kod`");
        //$result = mysql_query("SELECT * FROM `gpio_info` WHERE `lampka` = 2 order by `kod`");
        if($result)
        {
            while($row = mysql_fetch_array($result))
            {
                $stolik = $row[8];
                echo "<div id='stolik".$stolik."' class='sygnal1'>";
                if ($row[6]==1)
                {
                    echo "<div class='stolik ON'><b>$stolik</b></br>";
                }
                else if ($row[6]==0)
                {
                    echo "<div class='stolik OFF'><b>$stolik</b></br>";
                }
                echo "</div>";
                echo "</div>";
            }
        }
        //mysql_close();
        echo "</div>";
        //echo "</br>";
        echo "<div id='sygnal2'>";
        $result = mysql_query("SELECT * FROM `gpio_info` WHERE `lampka` = 1 and `rasp` = ".$i." order by `kod`");
        //$result = mysql_query("SELECT * FROM `gpio_info` WHERE `lampka` = 1 order by `kod`");

        if($result)
        {
            while($row = mysql_fetch_array($result))
            {
                $stolik = $row[8];
                echo "<div id='stolik".$stolik."' class='sygnal2'>";
                if ($row[6]==1)
                {
                    echo "<div class='stolik ON'><b>$stolik</b></br>";
                }
                else if ($row[6]==0)
                {
                    echo "<div class='stolik OFF'><b>$stolik</b></br>";
                }
                echo "</div>";
                echo "</div>";
            }
        }
        echo "</div>";
    //mysql_close();    
    //sleep(1);
    }

Wszystko jest w porządku, jednak gdy zamienie:

    for($i=3;$i<=4;$i++) 

na

    for($i=1;$i<=4;$i++) 

w tym momencie skrypt generuje stronę, ale jej już nie odświeża. Co może być przyczyną?
W zasadzie chodzi mi o wyświetlenie zawartości całej bazy danych (małej bazy - na 70 rekordów), jednak strona się generuje, jednak nie odświeża się później...
Z góry dziękuje wam za pomoc, w razie jak bym czegoś nie dopowiedział piszcie proszę - starałem się jak najlepiej sprecyzować.

0

Musisz pod tym nowym adresem wywołać refresh z docelowym adresem jeszcze raz.

Ten nagłówek nie jest do odświeżania co X sekund - to nagłówek do przekierowania (jak jak Location) w X sekund po załadowaniu strony.

0

ale ten adres prowadzi do tego samego pliku ;)
No i zwróć proszę uwagę, że gdy mam

    for($i=3;$i<=4;$i++) 

to skrypt wykonuje się 2 razy i działa refresh co 2 sekundy. A jak zmienię na for($i=1;$i<=4;$i++) czyli gdy ma się wykonać 4ry razy, wykonuje się jednak po skończeniu i upływie 2ch sekund już się nie nie refresh'uje...

Edit:
może np ogranicza mnie czas wykonania skryptu, jednak qrcze jak łącznie 8 zapytań i ich przetworzenie może przekraczać ten czas?
Raczej mało prawdopodobne, ale jak to jest ze jak podzielę skrypt na 2 pliki (po 4ry zapytania) i wywołam na 2ch podstronach to zadziała? xD Tylko nie wiem czemu i jak to naprawić? xD

0

Skoro prowadzi do tego samego pliku to wystarczy:

header("Refresh: 5;URL=plik_docelowy.php"); 

@dzek69: Jak ten nagłówek nie jest do odświeżania strony ?

Nagłówek działa tak samo jak:

<meta http-equiv="refresh" content="0;url=plik.php"/>
0
PiDev napisał(a):

Skoro prowadzi do tego samego pliku to wystarczy:

header("Refresh: 5;URL=plik_docelowy.php"); 

@dzek69: Jak ten nagłówek nie jest do odświeżania strony ?

Nagłówek działa tak samo jak:

<meta http-equiv="refresh" content="0;url=plik.php"/>

Oczywiście można i tak, jednak to wciąż nie jest problemem, ani też rozwiązaniem. Nawet jeżeli to poprawie, to i tak się nie odświeża... czyli skrypt wykonuje się raz i koniec.

0

a możesz ten header dać przed pętlę for?

może Ci się skrypt timeoutuje, a ty ani nie wyświetlasz błędów, ani ich nie logujesz (ew. w logi nie zaglądasz)? umieszczenie wywołania header nawet przy timeoucie powinno dokleić ten nagłówek

0

Racja nie miałem wyświetlania błędów włączonych, a tu:

Warning: Cannot modify header information - headers already sent by (output started at F:\WWW\default\ewidencja\pages\hala1.php:19) in F:\WWW\default\ewidencja\hala1.php on line 28

ale czy mógł by mi ktoś objaśnić, bo nie bardzo kminie czemu?

1

Nie możesz wysyłać nagłówków, gdy już np. wywołałeś echo, bo nagłówki są wysyłane przed treścią strony.
Użyj JSa lub znaczników meta.

0

Boże, racja;)
header("Refresh: 2; url=http://<ip>/ewidencja/hala1.php"); przeniosłem na początek podstrony, działa;)
dziękuje ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0