• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed php - funkcja time() zwraca cały czas ten sam wynik...

VPS Starter Arubacloud
0 głosów
474 wizyt
pytanie zadane 30 czerwca 2017 w PHP przez quesses1999 Nowicjusz (200 p.)
zamknięte 30 czerwca 2017 przez Eryk Andrzejewski

Mógłby mi ktoś wytłumaczyć dlaczego ten kod zwraca cały czas ten sam czas, dopiero po odświeżeniu strony się aktualizuje?? :(


<!DOCTYPE HTML>
<html lang="pl">
    <head>
        <meta charset="utf-8"/>
        <meta http-equiv="X-UA-Compatible" content="IT=edge,chrome=1"/> 
        <script>
        
        function asd()
        {
            document.getElementById('ed').innerHTML += "  <?php echo time();?> </br>";
            setTimeout(asd,100);
        }
        
        </script>
    </head>

    <body onload="asd()">
        <h1 id="ed">    </h1>
    </body>
</html>

I jeszcze jedno pytanie odnośnie Ajaxa: ponieważ stworzyłem kod, który bez odświeżania strony wysyła formularz do pliku.php, w którym to pobierane są dane z bazy SQL i zapisywane w zmiennej sesyjnej. Problem polega na tym, że jak za pierwszym razem uruchamiam stronę, wszystko wczytywane jest poprawnie, jednak jeżeli dokonam np. ręcznej zmiany w bazie SQL, po czym bez odświeżania strony ajax wywołuje kod z pliku plik.php, to dane zapisywane w zmiennych są nadal takie same, jak przez ręczną zmianą. Dopiero kliknięcie f5 sprawia, że się zaktualizują... Zdaję sobie sprawę, że to, co napisałem może być ciężkie do zrozumienia, ale proszę pytać - wyjaśnię dokładniej. Z góry dziękuję za pomoc i przepraszam jeżeli zrobiłem coś źle, ale pierwszy raz napotkałem problem podczas programowania, którego nie zdołałem pomimo wielu godzin rozwiązać za pomocą internetu.

komentarz zamknięcia: Problem rozwiązany
komentarz 30 czerwca 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Pozwoliłem sobie na chwilę otworzyć pytanie, żeby móc zedytować jego treść.

Kod źródłowy proszę wrzucać w bloczek, proszę też stosować zasady interpunkcji. Więcej informacji w regulaminie i FAQ.

3 odpowiedzi

+1 głos
odpowiedź 30 czerwca 2017 przez criss Mędrzec (172,590 p.)
wybrane 30 czerwca 2017 przez quesses1999
 
Najlepsza

Kod php jest wykonywany przez serwer. Po wykonaniu php serwer wysyła dokument html do klienta. W twoim przypadku jest to ofc wartość zwrócona przez time() 'wklejona' do wynikowego dokumentu zamiast echo. Przeglądarka (klient) natomaist wykonuje kod js który zawiera ten wynik wypluty przez echo. Kod php nie będzie wykonywany przy każdym wywołaniu funkcji js. To nie ma prawa działać w ten sposób. Najlepiej jeśli sam się przekonasz wyświetlając źródło strony otrzymanej z serwera (ctrl + U).

Powinieneś łyknąć minimum teorii, bo nie masz pojęcia co robisz.

Na drugie pytanie ci nie odpowiem, bo nie zajmuje się webdevem.

PS: wstaw kod w pole do tego przeznaczone (ikonka {...} w edytorze).

komentarz 30 czerwca 2017 przez quesses1999 Nowicjusz (200 p.)
dzieki za odp, wiele mi to wyjasniło
+1 głos
odpowiedź 30 czerwca 2017 przez Ehlert Ekspert (212,630 p.)
Ponieważ time w PHP zwraca timestamp. Liczbę sekund od 1 stycznia 1970 roku. Co więcej podczas generowania htmla za string który ma być dopisywany do elementu w JS php podstawia liczbę (jako string). Po wysłaniu strony do przeglądarki zawartość skryptu nie ulegnie zmianie. Dlatego co 0,1 sekundy dopisuje ciągle to samo.
0 głosów
odpowiedź 30 czerwca 2017 przez Grzesiek Kasperski Nowicjusz (180 p.)
edycja 1 lipca 2017 przez Grzesiek Kasperski

Biorąc pod uwagę plik Kontroler PHP:

<?php
    // wykorzystywane tylko przez AJAX
    $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
    $_SESSION['test'] = "inny TEST"; // funkcja jest bezstanowa wiec to przypisanie nie bedzie widoczne
    echo json_encode($arr);
?>

Oraz plik widoku:

<html>
    <?php session_start(); $_SESSION["test"] = "test"; ?>
<head>
</head>
<body>
    <div id="test">Tutaj będzie zmienna sesyjna</div>
</body>

<script>
    var httpReq = new XMLHttpRequest();
    httpReq.onreadystatechange = function () {
        if (httpReq.readyState == 4 && httpReq.status == 200) {
            // wyświetli się nadal test, nadpisywanie zmiennej w tamtym pliku nie ma wpływu
            document.getElementById("test").innerHTML =  "<?= $_SESSION['test']?>";
            // tutaj mozna dzialac tylko JSem zeby dynamicznie zmieniac strone:
               document.getElementById("test").innerHTML += httpReq.response;
        }
    };
    httpReq.open("GET", "http://localhost/New%20folder/returnData.php", true);
    httpReq.send();
</script>
</html>

Nadpisywana zmienna sesyjna w kontrolerze nie ma wplywu na tą która jest w Widoku. Można ją nadpisać po wykonaniu zapytania AJAX, ale to i tak nie wplynie na strone. Strone dynamicznie zmieniamy tylko z pomocą JS.

komentarz 30 czerwca 2017 przez Ehlert Ekspert (212,630 p.)
A gdzie session_start?

Podobne pytania

0 głosów
2 odpowiedzi 141 wizyt
pytanie zadane 2 lutego 2018 w HTML i CSS przez Kacperhehe Bywalec (2,930 p.)
0 głosów
0 odpowiedzi 139 wizyt
0 głosów
1 odpowiedź 115 wizyt
pytanie zadane 14 marca 2020 w Java przez kielub Nowicjusz (150 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...