создать функцию php, которая подсчитывает клики и сохраняет значение в куки - PullRequest
0 голосов
/ 28 марта 2019

В настоящее время пытаюсь сохранить количество нажатий на кнопки и флажки в файле cookie или сеансе, а затем сохранить его в базе данных.Моя идея состоит в том, чтобы создать функцию подсчета для каждой кнопки и флажок.

Ответы [ 3 ]

1 голос
/ 28 марта 2019

Вам необходимо добавить код JavaScript, который отслеживает событие клика, и при каждом клике вы можете запускать ajax-вызов для обновления счетчика в базе данных.

1 голос
/ 28 марта 2019

Для достижения цели записи обращений к элементам страницы вам потребуется использовать 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>
1 голос
/ 28 марта 2019

Вы можете использовать JavaScript XHR (ajax) для отправки данных о кликах в скрипт php. или же Использовать куки в формате javascript ...

...