Forum » Programiranje » Klic funkcije v PHP onclick
Klic funkcije v PHP onclick
a-ptuj ::
Pozdravljeni!
V PHP bi rad naredil števec, ki bi mi štel kolikokrat sem kliknil na gumb "Štej klike na gumb" in nato razultat shranil v *.txt datoteko, obenem pa bi ga izpisal tudi zraven gumba. Naredil sem spodnjo kodo, ki pa se mi ob kliku na gumb ne zažene in ne izpiše kolikokrat je že bilo kliknjeno do sedaj. Kaj je z funkcijo narobe. Prosim za pomoč. Če je mogoče kar v sami kodi. Hvala že v naprej.
V PHP bi rad naredil števec, ki bi mi štel kolikokrat sem kliknil na gumb "Štej klike na gumb" in nato razultat shranil v *.txt datoteko, obenem pa bi ga izpisal tudi zraven gumba. Naredil sem spodnjo kodo, ki pa se mi ob kliku na gumb ne zažene in ne izpiše kolikokrat je že bilo kliknjeno do sedaj. Kaj je z funkcijo narobe. Prosim za pomoč. Če je mogoče kar v sami kodi. Hvala že v naprej.
<?php function stej (){ $vsebina = file("delo.txt"); $stevilo = intval($vsebina[0]); $stevilo++; $handler = fopen("delo.txt", "w"); fputs($handler, $stevilo); fclose($handler); print $stevilo; } ?> <html> <input type="submit" onclick="<?php stej (); ?> " value="Štej klike na gumb" /> </html>
overlord_tm ::
onclick klice javascript funkcije in ne php funkcij.
Rabil bos narediti neko JS kodo, ki bo potem klicala to php funkcijo.
PS: tak nacin bo prestel klike vseh uporabnikov na strezniku skupaj, ne samo klike posameznega uporabnika. Ce rabis samo klike enega uporabnika, je JS zadosti.
Rabil bos narediti neko JS kodo, ki bo potem klicala to php funkcijo.
PS: tak nacin bo prestel klike vseh uporabnikov na strezniku skupaj, ne samo klike posameznega uporabnika. Ce rabis samo klike enega uporabnika, je JS zadosti.
a-ptuj ::
Prav to želim, da prešteje klike vseh uporabnikov skupaj, zato rabim PHP, saj se morajo kliki posameznega uporabnika zapisati v *.txt, da lahko od tam vzame podatek koliko klikov so že naredili različni uporabniki do sedaj in temu prišteje nov klik.
Kako naj z JS kodo zaženem PHP kodo, da bo zagnala funkcijo stej () v PHP kodi? Prav to bi rad vedel, da bo zadeva delala. Mi jo prosim lahko kdo napiše, saj meni to ne uspe.
Kako naj z JS kodo zaženem PHP kodo, da bo zagnala funkcijo stej () v PHP kodi? Prav to bi rad vedel, da bo zadeva delala. Mi jo prosim lahko kdo napiše, saj meni to ne uspe.
MrBrdo ::
Temu se na kratko reče Ajax, poglej si kakšen tutorial, da ne bomo izumljali tople vode.
MrBrdo
DiTi ::
se da rešit tudi brez ajaxa, ne vem sploh zakaj hočeš s javascriptom če gre z enostavno formo.
a-ptuj ::
Če gre to brez javascripta samo s formo v php, OK. Kako se pa to naredi? Kako se napiše taka koda, ki bo vsebovala *.txt, gumb in izpis? Jaz tega nažalost ne znam, a mi jo lahko napišete prosim.
paco ::
...
Če ti ne rata, pa tolk časa glej v tole pa googlej, dokler ne boš znal sam tega nardit. :)
<?php $recordFile = "delo.txt"; $Type = (string)$_GET["type"]; if($Type == "getno") { echo (int)@file_get_contents($recordFile); exit(); } elseif($Type == "incno") { @file_put_contents($recordFile, 1+(int)@file_get_contents($recordFile)); exit(); } $CurrentClicks = (int)@file_get_contents("delo.txt"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf8" /> <script type="text/javascript" language="javascript"> var IntervalTimer = 5; //in miliseconds var IntervalID = resetInterval(); function ajaxRequest(url, vars, div_id) { var request; try { request = new XMLHttpRequest(); } catch(e) { request = new ActiveXObject("Microsoft.XMLHTTP"); } if(typeof(div_id) != "undefined") { request.onreadystatechange = function() { if (request.readyState == 4) { if (request.status == 200) document.getElementById(div_id).innerHTML = request.responseText; else document.getElementById(div_id).innerHTML = "-"; } } } request.open("GET", url + vars, true); request.send(null); } function resetInterval() { var _IntervalID = setInterval("setCurrentClickNumber()", IntervalTimer*1000); return _IntervalID; } function setCurrentClickNumber() { ajaxRequest("<?=$_SERVER['PHP_SELF']?>", "?type=getno", "clicksCount"); } function increaseClickNumber() { ajaxRequest("<?=$_SERVER['PHP_SELF']?>", "?type=incno"); } function buttonOnClick() { clearInterval(IntervalID); increaseClickNumber(); setCurrentClickNumber() IntervalID = resetInterval(); } //--> </script> </head> <body> <input type="button" value="Prištej" onclick="buttonOnClick();" /> Klikov: <div style="display:inline;" id="clicksCount"><?=$CurrentClicks?></div> </body> </html>
Če ti ne rata, pa tolk časa glej v tole pa googlej, dokler ne boš znal sam tega nardit. :)
It iz aj.
a-ptuj ::
Zelo sem vesel, da Ste mi napisali skript. Vendar zadeva še vedno ne dela. kaže mi, da je napaka v 3 vrstici skripta. Prosim še za ta popravek. Hvala Vam.
DiTi ::
paco wtf je to o.O
tretja vrstica pa itak da ne more delat...moraš preverjat
tretja vrstica pa itak da ne more delat...moraš preverjat
if(isset($_GET['nekaj'])){ $nekaj = $_GET['nekaj'];}
paco ::
DiTi, to je koda za katero je zaprosil a-ptuj :P, in pa napaka ni v tem, temveč v 3 vrstici JS :P.
(PS: Tudi preverjanje ni potrebno, saj če $_GET["type"] ni nastavljen, dobi spremenljivka vrednost NULL, oz. v mojem primeru zaradi casta (string) postane prazen string(""))
a-ptuj, zgornja koda meni deluje ( http://paco.pwnz.org/d/a.php ), tako da niti ne vem, kaj naj popravljam.
(PS: Če stran ni dosegljiva, počakaj, da prižgem računalnik :P)
Tretja vrstica v mojem primeru pa je itak prazna. :)
(PS: Tudi preverjanje ni potrebno, saj če $_GET["type"] ni nastavljen, dobi spremenljivka vrednost NULL, oz. v mojem primeru zaradi casta (string) postane prazen string(""))
a-ptuj, zgornja koda meni deluje ( http://paco.pwnz.org/d/a.php ), tako da niti ne vem, kaj naj popravljam.
(PS: Če stran ni dosegljiva, počakaj, da prižgem računalnik :P)
Tretja vrstica v mojem primeru pa je itak prazna. :)
It iz aj.
Zgodovina sprememb…
- spremenilo: paco ()
a-ptuj ::
Pozdravljeni!
Da nebom narobe napisal. Ko zaženem Vašo kodo mi javi naslednjo napako "PHP Notice: Undefined index: type in E:\delo.php on line 3 PHP Stack trace: PHP 1. {main}() E:\delo.php:0" V kateri vrstici je prišlo do napake jaz ne vem.
Zgornjo Vašo koda sem dal na stran http://mb.ipaslovenija.org/delo.php . Koda prvič zapiše podatek v datoteko delo.txt nato pa ne več. datoteka delo.txt ima atribute nastavljene na 777 (branje, pisanje, izvajanje).
Da nebom narobe napisal. Ko zaženem Vašo kodo mi javi naslednjo napako "PHP Notice: Undefined index: type in E:\delo.php on line 3 PHP Stack trace: PHP 1. {main}() E:\delo.php:0" V kateri vrstici je prišlo do napake jaz ne vem.
Zgornjo Vašo koda sem dal na stran http://mb.ipaslovenija.org/delo.php . Koda prvič zapiše podatek v datoteko delo.txt nato pa ne več. datoteka delo.txt ima atribute nastavljene na 777 (branje, pisanje, izvajanje).
paco ::
Tudi meni, ampak da zdej razrešimo ta problem :P.
Zadeva sicer deluje, ampak če $_GET["type"] ni nastavljen, ti pri nastavljanju vrednosti v spremenljivko vrne error(oz. notice). Problem lahko rešiš na 2 načina:
1. na vrh php datoteke dodaš
2. ali pa kot je že prej rekel DiTi, preden nastaviš spremenljivko preveriš če je $_GET["type"] nastavljen
zamenjaš z
Zadeva sicer deluje, ampak če $_GET["type"] ni nastavljen, ti pri nastavljanju vrednosti v spremenljivko vrne error(oz. notice). Problem lahko rešiš na 2 načina:
1. na vrh php datoteke dodaš
error_reporting(false);
2. ali pa kot je že prej rekel DiTi, preden nastaviš spremenljivko preveriš če je $_GET["type"] nastavljen
$Type = (string)$_GET["type"];
zamenjaš z
$Type = NULL; if(isset($_GET["type"])) $Type = (string)$_GET["type"];
It iz aj.
Zgodovina sprememb…
- spremenilo: paco ()
a-ptuj ::
Ob zamenjavi dela skripte napake tudi meni več ne javlja, vendar meni na spletni strani http://mb.ipaslovenija.org/delo.php zadeva ne dela. Ko odprem piše Klikov: 12 , ko pa kliknem nov klik pa piše Klikov: 11, potem pa nič več. V datoteki "delo.txt" http://mb.ipaslovenija.org/delo.txt pa je zapisanih 12.
fiction ::
A ste že slišal vic, ko gre policaj programirat v PHP-ju...
Just kidding.
To, da imaš števec v datoteki, ni ravno najbolj idealno. Problem je, če dobiš npr. več bolj ali manj sočasnih requestov in nisi več prepričan, kako se bodo stvari izvajale. Če je v določenih primerih lahko narobe, gre za race-condition. Najbrž je opisana težava povezana s tem. Lahko da je nekdo prebral ven 10, medtem se je vse skupaj povečalo do 12, potem pa je ta prvi proces prišel spet do besede in veselo napisal nazaj 11. Priporočam uporabo flock() ali pa enostavno kakšne relacijske baze, magari tudi SQLite, če ne gre drugače.
Just kidding.
To, da imaš števec v datoteki, ni ravno najbolj idealno. Problem je, če dobiš npr. več bolj ali manj sočasnih requestov in nisi več prepričan, kako se bodo stvari izvajale. Če je v določenih primerih lahko narobe, gre za race-condition. Najbrž je opisana težava povezana s tem. Lahko da je nekdo prebral ven 10, medtem se je vse skupaj povečalo do 12, potem pa je ta prvi proces prišel spet do besede in veselo napisal nazaj 11. Priporočam uporabo flock() ali pa enostavno kakšne relacijske baze, magari tudi SQLite, če ne gre drugače.
paco ::
Izgleda da je problem v samem javascriptu in njegovem prevajanju. Zadeva namreč deluje brezhibno v Firefoxu in Operi, malo počasneje pa v Chrome-u(verjetno zaradi requestov).
It iz aj.
a-ptuj ::
Hvala lepa vsem, ki Ste mi pomagali pri tej kodi v PHP.
Res je zadeva v Firefoxu (FI-3.6)deluje brezhibno. Ne deluje pa v Internet Exploreju (IE-8) v katerem sem jaz testiral delovanje. A jo je možno usposobiti tudi, da bo delala v IE8?
Res je zadeva v Firefoxu (FI-3.6)deluje brezhibno. Ne deluje pa v Internet Exploreju (IE-8) v katerem sem jaz testiral delovanje. A jo je možno usposobiti tudi, da bo delala v IE8?
fiction ::
Izgleda da je problem v samem javascriptu in njegovem prevajanju.V bistvu fora ni v tem. Vsaj pri meni se JS v IE8 čisto lepo izvede, dobim celo odgovor. Težava je caching od IE-ja. Če probaš na roko delo.php?type=getno zmeraj dobiš isti odgovor. Če reloadaš page dobiš pravilni rezultat od PHP-ja, potem pa se prek AJAX-a povozi vrednost (in je spet napačna). Jaz bi poskusil:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
in
<META HTTP-EQUIV="Expires" CONTENT="-1">
znotraj <head> taga.
Ali pa bolj grda fora, da poleg type parametra v requestu zraven appendaš še nek random in mu daš vrednost Math.random().
verjetno zaradi requestovTisto, da se stvar refresha na 5 s, je čisti overkill in niti ni bila zahteva "stranke".
Res je zadeva v Firefoxu (FI-3.6)deluje brezhibno.Zadeva ne deluje brezhibno kot sem že prej povedal, ker imaš notri tekmovalne okoliščine. Pri kakšni resni zadevi zna biti to kar hud problem. Je pa res, da je pri IE prej prišla do izraza druga reč. Če bi rekel v SQL stavku UPDATE SET value=value+1 bi se to zgodilo znotraj ene transakcije, tako pa prebereš vrednost in jo nazaj zapišeš, nimaš pa pojma kaj se (morebiti) dogaja vmes.
MrBrdo ::
Ali pa bolj grda fora, da poleg type parametra v requestu zraven appendaš še nek random in mu daš vrednost Math.random().
sej ni tok grda.. se kr velik uporablja, v RoR je prakticno default :)
MrBrdo
techfreak :) ::
Kolikor vem, ima IE6 občasne težave z querystringi in ne zahteva nove strani, če spremeniš samo npr. "?t=" + Math.random().
fiction ::
Kolikor vem, ima IE6 občasne težave z querystringi in ne zahteva nove strani, če spremeniš samo npr. "?t=" + Math.random().Zanimivo. Sicer se na srečo ne ukvarjam z web developmentom, ampak kolikor sem slišal ima IE6 težave še z marsičem
a-ptuj ::
Zadeva deluje v večih brskalnikih. Ne dela pa v Internet Exploreju (EI6,EI7, EI8). A bi mogoče delala, če ne bi bilo samodejnega osveževanja, ki je sedaj vključebo v kodo. Ali je samodejno osveževanje nujno potrebno za delovanje take kode? Ali bi jo lahko morda kodo skrajšali, pa bi še kljub temu delala pravilno? Že naprej hvala za odgovor.
techfreak :) ::
Preizkusi:
namesto:
var request; try{ request = new ActiveXObject('Msxml2.XMLHTTP'); }catch(e){ try{ request = new ActiveXObject('Microsoft.XMLHTTP'); }catch(e){ request = new XMLHttpRequest(); } }
namesto:
var request; try { request = new XMLHttpRequest(); }catch(e){ request = new ActiveXObject("Microsoft.XMLHTTP"); }
Zgodovina sprememb…
- spremenil: techfreak :) ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Excell klicanje makrota z različnimi gumbiOddelek: Pomoč in nasveti | 799 (615) | JankoK |
» | Vprašanje iz JaveOddelek: Programiranje | 1140 (880) | illion |
» | [c#] Program ki izvaja autoclickOddelek: Programiranje | 1289 (1114) | milc |
» | [Java]VprašanjaOddelek: Programiranje | 2103 (1571) | Bela01 |
» | "Paste" iz enega okna v drugega?Oddelek: Programiranje | 990 (884) | poweroff |