Wykonywanie operacji PHP po upływie 10 sekund

0

Witam,
Mam taki kod PHP:

dbquery("INSERT INTO ".$db_prefix."check_name_ptq (user_id, data)VALUES ('".$userdata['user_id']."', CURDATE())");

On jest odpowiedzialny za dodanie rekordu do bazy MySQL. On się wykonuje od razu po wczytaniu strony, a ja bym chciał, aby to się robiło dopiero po 10 sekundach od wczytania strony, o ile w tym czasie ktoś nie zamknie strony. Jeśli nie zamknie to po 10 sekundach od wejścia an stronę operacja się wykona.
Z góry dziękuję za pomoc!

0

@dawidgarus, to nic nie da, sleep spowoduje zawieszenie całej odpowiedzi. Jeśli ma to nastąpić 10 sekund po załadowaniu strony to konieczne jest użycie JS i wysłanie dodatkowego zapytania HTTP, które spowoduje wykonanie SQL.

0

On jest odpowiedzialny za dodanie rekordu do bazy MySQL. On się wykonuje od razu po wczytaniu strony, a ja bym chciał, aby to się robiło dopiero po 10 sekundach od wczytania strony, o ile w tym czasie ktoś nie zamknie strony. Jeśli nie zamknie to po 10 sekundach od wejścia an stronę operacja się wykona.
Z góry dziękuję za pomoc!

Musisz zrobić to asynchronicznie z wykorzystaniem javascript.

0

A mógłbym prosić o jakiś kod, ponieważ ja się nie znam na javascripcie?

1
setTimeout(function() {
    var xmlhttp;
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET","strona_z_twoim_kodem.php",true);
    xmlhttp.send();
},10000);

możesz do kweić do atrybutu onload tagu body

0

I gdzie mam tu wkleić ten swój kod, bo tu widzę, że to coś do grzebania w adresie URL. To nie może się wywoływać w body, bo ta operacja PHP się wykonuje wtedy, kiedy jeden z warunków PHP jest spełniony.

0
Wojak napisał(a):

I gdzie mam tu wkleić ten swój kod, bo tu widzę, że to coś do grzebania w adresie URL. To nie może się wywoływać w body, bo ta operacja PHP się wykonuje wtedy, kiedy jeden z warunków PHP jest spełniony.

Chyba nie rozumiesz różnicy między php (kodem wykonywanym po stronie serwera) a js (kodem wykonywanym po stronie użytkownika).

0

Możesz jaśniej, bo niewiele z tego rozumiem?

0

to co napisałem to jest skrypt js. jeśli umieścisz go na stronie:

...
<body onload="TU_WKLEJ_SKRYPT">
...
</body>
...

to po 10 sekundach od załadowania strony przez użytkownika w przeglądarce, ten skrypt "otwiera w tle" stronę strona_z_twoim_kodem.php w którym umieszczasz kod php który ma się wykonać.

0

Użyj Cron'a :D

0

W osobnym pliku to będzie ciężko, bo skrypt łączy się z MySQL. To można zrobić w takim pliku, ale skrypt musi wiedzieć jaki użytkownik wszedł na stronę, tzn. pobrać jego ID, więc zrobiłem dodatkową stronę i tam dałem kod. Gdy na nią wchodzę to operacja się wykonuje, ale w kodzie to chyba coś spieprzyłem :/

<body valign='top' onload='setTimeout(function() {
    var xmlhttp;
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else {// code for IE6, IE5
        xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
    }
    xmlhttp.open('GET','http://f1el.pl/viewpage.php?page_id=15',true);
    xmlhttp.send();
},1000);'>

Co zrobiłem źle?

0

Lekcja #2: ciągi znaków w JavaScripcie.
Istnieją 2 rodzaje znaków, w których można umieszczać stringi - są to " (znak cytatu) oraz ' (apostrof).

<body valign='top' onload="setTimeout(function() {
    var xmlhttp;
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else {// code for IE6, IE5
        xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
    }
    xmlhttp.open('GET','http://f1el.pl/viewpage.php?page_id=15',true);
    xmlhttp.send();
},1000);">

Wystarczyło przecież spojrzeć na kolorowanie składni...


Tak na marginesie - atrybut `valign` jest afaik zdeprecjonowany.
0

No tak, ale nadal nie wykonuje skryptu. Może przez to, że on jest na podstronie PHP-Fusion? Można by to było zrobić inaczej, ale wtedy do tego skryptu, który jest w osobnym pliku php musiałbym przekazać w 1 zmiennej wartość. Inaczej nie doda rekordu do bazy. Tak jak napisałeś to nie działa. Zmieniłem tylko " na /" bo tak wyskakiwał błąd, bo body jest w echo " ";, ale to nie wpłynęło, więc nie wiem co jest :(

0

Chciałbym, aby to było tak. Po kolei wykonują się skrypty. I mam taki kod:

    if (iMEMBER) {
 	$grupa = 1;
 	$grupy = explode(".", $userdata['user_groups']);
	if (in_array($grupa, $grupy)) {
 		dbquery("DELETE FROM fusion25v25_check_name_ptq WHERE data < CURDATE()");
		$rows = dbcount("(*)", fusion25v25_check_name_ptq, "user_id='".$userdata['user_id']."'");
			if (!$rows) {
  			dbquery("INSERT INTO fusion25v25_check_name_ptq (user_id, data)VALUES ('".$userdata['user_id']."', CURDATE())");
 			}
 	} 
	}

On ma się wykonać po 10 sekundach. Może użyć funkcji bodajże sleep w php, ale wtedy kolejne instrukcje php się nie wykonują, a tak nie może być. Wszsytko ma się robić dalej i jak minie te 10 sek to wykona się ten skrypt :)

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