Для достижения цели записи обращений к элементам страницы вам потребуется использовать http-запрос в той или иной форме для связи с PHP-сервером, на котором будет записано совпадение - либо в базе данных, либо в нестабильном сеансе, либо в файле. В этом примере используется простая функция ajax
, хотя вместо нее можно использовать более гибкий fetch
api.
Эта демонстрация должна дать вам основы для создания решения, которое регистрирует в db ...
<?php
session_start();
/* store the click in a session or log to DB */
/*
using a session will only give accurate information for a single user and a single session
so to actually record this information for all users and across time and space you really
need to use a database or, at least some sort of file.
*/
if( $_SERVER['REQUEST_METHOD']=='POST' && isset( $_POST['action'], $_POST['name'], $_POST['value'] ) && $_POST['action']=='log-click' ){
$name=$_POST['name'];
$value=$_POST['value'];
$svar='clicks';
/* create the session variable to record hits */
if( !isset( $_SESSION[ $svar ] ) ) $_SESSION[ $svar ]=new stdClass;
/* assign initial value or increment hit count */
if( !isset( $_SESSION[ $svar ]->{$name} ) )$_SESSION[ $svar ]->{$name}=1;
else $_SESSION[ $svar ]->{$name}++;
/* send something back to the ajax callback - to be processed however suits */
exit( json_encode( array(
'name' => $name,
'value' => $value,
'time' => time(),
$svar => $_SESSION[ $svar ]->{$name}
)
)
);
}
?>
<!DOCTYPE html>
<html>
<head>
<script>
/* very simple ajax function */
const ajax=function(m,u,p,c,o){
with( new XMLHttpRequest() ){
onreadystatechange=function(e){
if( this.status==200 && this.readyState==4 ){
c.call( this, this.response, this.getAllResponseHeaders(), o )
}
}
let params=Object.keys( p ).map( k=>{
return [k,p[k]].join('=')
}).join('&');
if( m.toUpperCase()=='GET' ){
u='?'+params;
params=null;
}
open( m.toUpperCase(), u, true );
setRequestHeader('Content-Type','application/x-www-form-urlencoded');
send( params );
}
};
document.addEventListener('DOMContentLoaded',e=>{
/* Find elements of these types and bind an event listener to each */
let col=document.querySelectorAll( 'input[type="button"], input[type="checkbox"]' );
/* iterate through each DOM element and assign listener */
Array.prototype.slice.call( col ).forEach( input=>{
input.addEventListener('click', e=>{
/* construct arguments for ajax request */
let method='post';
let url=location.href;
let params={ action:'log-click', name:e.target.name, value:e.target.value };
let callback=function(r){
document.querySelector( 'output' ).innerText=r
}
let options={};
/* make the ajax request */
ajax.call( this, method, url, params, callback, options )
})
})
});
</script>
</head>
<body>
<form method='post'>
<fieldset>
<input type='button' name='bttn_1' value='Click here to win a mystery prize' />
<input type='checkbox' name='checkbox_1' value=1 />
</fieldset>
<fieldset>
<input type='button' name='bttn_2' value='Click here to win luxury items' />
<input type='checkbox' name='checkbox_2' value=1 />
</fieldset>
<fieldset>
<input type='button' name='bttn_3' value='Click here to win a car' />
<input type='checkbox' name='checkbox_3' value=1 />
</fieldset>
<fieldset>
<input type='button' name='bttn_4' value='Click here to win a dream holiday' />
<input type='checkbox' name='checkbox_4' value=1 />
</fieldset>
</form>
<output></output>
</body>
</html>